Unterschied 8/16Bit-Timer bei ATmega64A

Gast #1983215
Lesenswert?

Hallo,

wenn ich den Timer0 also den 8Bit Timer mit
1
TCCR0 |= BIT0 + BIT1 + BIT2;  //Vorteiler 1024
2
OCR0 = 78;            
3
TIMSK |= BIT1;    //Interrupt aktivieren für TIMER0
initialisiere, dann springt das Programm auch in die TIMER0_COMP_vect 
ISR und wird alle 20ms aufgerufen.

Will ich jedoch den Timer1 mit 16Bit mit
1
  TCCR1B |= BIT0 + BIT2;
2
  OCR1B = 78;
3
  TIMSK |= BIT3;  //OCIE1B:
 einstellen dann wird die TIMER1_COMPB_vect ISR nur einmal aufgerufen 
bzw. viele Sekunden später aufgerufen.

unterscheiden die beiden Timer sich in einem Detail, dass man schnell 
übersehen kann? Clock läuft richtig und Interrupt sind global enabled. 
Wie gesagt mit dem 8Bit läuft es wie es soll. Mit dem 16er aber 
nicht....

Gruß

Maddin
Gast #1983269
Lesenswert?

Hi

Beide Timer machen das gleiche. Nur der 8-Bit-Timer läuft nach dem 
OC-Interrupt bis 255 und fängt dann bei Null wieder an, während der 
16-Bit-Timer bis 65535 zählt, bevor er bei Null wieder anfängt. Wenn bei 
Timer0 der Interrupt nach 20ms kommt sollte es beim Timer1 ca. 5s 
dauern.

Wenn beide Timer nur bis 78 zählen sollen, musst du den CTC-Mode 
einschalten.

MfG Spess

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