Starke Abweichungen bei Timer0-IRQ

Gast #285067
Lesenswert?

Hallo!

Als Anfänger bzw. Umsteiger von PICs bin ich gerade dabei, die
"fabelhafte Welt der AVRs" kennenzulernen ;)

Jetzt wollte ich einen Art Miniuhr basteln, die einfach bei jeder
Sekunde um 1 hochzählt.

Der verwendete AVR ist ein ATmega8, der externe Oszillator ist ein 4MHz
Quarzoszi.

in main() setze ich
RCCR0 auf 5 (Prescaler auf 1024)
und
TIMSK auf 1 (Timer aktiv)

in
SIGNAL (SIG_OVERFLOW0)
lasse ich eine Variable, die mit volatile deklariert wurde hochzählen.
Wenn sie 16 erreicht, wirds sie anschließend wieder auf 0 gesetzt und
gleichzeitig eine zweite Variable hochgezählt.
Am Ende des IRQs wird zusätzlich TCNT0 auf 11 gesetzt.

Somit sollte jede Sekunde (mit -0,06% Abweichung) hochgezählt werden.
Leider weicht das Ganze leider auf 16 Sekunden -1s ab.

Wisst ihr Rat?

Chris

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