Sari la conținut
ELFORUM - Forumul electronistilor

masurare 2 sau mai multe turatii cu Atmega8


DarkAngel_Bv

Postări Recomandate

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
  • Răspunsuri 8
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • DarkAngel_Bv

    5

  • one

    2

  • nr4

    2

Top autori în acest subiect

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

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

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

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

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

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

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

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 cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări