Forum: Mikrocontroller und Digitale Elektronik Timer läuft falsch?


von Sonic Hedgehog (Gast)


Lesenswert?

Hallo Forum.

Ich möchte gerne einen Atmega16 als Uhr betreiben. Dazu benötige ich 
natürlich einen exakten 0.5 Sekundentimer also rechnete ich so:

0.5 = 15625 * 256/8000000

Getaktet ist der Chip mit 8 MHZ

Nur mein Problem ist, dass nach knapp 24 Stunden die Uhr bis zu 7 
Minuten hinterherhinkt.

Wo könnte das Problem liegen?
Habe ich falsch gerechnet?
Falsche formel?
ect.

von Martin K. (maart)


Lesenswert?

Sonic Hedgehog schrieb:
> Wo könnte das Problem liegen?

Womit taktest du denn?
Zeig mal die ISR und die Timer-Konfiguration.

von guess (Gast)


Lesenswert?

exerner Quarz oder interner Oszillator?

Code?

von Uwe2 (Gast)


Lesenswert?

Quarz oder Interner RC-Oszillator ?

von c.m. (Gast)


Lesenswert?


von Sonic Hedgehog (Gast)


Lesenswert?

Interner Takt 8 MHZ 6CK 64MS

Und die Konfiguration:
1
ISR(TIMER1_COMPA_vect);
2
3
4
//main
5
6
7
TCCR1B = (1<<CS12|1<<WGM12);
8
OCR1A = 15625;
9
TIMSK = 1<<OCIE1A
10
sei();

von mr. mo (Gast)


Lesenswert?

Sonic Hedgehog schrieb:
> Interner Takt 8 MHZ

Ein externer Quarz ist wesentlich besser geeignet.

von Treter_Peter (Gast)


Lesenswert?

Sonic Hedgehog schrieb:
> Getaktet ist der Chip mit 8 MHZ

Also wenn du eine Uhr aufbauen willst, brauchst du auf jeden fall einen 
externen Quarz Osc.. Dann ist die Frage, wie verwendest du den Takt 
weiter?

Zählst du über die Software Stunden Minuten etc.. Dann bedenke das Für 
die Abarbeitung des Programms eine gewisse Zeit gebraucht wird. 
(Zykluszeit) Diese muss natürlich mit berücksichtigt werden, wenn du so 
"weit" Zählen willst!

von Martin K. (maart)


Lesenswert?

Sonic Hedgehog schrieb:
> Interner Takt 8 MHZ 6CK 64MS

Na dann weißt du ja jetzt, wie "genau" der interne RC-Oszillator ist.

von Treter_Peter (Gast)


Lesenswert?

Ach ja,
Rundungsfehler kommen dann auch noch dazu. Deshalb solltest du ruhig in 
100ms schritten, oder sogar 10ms Schritten zählen. Damit erreicht man 
auch eine Höhere Genauigkeit.

von Sonic Hedgehog (Gast)


Lesenswert?

Ok dann würde ich mich gerne mal auf einen Quarz 6MHZ einlassen. Wie 
würde da die Konfiguration aussehen?

von c.m. (Gast)


Lesenswert?


von Martin K. (maart)


Lesenswert?

Sonic Hedgehog schrieb:
> Ok dann würde ich mich gerne mal auf einen Quarz 6MHZ einlassen. Wie
> würde da die Konfiguration aussehen?

Keine Ahnung, musst du mit deiner obigen Formel ausrechnen.
Die Kunst dabei ist "nur", einen ganzzahligen Wert zu finden, den du 
dann in OCR1A lädst.

von Martin K. (maart)


Lesenswert?

Treter_Peter schrieb:
> Ach ja,
> Rundungsfehler kommen dann auch noch dazu. Deshalb solltest du ruhig in
> 100ms schritten, oder sogar 10ms Schritten zählen. Damit erreicht man
> auch eine Höhere Genauigkeit.

Und lass' dir vom Peter keinen Bären aufbinden.

von Sonic Hedgehog (Gast)


Lesenswert?

Andere Frage: Kann man auch mehr als nur gerade 2 Timer erstellen?

von amateur (Gast)


Lesenswert?

Eine andere Möglichkeit wäre festzustellen, ob diese 7 Minuten konstant 
sind. Siehe hierzu auch: "Die genaue Sekunde".
0,5% ohne weitere Maßnahmen erscheinen mir relativ genau.

von Martin K. (maart)


Lesenswert?

Sonic Hedgehog schrieb:
> Andere Frage: Kann man auch mehr als nur gerade 2 Timer erstellen?

Was meinst du? Du kannst natürlich nur so viele Timer nutzen, wie im 
Controller integriert sind.

von Martin K. (maart)


Lesenswert?

amateur schrieb:
> Eine andere Möglichkeit wäre festzustellen, ob diese 7 Minuten konstant
> sind. Siehe hierzu auch: "Die genaue Sekunde".

Dieser Ansatz macht Sinn, wenn schon eine recht stabile Taktquelle 
benutzt wird. Es nützt jetzt aber wenig, den internen RC-Oszillator 
jetzt zu kalibirieren und beim nächsten warmen Tag rennt er wieder 
davon.

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.