Forum: Mikrocontroller und Digitale Elektronik Notwendigkeit von ICR1H und ICR1L


von Hans M. (lukem)


Lesenswert?

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?

von MikeH (Gast)


Lesenswert?

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.

von S. Landolt (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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.

von Hans M. (lukem)


Lesenswert?

Vielen Dank. Eure Antworten haben mir sehr geholfen!

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
Noch kein Account? Hier anmelden.