DarkAngel_Bv Postat Februarie 5, 2012 Partajează Postat Februarie 5, 2012 Dupa cum spune si titlul, trebuie sa masor 2 sau mai multe turatii cu atmega8. Informatia vine sub forma de impulsuri.Pentru o turatie folosesc T0 si numar impulsurile, dar pentru a 2-a turatie sunt in impas, nu stiu sa scriu codul pentru a folosi in acelasi timp T0 si T1, sau nu este posibil?P.S. Folosesc Bascom AVR ca mediu de programare. Link spre comentariu
DarkAngel_Bv Postat Februarie 5, 2012 Autor Partajează Postat Februarie 5, 2012 Pana la urma am creat eu un pseudo-timer in interiorul loop-ului pentru a numara impulsurile pe ambele T-uri din atmega. cam asa arata programelul: $regfile = "m8def.dat" $crystal = 8000000 Config Lcd = 16 * 2Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.5 , Rs = Portb.4Declare Sub Afisare()Dim Rpm As Integer , Tmr As Integer , V As SingleConfig Timer0 = Counter , Edge = FallingConfig Timer1 = Counter , Edge = FallingEnable Timer0Enable Timer1Enable InterruptsLoad Timer0 , 0Load Timer1 , 0Cursor OffClsTmr = 0Do Tmr = Tmr + 1 If Tmr > 977 Then Waitms 1 Tmr = 0 Call Afisare Load Timer0 , 0 Load Timer1 , 0 End If Waitms 1LoopEndAfisare: V = 7172.28 * Timer0 V = V / 1000 Rpm = Timer1 * 60 Locate 1 , 1 Lcd Fusing(V , "##.##") ; " Kmph " Locate 2 , 1 Lcd Rpm ; " 1/min "Return 977 in cazul variabilei Tmr l-am pus deoarece daca puneam 800 (8 Mhz) imi afisa 8192 pe ecran pentru o frecventa etalon de 10000 Hz, deci 977 ~= 10000 / 8192 * 800 Link spre comentariu
nr4 Postat Februarie 5, 2012 Partajează Postat Februarie 5, 2012 Pentru ATmega8:Cu Timer-ul pe 16biti iti creezi o baza de timp exacta.Cu cele doua Timere pe 8 biti contorizezi impulsurile pe durata bazei de timp mai sus create.Raportezi la unitatea de masura finala rezultatele obtinute si afisezi.Desigur va trebui sa lucrezi doar cu intreruperi.Iti recomand sa nu afisezi mai des de 400-500ms daca turatia tinde sa fie constanta. Link spre comentariu
DarkAngel_Bv Postat Februarie 5, 2012 Autor Partajează Postat Februarie 5, 2012 Pai asta e faza, ca nu stiu sa folosesc timerele astea... adica initial foloseam T1 ca timer si T0 ca si counter. Afisa destul de exact. Dar nu mai puteam folosi T1 ca si counter din moment ce era folosit pe post de timer Link spre comentariu
nr4 Postat Februarie 5, 2012 Partajează Postat Februarie 5, 2012 Pai ATmega8 are 3timere/countere: Time0-8bit, Timer1-16bit, Timer2-8bitDar ca sa nu fii obligat sa depinzi de countere deoarece sunt limitate, utilizezi Timer1 ca si baza de timp si cu Timer 0 generezi un interval de timp constant in care verifici cate intrari vrei tu daca sunt "1" sau "0".Desigur, verificarea si luarea deciziei aduce diverse conditionari asupra frecventei maxime masurate datorita codului suplimentar executat la fiecare testare a starii "pinului".Problema de mai sus poate fi simplicata la utilizarea unui singur Timer0 care iti indica atat perioada cand faci o masuratoare, perioada ce ce repeta de X ori=baza de timp. Link spre comentariu
DarkAngel_Bv Postat Februarie 5, 2012 Autor Partajează Postat Februarie 5, 2012 Ce pin este T2? eu stiam ca are doar 2 timere/countere Link spre comentariu
one Postat Februarie 10, 2012 Partajează Postat Februarie 10, 2012 O idee ar fi sa pui niste porti externe si sa selectionezi alternativ cele 2 semnale. Astfel, masori fiecare turatie si apoi afisezi simultan.Cu un multiplexer poti sa masori astfel si 16 turatii doar nici ADC nu masoara simultan. Link spre comentariu
DarkAngel_Bv Postat Februarie 14, 2012 Autor Partajează Postat Februarie 14, 2012 am ceva porti cu 3 pozitii si multe alte chestii, dar vreau sa ramana cat mai simplu. m-am gandit la un oscilator cu ne555 bagat intr-un interrupt si sa numar impulsurile intre interrupts. Link spre comentariu
one Postat Februarie 17, 2012 Partajează Postat Februarie 17, 2012 Ai putea sa numeri direct intreruperile externe (sunt cel putin 2 la ATmega8) intre 2 intreruperi ale unui timer sau sa folosesti 2 timere ca si numaratoare in interrvalul masurat de al-3-lea.Sunt mai multe posibilitati, 555 oricum nu va fi suficient de precis. Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum