Atmega328p Timer2 will nicht

Gast #4003172
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 #4003207
So wie die Klammern ab main() stehen würden die beiden
ISRs jetzt innerhalb von main() definiert sein (und
am Ende würde eine Klammer fehlen).

Ich hab es nicht ausprobiert ob das geht .....
Gast #4003405
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
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
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

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.