Forum: Mikrocontroller und Digitale Elektronik Genauigkeit einer Uhr per TimerCounter


von Uwe H. (uhomm)


Lesenswert?

Liebe Leute,

ich habe mir eine Uhr gebaut, die die Uhrzeit (Stunden und Minuten) im 
Binärsystem mit LEDs anzeigt und für die Sekunden eine LED mit der 
Frequenz 1Hz blinken lässt.
Das ganze mit einem Arduino Klon mit dem ATmega 2560 mit 16MHz und 
programmiert in Assembler.

Für die Darstellung der Uhrzeit habe ich den 16-Bit TC1 programmiert und 
zwar so, dass er alle 500ms einen Compare Match A Interrupt auslöst. 
Hierzu lade ich das OCR1A mit dem Wert 31249 nach der im Datasheet 
angegebenen Gleichung für den CTC-Modus

f_OC1A = f_CPU/(2*N*(1+OCR1A)) Mein Prescaler hat den Wert 256.

In der ISR werden dann die gespeicherten Werte für halbe Sekunden, 
Sekunden, Minuten und Stunden upgedatet und es werden die aktuellen 
Werte für Minuten und Stunden auf den betreffenden Portbits ausgegeben.

Mittels zweier Taster kann ich die Stunden und Minuten einstellen und 
setze dabei auch immer die gespeicherten Werte für die halben Sekunden 
und Sekunden auf Null, damit ich möglichst sekundengenau einstellen 
kann.
Die Einstellung wird per Abfrage in der ISR gemacht.

Prinzipiell funktioniert die ganze Chose, ABER die Uhrzeit läuft nicht 
100%ig korrekt...läuft die Uhr einige Stunden, gibt es langsam 
Abweichungen im unteren Sekundenbereich....die Uhr scheint etwas 
schneller zu laufen.

Gibt es Erfahrungswerte hinsichtlich der Genauigkeit und Stabilität der 
CPU Taktfrequenz bei solchen Aruino-Boards bzw. Klons?

Liebe Grüße
Uwe Homm

: Bearbeitet durch User
von STK500-Besitzer (Gast)


Lesenswert?

Uwe H. schrieb:
> Prinzipiell funktioniert die ganze Chose, ABER die Uhrzeit läuft nicht
> 100%ig korrekt...läuft die Uhr einige Stunden, gibt es langsam
> Abweichungen im unteren Sekundenbereich....die Uhr scheint etwas
> schneller zu laufen.
 500ms

Dein Quarz hat demnach nicht ganz genau 16MHz, oder deine ISR braucht 
länger als 500ms für die Bearbeitung.

von m.n. (Gast)


Lesenswert?

Uwe H. schrieb:
> Gibt es Erfahrungswerte hinsichtlich der Genauigkeit und Stabilität der
> CPU Taktfrequenz bei solchen Aruino-Boards bzw. Klons?

In der Regel werden die µCs mit einem keram. Resonator getaktet, deren 
Genauigkeit garkeine ist. 500 ppm sind für genaues Timing 
grottenschlecht.

Besser ist es, den 16 MHz Quarz vom ATmega16U2 zu verwenden. Eine knappe 
Beschreibung nebst Foto für einen UNO R3 findet sich hier: 
http://www.mino-elektronik.de/fmeter/fm_software.htm#bsp7 im 2. 
Abschnitt.

von Stefan F. (Gast)


Lesenswert?

Man kann die Frequenz von Quarzen ein bisschen "ziehen", indem man einen 
der beiden Last-Kondensatoren verändert. Allerdings bleibt dann noch die 
Temperaturabhängigkeit.

Wenn du auf weniger Abweichung als 5 Minuten pro Monat kommen willst, 
solltest du besser einen Uhrenquarz an den µC anschließen (falls er das 
kann) oder eine externe RTC verwenden.

Die RTC Module aus China für unter 5€ sind oft auch sehr ungenau.

von georg (Gast)


Lesenswert?

Uwe H. schrieb:
> die Uhr scheint etwas
> schneller zu laufen.

Für eine Uhr, die den Namen verdient, muss die zugrundeliegende Frequenz 
auf mindestens 6 Stellen genau sein. Das ist bei Prozessor-Quarzen ohne 
zusätzlichen Abgleich selten und eher zufällig der Fall.

Ob von Time-IRQ zu Time-IRQ genau die richtige Anzahl Zyklen ausgeführt 
wird musst du schon selber in deiner Software überprüfen.

