Räkneoperation atmega168

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Malm
Inlägg: 215
Blev medlem: 22 februari 2004, 12:55:06
Ort: Borås

Räkneoperation atmega168

Inlägg 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!
Användarvisningsbild
björn
EF Sponsor
Inlägg: 2570
Blev medlem: 29 mars 2004, 23:09:55

Inlägg av björn »

vad har du för datatyp på frekvens?
Malm
Inlägg: 215
Blev medlem: 22 februari 2004, 12:55:06
Ort: Borås

Inlägg 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 :)
Användarvisningsbild
björn
EF Sponsor
Inlägg: 2570
Blev medlem: 29 mars 2004, 23:09:55

Inlägg 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.
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg 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.
Malm
Inlägg: 215
Blev medlem: 22 februari 2004, 12:55:06
Ort: Borås

Inlägg 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!
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Hög frekvens

Inlägg 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
Malm
Inlägg: 215
Blev medlem: 22 februari 2004, 12:55:06
Ort: Borås

Inlägg av Malm »

Mjo, den varianten har jag också testat. Gick dock över till denna då jag ska mäta varvtal, uppskattningsvis max 250Hz.
Skriv svar