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
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.
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.
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.
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
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 =)
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.