Ich habe folgendes Problem:
Der Timer 2 meines ATmega8 soll 500x pro Sekunde einen Interrupt
auslösen.
CPU-Frequenz ist 4MHz (kein Teiler). Den Timer habe ich auf CTC Mode und
Prescaler 32 gesetzt. Dann ergibt sich 4000000/32/500-1 = 249 (0xF9):
1 | TCCR2 = (1 << WGM21) | (0 << WGM20) | (0 << CS22) | (1 << CS21) | (1 << CS20);
|
2 | OCR2 = 0xFF;
|
Ich habe die Testroutine auf eine LED heruntergebrochen, die im
Sekundentakt blinken soll (toggle alle 250 Interrupts). Dazu frage ich
das TOV2 Flag ab.
Setze ich OCR = 0xFF; funktioniert das auch (Zeit halt nicht perfekt,
aber nah genug an 1s um das behaupten zu können), sobald ich es mit 0xF9
(oder irgendeinem anderen Wert) versuche, scheint der Timer zu stehen,
zumindest tut sich nichts mehr.
Exakt selbes Verhalten, wenn ich mit 1MHz/8 oder 8MHz/64 arbeite.
Wo könnte mein Fehler liegen?