www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timerungenauigkeit Problem PIC Controller


Autor: Hans K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sven Stefan (stepp64) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Master Snowman (snowman)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Sven Stefan (stepp64) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Master Snowman (snowman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie kommst du auf PR2 = 124 ?

Autor: Dirk W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> (8MHz:4:16:10:125=100Hz)

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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.