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?
Gast
#4866801
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.
Gast
#4866819
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.
Vielen Dank. Eure Antworten haben mir sehr geholfen!
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.