Georg

von Uwe H. (uhomm)


Lesenswert?

Hallo,

die ISR dauert keine 500ms :-)
Meine Vermutung ist ja gerade, dass der Quarz nicht ganz genau ist...

Danke!
Gruß
Uwe Homm

von Uwe H. (uhomm)


Lesenswert?

Hallo,

okay...das stützt auch meine Vermutung, dass der Quarz nicht 100%ig 
genau die 16 MHz produziert...einen Umbau habe ich nicht vor :-)

Danke!

Gruß
Uwe Homm

von Uwe H. (uhomm)


Lesenswert?

Danke für die Infos!

Gruß
Uwe Homm

von Uwe H. (uhomm)


Lesenswert?

Okay...nochmal eine Stütze für meine Vermutung!

Danke!

Gruß
Uwe Homm

von Georg M. (g_m)


Lesenswert?

Die Korrekturmöglichkeit ist vorhanden:

Uwe H. schrieb:
> OCR1A mit dem Wert 31249

von Mike (Gast)


Lesenswert?

Man kann die Frequenz von Quarzen ein bisschen "ziehen", indem man einen
der beiden Last-Kondensatoren verändert.
In modernen Quarzuhren wird i.a. kein manueller Abgleich mehr 
durchgeführt, da der Arbeits- und Zeitaufwand dafür zu hoch ist.
Einfacher ist es, die Korrektur per Software zu machen. Geht die Uhr 
vor, setzt man in regelmässigen Abständen den Reload-Wert des Timers um 
1 herunter, also 31248 statt 31249. Diese Sekunde wird dann um ca. 32 
ppm kürzer, was nicht auffällt. Geht die Uhr also um 8ppm vor, müsste 
die Korrektur in jeder 4. Sekunde durchgeführt werden. Voraussetzung ist 
natürlich, dass die Abweichung stabil ist und z.B. nicht mit der 
Temperatur schwankt.

von Uwe G. (scd)


Lesenswert?


von Uwe H. (uhomm)


Lesenswert?

Hi,

ja, das hatte ich schon probiert...ist aber etwas langwierig beim Testen 
und dazu müsste die Abweichung des Quarzes auch konstant sein, was ich 
ehrlich gesagt, bezweifle :-)

Gruß
Uwe Homm

von Uwe H. (uhomm)


Lesenswert?

Hi,

danke für die Links! Vor allem der mit der genauen Sekunde.

Gruß
Uwe Homm

von Wolfgang (Gast)


Lesenswert?

Uwe H. schrieb:
> ja, das hatte ich schon probiert...ist aber etwas langwierig beim Testen
> und dazu müsste die Abweichung des Quarzes auch konstant sein, was ich
> ehrlich gesagt, bezweifle :-)

Es hat schon seinen Grund, warum viele Leute sich bei der 
Langzeitstabilität einer Uhr auf externe Dienstleister verlassen, z.B. 
DCF77 oder GPS.

von Wolfgang S. (Gast)


Lesenswert?


von Uwe H. (uhomm)


Lesenswert?

Hallo Alle,

vielen Dank für all Eure Antworten, die mich wieder etwas sensitiver 
hinsichtlich der Genauigkeit von Quarzen gemacht haben.

Ich sehe den Thread jetzt als beendet an.

Liebe Grüße
Uwe Homm

von Stefan F. (Gast)


Lesenswert?

Uwe H. schrieb:
> Ich sehe den Thread jetzt als beendet an.

Wie geht das?

von Carsten-Peter C. (carsten-p)


Lesenswert?

Hallo,
ich nutze einen Quarzoszillator mit 6,5535 Mhz für ein 100Hz PWM und 
gleichzeitig den Überlauf für die Uhrzeit. Allerdings mit dem 
ATtiny4313.
Die ISR:
.ORG OVF0addr      ;8 Bit Timer Überlauf
rjmp zeit00      ;Überlauf 8 Bit Zähler für Uhr
...
...
Zeit00:
  push AL
  in AL,SREG
  push AL
  push R24
  push R25

  ldi AL, LOW (hsec)
  ldi AH, HIGH(hsec)
  lds R24, zeitl
  lds R25, zeith
  adiw R24, 1
  sub AL, R24
  sbc AH, R25
  brcc Zeit01
  clr R24
  clr R25

  lds AL, nminute
  ori AL, 0b01111111    ;Bit 7 zufrieden lassen
  sts nminute, AL
