Forum: Mikrocontroller und Digitale Elektronik Uhr läuft ungenau


von Paul Baumann (Gast)


Lesenswert?

Hallo!

Ich habe eine Uhr mit dem 2313 gebaut, die mit 4 MHZ betrieben wird.
Das Problem ist, daß die Uhr in einer Woche 20 Sekunden nachgeht.
Nachfolgend ein Stück Code, das den Sekundentakt erzeugt. Ich habe 2
Fragen: Sieht jemand dort einen Fehler? Welchen Timer benutzt der WAIT
Befehl von Bascom, weil ich im Hauptprogramm zum Multiplexen meiner
Anzeige einen Wait 2msv verwende?

On Timer1 Ontimer1               'Interrupt-Routine für
Timer1Overflow
Config Timer1 = Timer , Prescale = 256       'Takt: Quarz/256=15625Hz
Enable Timer1                   'Timer1-Overflow-Interrupt
einschalten
Enable                                     'Interrupts global
zulassen
Timer1 =49911                             'Abstand=65536-49911=15625

Do
'Hauptprogramm
Loop
Ontimer1:                                    'Interrupt-Routine
  Timer1 = 49911                           'Timer 1 voreinstellen
  Ftoggle = Not Ftoggle                    'Toggle-Bit invertieren
  'Portb.7 =                         'Leuchtidiot als Anzeige
                                     'für die Sekunden
Return                               'und zurück vom Interrupt
' **** END OF PROGRAM



MfG Paul

von Hubert (Gast)


Lesenswert?

Ich nehme an du hast nicht den internen Oszillator verwendet?
Wenn du nicht den Timertakt alleine verwendest sondern immer noch was
vom Programm dazukommt, addiert sich das auch noch.

von Benedikt (Gast)


Lesenswert?

Der uC benötigt mindestens 6 Takte um die Interruptroutine zu starten.
Dazu kommen noch weitere Befehle von BASCOM. Dadurch vergeht einiges an
Zeit ehe du das Timer Register nachlädst. Und genau das verursacht, dass
die Uhr nachgeht.

von Stefan May (Gast)


Lesenswert?

Deine Ungenauigkeit entspricht etwa 33ppm. Das liegt im Rahmen der
Quarzgenauigkeit. Wenn Du es genauer haben willst, dann mußt Du
entweder den Quarz mit einem Trimmkondensator etwas ziehen oder aber
die Synchronisierung in Software erledigen. DCF77 ist da hilfreich.

ciao, Stefan.

von peter dannegger (Gast)


Lesenswert?

Da hat Stefan recht.

Übliche µC-Quarze sind zwar hochkonstant, aber nicht sehr genau.
Es ist also ein Abgleich nötig.

Bei Deinen Angaben beträgt die echte Quarzfrequenz 3,999868MHz.

In der Codesammlung ist ein Beispiel, wie man für beliebig krumme
Quarzfrequenzen die genauen Timerwerte automatisch einstellt.


Peter

von Jens123 (Gast)


Lesenswert?

hallo
ich hatte mir in ASM mal eine Uhr aufgebaut mit einem Mega8

Interner RC Oszilator und einen Externen Uhrenquarz als Takt fuer
meinen Timer...


ich hatte die Ihr 2 Tage laufen lassen bei mir auf der Arbeit
gegenueber eine Kirschenglocke + Radio und die schlugen immer zur
gleichenzeit volle Stunden..

ok Meine uhr auf den Glockenschlag gestartet und 2 tage Laufen lassen
siehe da sie ging von meiner Feststellung ger sehr genau (ich selbst
konnte es mit meinem Ohr (Glocke) / Auge (LCD Display) keine
Zeitverzögerung erkennen...

Wie es nun mit einem Monat / Jahr aussieht keine  ahnung war damals nur
zum kennenlernen...

Gruss Jens

PS: Der Uhrenquatz war aus einer alten Quarz Uhr =)

von Mr_Börtsch (Gast)


Lesenswert?

Normalerweise Addiert man die Zeit die man warten will zum aktuellen
Timer Compare Wert. Somit ist es egal wie lange die Abarbeitung eines
Timerinterrupt dauert.

von Paul Baumann (Gast)


Lesenswert?

Hallo Männer!

Ich danke Euch erstmal für die vielen Antworten. Nun will ich erst mal
den Rat von Peter ausprobieren.

@Peter: Wie kommst Du auf die Frequenz, die Du errechnet hast?

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.