AVR Dažnomatis

Labai aktualus dalykas dirbant su mikrokontroleriais yra dažnis. Kažkaip seniau vis galvodavau ir galvodavau kaip pasidaryti aparačiuką jam išmatuoti 🙂 O dabar taip stagiai pribėgus ir be didesnių sunkumų pavyko kažką panašaus padaryti 🙂 Kadangi žadu daryti kuro sanaudų matuoklį galvoju reikia pradėt treniruotis su tuo dažniu. Pakolkas padariau visų primityviausiai, kad tik rodytų dažnį.. be jokių pusperiodžių plotčių ir t.t. Dariau ant 7 segmentų ekraniuko.

5khz

Iš pradžių pasileidau ATTiny2313  kaip dažnio generatorių (50Hz) 🙂 O paskui kibau į ATMega8, kuri ir matuos dažnį. Taigi visų pirmą reik šiek tiek teorijos, bent jau dažnio formulę žinoti 🙂 f = 1/T, kur: f – dažnis, T – laiko periodas. Pvz 10Hz dažnis būtų 10 kartų per sekundę pasikartojęs signalas. Gauname 1/10=0.1s tai įstačius į dažnio formulę ir gautumę dažnį. Taigi norint ieškoti dažnio reikia turėti žinomą laiko tarpą. Aš pasidariau vieną sekundę.

TCCR1B |= (1<<CS12)|(1<<WGM12); //256 prescaler, CTC mode
TIMSK  |= (1<<OCIE1A); // output compare match interupt enable
OCR1A   = 31250; // 8000000/256 = 31250 counts per 1s

Kai tik sekundė praeina yra paiimamas skaičius, kurį skaičiuoja INT0 mikrokontrolerio koją. Kad ta koja skaičiuotu reikia sukonfiguruoti interuptus.

MCUCR |= (1<<ISC01); //falling edge on INT0
GICR  |= (1<<INT0); //enable INT0

Kai tik signalas pereis is HIGH į LOW (fall) įvyks interuptas, kuris vygdys labai paprastą kodą.

ISR(INT0_vect)
{
  count++; //skaitliukas padidinamas vienetu
}

Turime laiką(1s) ir turime kartus kiek jų įvyko per tą sekundę, tai ir bus dažnis. Taip pat kas sekundę atnaujiname ir duomenis ekrane.

ISR(TIMER1_COMPA_vect)
{
  sk=count; // skaitliukas i ekrana
  count=0; //nuresetinamas naujam skaiciavimui
}

ir nunuliname skaitikliuką:) kaip ir visas dažnomatis..

board

Aišku čia nėra labai tikslus nes nenaudojau išorinių kvarcų, bet kaip iki 9999Hz dažniui pamatuoti kaip ir užtektu 🙂

count

Taigi pradžiai bus gerai 🙂 Kai darysiu tiksliau reikės pamėgint ir ASM programavimo kalba pasinaudot, kurioje dar tamsokas miškas 🙂 Bet neblogai ir po tamsų mišką paklajot, vistiek kokį

Tags: , , ,

5 Responses to “AVR Dažnomatis”

  1. Armandas says:

    Teko daryt panašų prietaisą, bet be mikrokontrolerio – 555 taimeris, decade counteriai ir bcd-to-7seg čipai 😀

  2. admin says:

    Irgi įdomu 🙂 555 turbūt kaip bazinis laikas.. o counteris per tą laiką skaičiuoja 🙂 beto reikės panaudoti BCD to 7seg čipą nes negaliu kvarco pjungt:) netiksliai veikia..

  3. TomasON says:

    Jei noresi matuoti Impulso ploti ir perioda naudok ICP. Labai patogu. Is CNT imeta i registra ( aparaturiskai ) verte, toliau ICP interupte pakeiti fronta ir matuoji toliau. Tik reikia ziuteri, kad interupte nebutu perdaug apkrautas procas.

  4. admin says:

    Ačiū, reikės pamėginti kada 🙂

  5. Donatas says:

    kad užtenka tų kojų ir dar kvarcui lieka (7+4 + signalas=12). padariau tacho ant t2313.

Leave a Reply

You can add images to your comment by clicking here.

Spam Protection by WP-SpamFree