Forum: Mikrocontroller und Digitale Elektronik Unterschied 8/16Bit-Timer bei ATmega64A


von Maddin (Gast)


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

von spess53 (Gast)


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

von Maddin (Gast)


Lesenswert?

Sorry, habs vor 5min, nun auch rausgefunden, dass man CTC nehmen muss. 
Bin vom MSP430 gewohnt, dass der "Continious"Mode erst explizit 
eingeschaltet werden muss. Das ist hier nicht so.

Danke

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.