Atmega328p Timer2 will nicht

Gast #4003172
Lesenswert?

N Abend,

Folgendes:
Der Timer2 will nicht laufen. Timer0 macht's dagegen ohne Probleme.
Zum Test toggle ich einen Ausgang. Weis jemand warum?
1
void StartTimer0(void){
2
  TIMSK0 |= ((1<<TOIE0));
3
  TIMSK0 |= ((1<<OCIE0A));
4
  TCCR0B |= ((1<<CS00)|(1<<CS02));
5
}
6
void StartTimer2(void){
7
  TIMSK2 |= ((1<<TOIE2));
8
  TIMSK2 |= ((1<<OCIE2A));
9
  TCCR2B |= ((1<<CS20)|(1<<CS22));
10
}
11
int main(void){
12
   TCNT0=0;
13
   OCR0A=124;
14
   StartTimer0();
15
  TCNT2=0;
16
  OCR2A=124;
17
  StartTimer2();
18
while(1){
19
}
20
ISR(TIMER0_OVF_vect){
21
//  PORTB ^= ((1<<DDB5));
22
}
23
ISR(TIMER2_OVF_vect){
24
  PORTB ^= ((1<<DDB5));
25
}
Gast #4003405
Lesenswert?

sei(); ist gesetz, sonst würde auch der Timer0 Overflow nicht 
funktionieren. Ich wollte hier nur wirklich relevantes zeigen.
Die Klammern bei while sind richtig.

Ich habe inzwischen mal Timer1 getestet - exakt wie Timer0 
initialisiert. Auch dieser funktioniert. Nur Timer2 will nicht. Die LED 
geht an und das war's.
Bei den anderen beiden Timern kann man deutlich das flackern erkennen. 
Das will mir nicht in den Kopf...
Gast #4003408
Lesenswert?

mike schrieb:
> sei(); ist gesetz, sonst würde auch der Timer0 Overflow nicht
> funktionieren. Ich wollte hier nur wirklich relevantes zeigen.
> Die Klammern bei while sind richtig.
>
> Ich habe inzwischen mal Timer1 getestet - exakt wie Timer0
> initialisiert. Auch dieser funktioniert. Nur Timer2 will nicht. Die LED
> geht an und das war's.
> Bei den anderen beiden Timern kann man deutlich das flackern erkennen.
> Das will mir nicht in den Kopf...

Aber ja, es fehlt eine Klammer von main().
Gast #4003452
Lesenswert?

Fehler gefunden!

Alle 3 Timer sind eigentlich gleich aufgebaut
Alle Registernamen sind quasi identisch - bis auf die Zahl im Namen.
Allerdings unterscheiden sich die prescaler.
Timer2 kennt keine externe clock source hat dafür 2 Teiler mehr als 
Timer0 und Timer1. Und hier lag der Hase im Pfeffer.

Solche Sachen überliest man gerne auch 100mal.

Aber jetzt gehts...

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