Har lite problem, skall mäta frekvenser med en ATmega 644 och tänkte mig använda input capture. Problemet är att jag behöver kunna mäta i intervallet 0-9999Hz med+-1Hzs noggrannhet. Är det ens möjligt?
Enligt datablad är det "jätteenkelt" att använda ICR för att beräkna frekvensen på inkommande pulser, men hittar inte hur man skall skriva koden för det. Är det bäst att beräkna tiden pulsen är 1 och på så sätt ta reda på periodtiden (har 50% duty cycle) eller finns det något smartare sätt?
Tacksam för svar...
//Erika
Frekvensbestämning med input capture? (AVR)
-
- Inlägg: 75
- Blev medlem: 4 december 2003, 19:14:27
- Ort: Byn
Det bör väl gå att göra så här:
1 ställ in timern som är kopplad till din capture enhet till någon lämplig frekvens. Prescaler settings osv.
2 Ställ in capture på positiv eller neg. flank.
3 Aktivera interruptet och gör koden för detta.
I interruptsnutten sparar du undan ICR värdet:
Och 1/time = frekvensen. Det finns effektivare lösningar för det där...
ISR talet bestäms av dina valda klockinställningar så vill du ha hög upplösning så får man ta mindre klockdelning. Du kan ju räkna baklänges utifrån det här och se om upplösningen blir tillräcklig för dina krav.
1 ställ in timern som är kopplad till din capture enhet till någon lämplig frekvens. Prescaler settings osv.
2 Ställ in capture på positiv eller neg. flank.
3 Aktivera interruptet och gör koden för detta.
I interruptsnutten sparar du undan ICR värdet:
Kod: Markera allt
time = oldVal - ISR
oldVal = ISR
ISR talet bestäms av dina valda klockinställningar så vill du ha hög upplösning så får man ta mindre klockdelning. Du kan ju räkna baklänges utifrån det här och se om upplösningen blir tillräcklig för dina krav.