Zeit01:
  sts zeitl, R24
  sts zeith, R25
  pop R25
  pop R24
  pop  AL
  out  SREG,AL
  pop  AL
  reti

hsec ist 6000
nminute

Dann irgendwann in der Hauptschleife:
Uhr:
  clr AL
  sts Zeit, AL
  lds AL, nminute
  sbrs AL, 0      ;Sprung, wenn Bit gesetzt
  ret
  andi Al, 0b11111110  ;Bit 0 löchen
  sts nminute, AL
  lds AL, Minute    ;lese Minute
  inc AL
  cpi AL, 60      ;nächste Stunde? 60=0x3C
...usw.

Der Weg ist etwas anders, läuft aber ganz gut.
nminute wird jede Minute gesetzt
Der Quarz
https://www.reichelt.de/quarzoszillator-6-553600-mhz-oszi-6-553600-p13719.html?&trstct=pol_5&nbc=1
Die Frequenztoleranz:±100 ppm
reicht mir für meine Schaltzeiten aus.
Ich hoffe, das dir die Anregung weiter brint.
Gruß Carsten

von georg (Gast)


Lesenswert?

Carsten-Peter C. schrieb:
> Die Frequenztoleranz:±100 ppm
> reicht mir für meine Schaltzeiten aus.

Hast du das mal aufs Jahr ungerechnet?

Georg

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

georg schrieb:
> Carsten-Peter C. schrieb:
>> Die Frequenztoleranz:±100 ppm
> Hast du das mal aufs Jahr ungerechnet?

Sind immer noch ±100 ppm

*wegduck* 

von Michael M. (michaelm)


Lesenswert?

Uwe H. schrieb:
> .....vielen Dank für all Eure Antworten, die mich wieder etwas
> sensitiver hinsichtlich der Genauigkeit von Quarzen gemacht haben.

Ein Quarz schwingt nicht einfach "mal so" mit der f, die der Hersteller 
angegeben oder aufgedruckt hat. Die Schwingfrequenz hängt (auch) von der 
Art der Oszillator-Schaltung und diversen anderen Randbedingungen (Temp. 
/Betriebsspannungs-Schwankung, Beschaltung) ab und bei weitem nicht nur 
von der Fertigungstoleranz des Quarzes selbst.
Man kann ihn -wie Stefan bereits sagte- mit externen Elementen (z.B. Cs 
und/oder Ls) auf die Soll- Frequenz "ziehen". Wenigstens das sollte man 
dann wenigstens mal mit Hilfe eines Zählers machen, wenn man ihn als 
Referenz für eine Uhr nutzt.

Wenn die Randbedingungen einigermaßen konstant und f-soll abgeglichen 
sind, zeigt ein nicht "unordentlich" gebauter Q-Osz. durchsus eine 
Stabilität von 10^(-6) oder sogar weit besser.
DAS siehst du auf einer Uhrzeitanzeige innerhalb von 24 Stunden nicht im 
Geringsten ( < 1/10tel Sek.).

: Bearbeitet durch User
von Carsten-Peter C. (carsten-p)


Lesenswert?

georg schrieb:
> Hast du das mal aufs Jahr ungerechnet?

Meine Uhr läuft weniger wie 3 Minuten im Monat falsch.
Ich kann nicht sagen, welche Genauigkeit Uwe braucht.
Bei mir ist es eben oft mehr ein Software-Problem, wenn die Abweichung 
zu groß werden.

...läuft die Uhr einige Stunden, gibt es langsam
Abweichungen im unteren Sekundenbereich....

Das erscheint mir zu viel Abweichung für den Quarz zu sein.
Ich bab viel ausprobiert und viel verworfen, was eigentlich laufen 
sollte. (wer nicht?)
Manchmal ist es einfacher, in Abständen die Zeit automatisch neu zu 
setzen.

Gruß Carsten

von Stefan F. (Gast)


Lesenswert?

Carsten-Peter C. schrieb:
> Meine Uhr läuft weniger wie 3 Minuten im Monat falsch.

Das ist der Normalfall, der mit mittelguten Bauteilen ohne Kalibrierung 
erreicht wird. Wenn eine Uhr schlechter ist, betrachte ich sie als 
"fehlerhaft".

von Andreas B. (bitverdreher)


Lesenswert?

Stefan ⛄ F. schrieb:
> Uwe H. schrieb:
>> Ich sehe den Thread jetzt als beendet an.
>
> Wie geht das?
Indem er ihn nicht mehr liest. ;-)

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.