Hallo, Ich hab mich gestern ein bisschen mit ICP und Frequenz Berechnung beschäftigt und hab irgendwie noch verständniss Probleme, glaub ich zumindest. Aber erst mal rein symbolisch mein Denkansatz. F_CPU = 8MHZ Prescaler = 128 ISR(ICP){ TCNT = 0 Timerwert = ICR1 } Jede Sek{ fHZ = 62500/Timerwert // 8.000.000/128 = 62500 fHZ aufs Display } Hier bei geht die erste Messung in die Hose. Da der Timer ja seit SEI() durchläuft und nicht seit der ersten Flanke. Ab der zweiten Messung sollte ja dann eigentlich alles glatt laufen, da ich bei der Flanke1 den Timer auf 0 setze und bei Flanke2 den Wert einlese? Wenn ich jetzt jede Sek oder Min oder ... hingeh und den gerade aktuellen Wert , so wie oben berechne hab ich dann meine Hertz? Ja oder Nein? Und der erfassbare bereich liegt dann zwischen 62500/1=62500Hz und 62500/65535~= 1Hz ? Nur mit welcher Genauigkeit/Schrittzahl? Ich hoffe ihr könnt mir helfen Licht ins Dunkle zubringen.
Du kannst den Timer konstant durchlaufen lassen. Beim ICP-Interrupt wird dann der akutelle Timerwert ins ICP-Register geschrieben. Diesen sollte man dann in einer Variablen zwischenspeichern. Beim nächsten ICP-Interrupt zieht man dann den ersten Wert vom zweit ab und bekommt so die Periodendauer des Signals. Dann sichert man noch den 2.ICP-Wert in der o.g. Variable und kann der Spaß kann von vorne losgehen. Solange man den kompletten Timerbereich (16bit) benutzt, ist die Subtraktion der beiden Werte problemlos möglich und auch richtig (Rechnen mit Binärzahlen mit fester Breite...). Wie man aus der Periodendauer die Frequenz berechnet, weißt du ja schon.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.