Sida 1 av 1

Räkneoperation atmega168

Postat: 3 december 2007, 21:34:21
av Malm
Har ett problem med en atmega168 som ska mäta tiden mellan pulser och baserat på detta sedan presentera en frekvens.

För att få en exakt mätning använder jag mig av en DS32KHZ som genererar en stabil frekvens som räknas på timer1. En interrupt körs vid positiv flank på "räknar-pinnen" (alltså frekvensen som ska mätas) och timer1 kollas då av för att ta reda på förfluten tid mellan två pulser. Det är här problemen börjar.

För att konvertera denna mätning till en frekvens skulle jag vilja utföra följande räkneoperation med det tal (nedan kallat "count") som jag läser från timer1:

frekvens = 1/(count/32768);

Saken är den att mikroprocessorn inte verkar älska denna typ av beräkningar med decimala tal, och jag undrar hur jag enklast gör denna beräkning. Det känns som att lösningen är ganska enkel, men jag kommer helt enkelt inte fram till något vettigt själv.

Tack på förhand!

Postat: 3 december 2007, 21:51:37
av björn
vad har du för datatyp på frekvens?

Postat: 3 december 2007, 21:52:54
av Malm
Jag har gjort ett försök med double, men det blir antingen 0 eller -1. Funderar på om det finns något sätt att lösa detta utan att blanda in flyttal, men det kanske är att hoppas på för mycket :)

Postat: 3 december 2007, 22:39:02
av björn
Visst kan man det, men då får du göra om så att resultatet är större och sedan ta hänsyn till värdet. 1.234 kan lika gärna vara 1234 om man vet om det och hanterar det därefter.
Nu vet jag inte riktigt hur du använder resultatet men detta var en lösning iallafall, annars är nog flyttal en enklare väg om man har möjlighet att använda det.

Postat: 3 december 2007, 23:46:05
av Icecap
Där är det ett typexempel på att man ska kunna jobba lite med talen innan man kör vidare.

1/(Count/32768) ger ju samma resultat som 32768/Count vilket alltså EGENTLIGEN är den uträkning du ska göra.

Behöver du resultatet med en decimal blir det: 327680/Count och svaret i 1/10 självklart.

Postat: 4 december 2007, 18:46:01
av Malm
Ah, att jag inte tänkte så :) Tänker inte i mattebanor när jag sitter med elektronik :)

Tack för hjälpen!

Hög frekvens

Postat: 4 december 2007, 21:24:33
av Swech
Tips.
Beroende på om din frekvens är hög eller låg kan man angripa problemet på två sätt.

Vid hög frekvens: Räkna istället antal pulser som kommer in under 1 sekund. - passar bra vid frekvenser över ca 1kHz

Vid låg frekvens , mät tiden mellan två pulser.


Swech

Postat: 4 december 2007, 22:12:34
av Malm
Mjo, den varianten har jag också testat. Gick dock över till denna då jag ska mäta varvtal, uppskattningsvis max 250Hz.