Forum: Mikrocontroller und Digitale Elektronik Timerungenauigkeit Problem PIC Controller


von Hans K. (Gast)


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

von Peter D. (peda)


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

von Sven S. (stepp64) Benutzerseite


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

von Peter D. (peda)


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

von Master S. (snowman)


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...

von Sven S. (stepp64) Benutzerseite


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

von Master S. (snowman)


Lesenswert?

wie kommst du auf PR2 = 124 ?

von Dirk W. (Gast)


Lesenswert?

> (8MHz:4:16:10:125=100Hz)

125 Takte = 100Hz, 125 Takte = 0-124 => PR=124

von Gast (Gast)


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ß

von Peter D. (peda)


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

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.