Timer0 wird durch Timer1 "deaktiviert"

OP #3830938
Lesenswert?
• ▲
▼
Ich habe mit dem Atmega8, 8MHz ein Timer0/1 Problemchen. So ganz 
nachvollziehen kann ich es nicht, ich beschreibe mal was ich machen will 
und was die Symptome sind.
Ziel/Soll: Timer0 erzeugt einen Overflow, bei dem zwei Variablen jeweils 
um 1 erhöht werden (an sich nix besonderes). Timer1 ist als Input 
Capture Interrupt (ICP) konfiguriert und misst die Periodenlänge eines 
an PB0 anliegenden rechtecksignals (signalqualität ist echt gut).
Ergebniss/Ist: Nach der Initialisierung von Timer1 "hängt" das System 
ca. 10 sek bis dann der nächste Befehl abgearbeitet wird. Timer0 erzeugt 
keinen Overflow in dieser Zeit. TCNT0 per Display angezeigt ändert seine 
Werte aber nicht kontinuierlich nach oben, eher springen hoch runter. 
ICR1 zeigt einen relativ konstanten Wert die ganze Zeit an (~10-30). 
Ändert man das Signal, geht auch die Anzeige hoch und mit mal wird der 
Interrupt von Timer0 ausgeführt und alles funktioniert wie es soll. Geht 
die Frequenz wieder runter hängt der Timer0 plötzlich wieder. Warum ist 
das so?

void initTimer0 (void){
   TCCR0 |= (1<<CS00);
   TIMSK |= (1<<TOIE0);
}

void initTimer1 (void){
   TCCR1B |= (1 << CS10) | (1 << ICNC1);
   TIMSK |= (1<<TICIE1); // Input Capture Interrupt on ICP1 Pin event
}

ISR (TIMER0_OVF_vect) {
   Displayupdate++;
   DOGM_update++;
}


ISR (TIMER1_CAPT_vect) {
   TCNT1 = TCNT1 - ICR1;
   compare_register = ICR1;
}
Gast #3830962
Lesenswert?
• ▲
▼
>Ich würde mal sagen du müllst deinen Prozessor mit interrupts zu

Ja. Timer1 hat höhere Prio als Timer0.
Wenn der Interrupt für Timer1 feuert hat Timer0 keine Chance.

Konzept überdenken und neu machen.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.