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
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.
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.
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.
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
Hallo, die ISR dauert keine 500ms :-) Meine Vermutung ist ja gerade, dass der Quarz nicht ganz genau ist... Danke! Gruß Uwe Homm
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
Okay...nochmal eine Stütze für meine Vermutung! Danke! Gruß Uwe Homm
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.
Lesestoff: https://www.mikrocontroller.net/articles/AVR-Tutorial:_Uhr#Ganggenauigkeit https://www.mikrocontroller.net/articles/AVR_-_Die_genaue_Sekunde_/_RTC
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
Hi, danke für die Links! Vor allem der mit der genauen Sekunde. Gruß Uwe Homm
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.
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
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
Carsten-Peter C. schrieb: > Die Frequenztoleranz:±100 ppm > reicht mir für meine Schaltzeiten aus. Hast du das mal aufs Jahr ungerechnet? Georg
georg schrieb: > Carsten-Peter C. schrieb: >> Die Frequenztoleranz:±100 ppm > Hast du das mal aufs Jahr ungerechnet? Sind immer noch ±100 ppm *wegduck*
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
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
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".
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.