Hi, ich bin neu hier und versuche mal mein Glück da ich nicht weiterkomme ich habe folgendes Problem. Ich soll eine Uhr mit einem PIC16F716 programmieren der dann 7 Segmentanzeigen ansteuert und die Uhrzeit anzeigt. Jetzt hat mein Betreuer gemeint er hört oder las dass es bei den PIC Controllern ein Genauigkeitsproblem beim Timer bzw Timeroverflows gibt, sodass ich des Timerinterrupt bei normaler verwendung nicht als Zeitreferenz nehmen kann wenn ich eine "wiklich" exakte Uhr programmieren will. Hat schonmal hier jemand etwas von solchen Problemen gehört und wenn ja gibt es da eine software bzw hardware gegenmaßnahme ? Vielen Dank im Vorraus !!! Gruss Hans
Das ist Quatsch, genau dazu sind ja Timer da, daß man zyklusgenau die Zeit zählen kann. Manche MCs haben nur einfache Timer mit Overflowinterrupt. Dann muß man das Rücksetzen per Addition machen, damit die (unbekannte) Interruptlatenz den Timer nicht verfälscht. Meistens haben Timer aber einen "Autoreload-Mode" oder ein "Clear on Compare". Damit sind dann auch ohne Rechnen die Timerinterrupts genau. Peter
Ganz so trivial ist es nicht. Wenn man die Timerregister neu lädt wird auch gleichzeitig das Zählregister des Vorteilers gelöscht. Darauf hat man keinen Einfluss. Im ungünstigsten Fall kann man dadurch einige Takte verlieren und der Timer wird ungenau. Man sollte also versuchen den Quarztakt so zu wählen, dass ein neu Laden des Timerregisters nicht notwendig ist. Oder du benutzt zwei Quarze. Einen der den PIC taktet und einen 32,768kHz Uhrenquarz den du z.Bsp. an RA4 anschließt. Wenn du dann den Vorteiler des Timer0 auf 1:128 stellst, wird der Timer0 exakt jede Sekunde einen Interrupt auslösen. Sven
Sven Stefan wrote: > Ganz so trivial ist es nicht. Wenn man die Timerregister neu lädt wird > auch gleichzeitig das Zählregister des Vorteilers gelöscht. Das ist aber blöd gelöst beim PIC. Dann muß man den Timer ohne Vorteiler nehmen. Sollte aber der 16Bit-Timer sein, damit die Interrupts nicht zuviel CPU-Zeit verbraten. Peter
nimm den Timer2, programmier ihn so, dass er genau z.b. 500x pro sekunde einen interrupt auslösst, zähle in diesem interrupt deine sekunden (uhrzeit) und gleichzeitig steure eine der ziffer der 7-segementanzeige an (bei jedem interrupt eine andere ziffer) und fertig ist's. das ist mehr als nur genau - vorausgesetzt, dein quarz und kondensatoren stimmen...
Der Timer2 ist aus meiner Sicht eh am besten dafür geeignet, da er sich automatisch über das Register PR2 vorladen lässt. Damit muss man sich dann um nichts mehr kümmern, da der Timer2 exakte Interrupts auslöst. Ich benutze das in einer Uhr mit 8MHz Quarz. Der Nachteiler des Timer2 ist auf 10:1 und der Vorteiler auf 16:1 gestellt. PR2 habe ich mit 124 geladen. Das ergibt dann einen Interrupt alle 10ms (8MHz:4:16:10:125=100Hz). Allerdings kann man dann kein PWM mehr einsetzen, da dafür der Timer2 benutzt wird. Sven
> (8MHz:4:16:10:125=100Hz)
125 Takte = 100Hz, 125 Takte = 0-124 => PR=124
Noch ein Tipp! Die Uhr wird nur so exakt sein wie dein Quarz! Standard-Quarze sind für Uhr-Anwendungen zu ungenau. In meinem Projekt Uhr mit AVR @10 MHz und DCF77 ging die Uhr nach 24h ohne DCF77 Abgleich um ca. 10s falsch. Also entweder man nutzt spezielle "Uhr-Quarze" (32.768 kHz) oder kalibriert die Uhr. Letzteres is aber nicht temperaturstabil. Oder man gleicht die Uhr per DCF77 ab. Gruß
Gast wrote: > Also entweder man nutzt spezielle "Uhr-Quarze" (32.768 kHz) oder Ich hab noch nie erlebt, daß ein 32kHz Quarz genau ist. Natürlich muß man einen 32kHz Quarz abgleichen. Deshalb haben ja Quarzuhren einen Trimmer. > kalibriert die Uhr. Letzteres is aber nicht temperaturstabil. Seit wann sind 10MHz-Quarze nicht temperaturstabil? Sie sind sogar stabiler als 32kHz-Quarze. 32kHz-Quarze nimmt man nur wegen dem geringeren Stromverbrauch. Prinzipiell sind höherfrequente Quarze immer auch stabiler. 32kHz Quarze erreichen nur etwa 15s/Monat. Hochwertige Uhren haben daher oft einen 4,19MHz Quarz. Peter
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.