Timerungenauigkeit Problem PIC Controller

Gast #1023555
Lesenswert?

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
#1023572
Lesenswert?

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
Persönliche Seite #1025218
Lesenswert?

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
#1025308
Lesenswert?

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
#1025315
Lesenswert?

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...
Persönliche Seite #1025429
Lesenswert?

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
Gast #1025618
Lesenswert?

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ß
#1025737
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren