Forum: Compiler & IDEs Starke Abweichungen bei Timer0-IRQ


von Chris (Gast)


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

von Hubert.G (Gast)


Lesenswert?

Probiere einmal statt bis 16 nur bis 15 zählen zu lassen, dann sollte es
ungefähr passen, ob das nur 0,06% sind wage ich zu bezweifeln.

von Laplace (Gast)


Lesenswert?

Poste mal das ganze Programm.

von Chris (Gast)


Angehängte Dateien:

Lesenswert?

Hallo!

Die Lösung von Hubert funktioniert ;)

Der Fehler sitzt halt meistens doch davor...

Anbei ist der Ausschnit vom Code.
Nicht schön, funktioniert aber.

Viele Grüße

Chris

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.