Forum: Mikrocontroller und Digitale Elektronik AVRStudio4 TIMER1 CTC-Modus mit Interrupt


von daniel.schmeing@gmx.de (Gast)


Lesenswert?

Hallo zusammen!

ich verwende den Timer1 beim ATmega8535 im CTC-Modus mit Interrupt bei 
Compare Match um Flanken an PB1 zu zählen. Siehe Code:

Ausschnitt Init:

OCR1A = 10; // Vergleichswert fuer CTC-Modus; Nach 10 wird das 
Z?hlregister TCNT0 wieder auf 0 gesetzt.
TIMSK |= (1 << OCIE1A); // Enable Output Compare Match Interrupts 
Timer1; Interrupt, wenn TCNT0 = OCR0
TCCR1B |= (1 << WGM12); // CTC-Modus einschalten
TCCR1B |= (1 << CS10) | (1 << CS11) | (1 << CS12) ; // Zählen bei 
steigender Flanke an PB0/T0
sei();

Ausschnitt ISR:

ISR(TIMER1_COMPA_vect) //Wird aufgerufen, wenn TCNTO den Wert 0 erreicht 
hat
{
  //...
}

Mein Problem: Im Simulator des AVRStudio4 erfolgt der Interrupt (also 
der Sprung in die ISR) nicht, wenn TCNT1 und OCR1 gleich sind. Sondern 
erst eine Flanke später an T1, wenn TCNT1 wieder auf 0 gesetzt wird. Ist 
das so richtig? Sollte der Interrupt nicht ausgelöst werden,sobald beide 
Register den gleichen Wert haben?

Vielen Dank im Voraus.

Gruß

von Oliver S. (oliverso)


Lesenswert?

Was steht dazu im Datenblatt?

Oliver

von Ingo Less (Gast)


Lesenswert?

Is richtig so, du musst immer einen Takt weniger machen als den du 
suchst.

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.