Hallo zusammen, im Tutorial https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR habe ich folgendes gelesen: "Wenn am Input Capture Pin ICP die gemäß Einstellungen im TCCR1B definierte Flanke erkannt wird, so wird der aktuelle Inhalt des Datenregisters TCNT1H/TCNT1L sofort in dieses Register (ICR1H und ICR1L) kopiert und das Input Capture Flag ICF1 im Timer Interrupt Flag Register TIFR gesetzt." Warum gibt es neben TCNT1H und TCNT1L noch die beiden Register ICR1H und ICR1L? Im falle eines Interrupts kann ja auch TCNT1H und TCNT1L ausgelesen werden. Geht das auslesen von ICR1H / ICR1L hardwarebedingt schneller?
Das Register TCNT1 zählt auch beim Aufruf des Interrupts weiter. ICR1 enthält den Wert, der zum Auslösen des Interrupts/Setzen des ICF1 geführt hat.
Die Betonung liegt auf "sofort": bis die Interruptroutine erreicht ist, vergehen im besten Fall einige Takte, es können aber auch viele sein, wenn z.B. in einem Programmteil Interrupts global gesperrt wurden.
Hans M. schrieb: > Im falle eines Interrupts kann ja auch TCNT1H und TCNT1L > ausgelesen werden. Code ausführen kostet Zeit, d.h. ehe man im Interrupthandler landet, kann der Timer schonmal >100 Zyklen weiter gezählt haben, insbesondere wenn andere Interrupts gerade in Bearbeitung sind. Es ist also ne Frage, ob Du Zeiten exakt messen willst oder Dir ne ungefähre Hausnummer ausreicht.
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.