ATTiny24 Timer1 CTC Unterschied OCR1A und ICR1

#2361555
Lesenswert?

OCR1A kann als Compare Match Register ganz normal verwendet werden, wenn 
ICR1 den TOP Wert vorgibt.
ICR1 kann als Input Capture Register ganz normal verwendet werden, wenn 
OCR1A den TOP Wert vorgibt.

In Kurzform: Die eigentliche Aufgabe weder von OCR1A noch von ICR1 ist 
es diese TOP-Steuerung zu übernehmen. Wahrscheinlich wollte man aber bei 
Atmel nicht noch ein Register einfügen, hatte aber noch Modus-Bits frei 
und hat sich daher entschlossen, die bereits vorhandenen Register zu 
zweckentfremden. Und damit man keine oder kaum Funktionalität verliert, 
hat man einfach 2 Möglichkeiten angeboten, so dass man nach Möglichkeit 
immer eine benutzen kann ohne behindert zu werden.
Gast #2361582
Lesenswert?

Cheffe schrieb:
> wozu gibt es überhaupt die Wahlmöglichkeit?

Das als Topwert verwendete OCR1A-Register steht nicht mehr als 
Compare-Kanal zur Verfügung, es ist dann nur ein Kanal über OCR1B 
möglich.

Wird ICR1 als Topwert benutzt, stehen dagegen 2 Kanäle zur Verfügung. 
Das kann vorteilhaft sein, wenn ICR1 sowieso nicht benötigt wird.
Gast #2361594
Lesenswert?

Moin, danke Euch beiden. Der Groschen ist gefallen ;-)

Nun noch eine Frage. Für einen Interrupt muss ich dann im TIMSK-Register 
ICIE1 auf 1 setzen. Angenommen ein Interrupt wird dann ausgelöst, wo 
lande ich dann?

0x0001 INT0 External Interrupt Request 0
0x0006 TIM1_COMPA Timer/Counter1 Compare Match A


Gruß
Holger
Gast #2361619
Lesenswert?

Cheffe schrieb:
> Für einen Interrupt muss ich dann im TIMSK-Register
> ICIE1 auf 1 setzen.

Das würde man nur machen wenn man die Input Capture Einheit verwendet, 
hat aber nix mit der Verwendung des ICR1 als Topwert zu tun.

Damit beantwortet sich:

> 0x0001 INT0 External Interrupt Request 0
> 0x0006 TIM1_COMPA Timer/Counter1 Compare Match A

mit weder noch.

Man müsste OCIE1A..B setzen und landet dann im entsprechenden Vektor, 
gibt für jeden Kanal einen eigenen, steht im DB unter "Interrupts".
Gast #2361625
Lesenswert?

Cheffe schrieb:
> Für einen Interrupt muss ich dann im TIMSK-Register
> ICIE1 auf 1 setzen. Angenommen ein Interrupt wird dann ausgelöst, wo
> lande ich dann?

ICIE = Input Capture Interrupt Enable
Der dazugehörige Interruptvektor heisst wenig überraschend TIM1_CAPT

Oliver

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren