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.
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..
Aišku čia nėra labai tikslus nes nenaudojau išorinių kvarcų, bet kaip iki 9999Hz dažniui pamatuoti kaip ir užtektu
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: AVR, Dažnis, Dažnomatis, Frequency



Teko daryt panašų prietaisą, bet be mikrokontrolerio – 555 taimeris, decade counteriai ir bcd-to-7seg čipai
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..
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.
Ačiū, reikės pamėginti kada
kad užtenka tų kojų ir dar kvarcui lieka (7+4 + signalas=12). padariau tacho ant t2313.