Forum: Mikrocontroller und Digitale Elektronik Timer2 Sekundentakt: Denkfehleranalys erbeten


von Michael R. (Firma: Brainit GmbH) (fisa)


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...)

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Aaaaaaaaaaaaarrrrrghhhhhh!

Das Programm macht was du schreibst, nicht was du willst :-)

kaum schau ich den Code im Forum an, springt mir der Fehler ins Auge...

von Codeanseher (Gast)


Lesenswert?

TCCR2B = _BV(CS22) | _BV(CS21) || _BV(CS20);  // prescaler 1024

Ein senkrechter Strich zuviel :-)

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

ja eh. Wieso gibts da keine Compiler-Warnung für? -ESILLYTYPO oer so...

von Spess53 (Gast)


Lesenswert?

Hi

>ja eh. Wieso gibts da keine Compiler-Warnung für? -ESILLYTYPO oer so...

Weil das auch ein gültiger Operator ist.

MfG Spess

von Karl H. (kbuchegg)


Lesenswert?

Michael Reinelt schrieb:
> ja eh. Wieso gibts da keine Compiler-Warnung für? -ESILLYTYPO oer so...

Das geht erst, wenn dein Compiler den neuen "figure out what I mean" 
Modus unterstützt.

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

> Das geht erst, wenn dein Compiler den neuen "figure out what I mean"
> Modus unterstützt.

Meine Güte, wie ich auf den warte!

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.