Hi, ich interessiere mich für generelle Lösungsmöglichkeiten der Bereitstellung einer Uhrzeit auf Mikrocontrollern. Ich habe sehr wenig zu diesem Thema gefunden, obwohl es doch eigentlich eins ehr häufig auftretendes Problem sein sollte. Mich würde interessieren, wie euere Lösungsansätze sind. Folgende Möglichkeiten habe ich recherchiert: - Auswertung des Zeitsignals mittels DCF-Hardware - Implementierung einer Uhr in Software mittels Timer-Interrupts Wie löst ihr das Problem? Soweit ich weiß gibt es auch keine Uhr unter FreeRTOS oder??
@ tm (Gast) >Bereitstellung einer Uhrzeit auf Mikrocontrollern. Ich habe sehr wenig >zu diesem Thema gefunden, Dann hast du schlecht gesucht. AVR - Die genaue Sekunde / RTC
Danke mal für den Link! Da habe ich mich vermutlich etwas schlecht ausgedrückt. Ich suche eigentlich eine reine Softwarelösung. Ist sowas überhaupt ratsam wenn man ne einigermaßen gescheite Uhr braucht? Also mit Softwarelösung meine ich anhand der Taktfrequenz berechnen wie oft ein Timerinterrupt ausgelöst wird, um dort dann die Sekunden zu zählen.
tm schrieb: > Ich suche eigentlich eine reine Softwarelösung. Hm. So ganz ohne Mikrocontroller, nur Software? Das wird schwierig. Also lies den link nochmal richtig bis zum Ende. Mit weniger Hardware als einem Mikrocontroller und einem Quarz geht es nun mal nicht. Oliver
tm schrieb: > Also > mit Softwarelösung meine ich anhand der Taktfrequenz berechnen wie oft > ein Timerinterrupt ausgelöst wird, um dort dann die Sekunden zu zählen. Hi, tm, wenn das Dein Lastenheft ist, dann würde ich für mein Pflichtenheft, meine Zusage, was ich erreichen könnte, noch fragen: 1. Ist eine Anbindung des errechneten oder vorbestimmten Zeitpunkts an UTC oder eine andere genormte Zeitskala notwendig? 2. Wenn ja, wie groß darf der Fehler werden? Momentan denke ich an a) einen internen Teiler an einem Quarzgenerator. Ggf. ein Quarzofen. b) eine Anbindung über DCF oder GPS. c) Ggf Ermittlung der Differenzen zwischen Quarz und UTC und deren Berücksichtigung. Ciao Wolfgang Horn
Die Genauigkeit der SW-Lösung mit Timerinterrupt ist nur vom Quarz abhängig. Typische MC-Quarze sind aber ab Werk nicht so genau, wie Uhrenquarze, dafür aber hoch konstant. Man muß also die Frequenz mit einem genauen Frequenzmesser messen und diesen Wert in die Rechnung im Interrupt eintragen. Dann erreicht man wenige Sekunden pro Jahr. Alternativ die Uhr mehrere Wochen laufen lassen und aus der Abweichung in Sekunden den genauen Wert errechnen. Die Berechnung könnte auch die Software machen. Man stellt die Uhr einmal und dann nach mehreren Wochen ein zweites mal. Aus der Abweichung beim 2. Stellen berechnet dann die SW den Korrekturwert. Ist ein Stromausfall zu überbrücken, erlauben viele MCs den Anschluß eines Uhrenquarzes (32kHz). Dann brauchen sie zum Zeit zählen nur wenige µA, d.h. mit einem Goldcap 1F lassen sich einige Wochen überbrücken. Peter
Danke für Euere Antworten, @Wolfgang: Eine Anbindung an eine externe Zeitskale (UTC) ist gewünscht. Der Fehler einer Uhr summiert sich ja ständig auf. Daher sollte ich mir Gedanken machen welche Gangabweichung auf welchen Zeitraum ich mindestens erreichen möchte. Nur einige Sekunden pro Tag wären großartig. Im Moment erreiche ich mit einem Timerinterrupt nur etwa acht Minuten pro 12 Stunden. Das könnte mit der Quarzgenauigkeit zu tun haben. @Peter: > Typische MC-Quarze sind aber ab Werk nicht so genau, wie Uhrenquarze, dafür aber hoch konstant. Was meinst du mit "genau", wenn nicht "konstant"? Vermutlich dass sie in einer anderen Frequenz schwingen als eingestellt oder? Wenn ja bezieht sich diese Abweichung auf meine SW-seitige Einstellung oder schon auf den Quarz selbst, dass er z.B. nicht mit 12,000MHz schwingt wie angegeben sondern mit 12,345Mhz? > Alternativ die Uhr mehrere Wochen laufen lassen und aus der Abweichung in Sekunden den genauen Wert errechnen. Ich habe meinen Timerinterrupt 15h laufen lassen und eine Gangabweichung von -8,73ms/Sekunde ermittelt. (Wenn ich annehme dass meine Referenzuhr genau ging). Wie müsste ich jetzt diesen Wert einrechnen? Wäre es möglich pro Timerinterrupt einen Korrekturwert darauf zu addieren? Weil eigentlich müsste das dann aufgrund von Rundungsfehlern etc immernoch wegdriften oder? > Die Berechnung könnte auch die Software machen. Man stellt die Uhr einmal und dann nach mehreren Wochen ein zweites mal. Aus der Abweichung beim 2. Stellen berechnet dann die SW den Korrekturwert. Das klingt sehr interessant, ich habe gehört dass die Quarze insbesondere bei großen Temperaturunterschieden ihr Schwingungsverhalten verändern können. Da wäre so eine dynamische Berechnung des Korrekturwertes schon sinnvoll.
Warum keinen uC mit integrierter RTC verwenden? Alternativ gibt es externe RTC Bausteine...
tm schrieb: > erreichen möchte. Nur einige Sekunden pro Tag wären großartig. Im Moment > erreiche ich mit einem Timerinterrupt nur etwa acht Minuten pro 12 > Stunden. Das könnte mit der Quarzgenauigkeit zu tun haben. Das sind 0.5% Für einen Quarz ist das zuviel. Das weißt auf einen Softwarefehler hin > Vermutlich dass sie in > einer anderen Frequenz schwingen als eingestellt oder? Exakt. Allerdings halten sie dann diese falsche Frequenz einigermassen konstant. > den Quarz selbst, dass er z.B. nicht mit 12,000MHz schwingt wie > angegeben sondern mit 12,345Mhz? Der Quarz selber. Allerdings ist die Abweichung nicht so gross. Das sind ein paar hundert Herz bei 12Mhz Sonst könnte man ja auch gleich einen SChätzprügel anstelle des Quarzes nehmen
tm schrieb: > Ich habe meinen Timerinterrupt 15h laufen lassen und eine Gangabweichung > von -8,73ms/Sekunde ermittelt. (Wenn ich annehme dass meine Referenzuhr > genau ging). Wie müsste ich jetzt diesen Wert einrechnen? Du rechnest dir aus, wieviele Sekunden dein Testzeitraum tatsächlich umfasst, wieviele deine Uhe gezählt hat und daraus kannst du dann ausrechnen, wie schnell dein Quarz wirklich schwingt. Und damit rechnet man dann die Teilerkette noch einmal neu durch. > eigentlich müsste das dann aufgrund von Rundungsfehlern etc immernoch > wegdriften oder? Du willst dein Programm so umändern, dass sich keine Rundungsfehler aufsummieren. Details dazu finden sich im weiter oben verlinkten Artikel. Einfach mal lesen und darüber nachdenken was du da gelesen hast und was das alles bedeutet. > Das klingt sehr interessant, ich habe gehört dass die Quarze > insbesondere bei großen Temperaturunterschieden ihr Schwingungsverhalten > verändern können. Da wäre so eine dynamische Berechnung des > Korrekturwertes schon sinnvoll. Da wird gar nichts dynamisch nachgestellt. In einem normalen Wohnraum ändert sich die Temperatur nicht so dermassen dramatisch, dass das gross ins Gewicht fallen würde. Mit einem Mittelwert aus ein paar Tagperioden und ein paar Nachtperioden bist du gut dabei. VOn Zeit zu Zeit wird man die Uhr neu einstellen müssen. Wobei Zeit zu Zeit sich in der Größenordnung von Monaten bewegt. Für den Hausgebrauch gut genug.
tm schrieb: > Nur einige Sekunden pro Tag wären großartig. Hi, tm, einige Sekunden pro Tag? Pro Tag 86400 Sekunden, Quarz mit einem Temperaturkoeffizienten von 10e-7 sind billige Handelsware. Einige Sekunden pro Tag, das ist Frage des Abgleichs und der Kalibrierung. Bei meinem Atmega würde ich den Timer2 benutzen in seiner Funktion als asynchronen Uhrenzähler. Der läuft sogar weiter, wenn Du den gnazen Prozessor in Power Down schaltest. Ciao Wolfgang Horn
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.