Frekvensbestämning med input capture? (AVR)

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Ardeath
Inlägg: 8
Blev medlem: 18 oktober 2006, 22:08:01
Ort: Norrköping

Frekvensbestämning med input capture? (AVR)

Inlägg av Ardeath »

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
Spinky Spendrup
Inlägg: 75
Blev medlem: 4 december 2003, 19:14:27
Ort: Byn

Inlägg av Spinky Spendrup »

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:

Kod: Markera allt

time = oldVal - ISR
oldVal = ISR
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.
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

Här är ett liknande projekt.
Ardeath
Inlägg: 8
Blev medlem: 18 oktober 2006, 22:08:01
Ort: Norrköping

Inlägg av Ardeath »

Jo, det verkar stämma med vad jag hade tänt mig,

men för att få en upplösning på 1Hz bör timern gå i 100MHz om jag skall kunna mäta 10KHz eller tänker jag fel? Kan bli svårt att hitta en prescaler som passar till det =)
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

"Four ranges, with 10 Hz and 1Hz resolution to at least 40 MHz."
Det tolkar jag som 1Hz även vid 40MHz. Det framgår dock inte solklart på sidan så vitt jag kan se.
Skriv svar