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ß
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.