Timer2 Sekundentakt: Denkfehleranalys erbeten

OP (Firma: Brainit GmbH) #2913379
Lesenswert?

Hallo zusammen,

ich möchte auf einem ATmega328p mit Timer2 einen Sekundentakt erzeugen.

Meine Überlegung dazu:

Taktfrequenz 16 MHz
Prescaler 1024 => 15625 Hz
Per Output Compare  bis 125 zählen lassen => 125 Hz
mit eigenem Zähler nach 125 Interrupts => 1 Hz

wenn bis hierher schon ein Denkfehler drinnen ist, geh ich mich schämen, 
und ihr brauchts den Code gar nicht mehr ansehen.

Wenn nicht: bitte um weitere Denkfehler-Analyse:

Setup des Timers:
1
TCCR2A = _BV(WGM21);  // Mode 2: CTC
2
TCCR2B = _BV(CS22) | _BV(CS21) || _BV(CS20);  // prescaler 1024
3
OCR2A = 125;    // Output Compare A
4
TIMSK2 = _BV(OCIE2A);  // Enable Output Compare A

die ISR:
1
static volatile uint16_t tack;
2
// Timer 2 output compare handler
3
ISR(TIMER2_COMPA_vect)
4
{
5
    if (++tack > 125) {
6
  tack = 0;
7
  PORTC ^= _BV(3);  // blink
8
    }
9
}

Damit blinkt die LED nciht mehr sichtbar, also viel zu schnell. Wenn ich 
den vergleich ändere in
1
    if (++tack > 12500)
Dann seh ich sie blinken, immer noch zu schnell (schwer zu sagen um 
wieviel zu schnell)

Wo ist mein Denkfehler?



Danke, Michi (der heute schon seit 3 uhr früh arbeitet, daran wirds wohl 
liegen...)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren