Hallo zusammen,
ich möchte auf einem AtMega32 mit 16MHz einen zeitlich genauen Interrupt
per CTC Compare Match in Timer 1 ausführen.
1 | TCCR1A |= (1 << WGM12); // CTC Mode
|
2 | TCCR1B |= (1 << CS10); // Prescaler: 1
|
3 | OCR1A = COUNT;
|
4 | TIMSK = (1 << OCIE1A); // Enable Output Compare Interrupt
|
Ich bekomme nach 10000 Millisekunden aber immer 2451 Interrupts, egal
welchen Wert COUNT hat. Ausserdem wird etwa alle 12 Interrupts das
Overflow Flag TOV1 gesetzt, egal ob die ISR relativ lange ist oder nur
eine Zählvariable inkrementiert.
Hier noch das verwendete ISR Makro:
1 | ISR(TIMER1_COMPA_vect) { ... }
|
Was ist da los? Warum ändert COUNT nichts?
Mit freundlichen Grüßen,
Thomas