UTC-Wanduhr XXL

  • Tag,
    ich darf jetzt auch ins Forum posten (Danke, Peter!)


    @DC0DW (Addi)
    die Vierte Dimension ist keineswegs tot: http://www.forth-ev.de/filemgmt/viewcat.php?cid=2



    Ich habe mich mit dem Projekt inzwischen ja beschäftigt. Und ja, ich weiß, daß das ein
    "gelöstes Problem" ist. Was ist daran falsch? Der AS324 Bausatz macht vielleicht das,
    was hier gewünscht wurde --- aber auch nicht mehr. Wer sofort so eine Uhr braucht,
    der darf sich eine besorgen, als Fertiggerät oder Bausatz. Wer aber genau verstehen
    will, wie das Ding innendrin funktioniert, der wird damit vielleicht nicht so ganz
    zufrieden sein.


    Ich lerne gerade, wie ich die Ungenauigkeit des Uhrenquarzes (Frequenz zu hoch) durch
    einen numerischen Ozsillator so zurechtstreicheln kann, daß eine genauer laufende
    Uhr dabei herauskommt. Mir ist es dabei deutlich wichtiger, die Innereien zu verstehen,
    als sofort zu so einer Uhr zu kommen. Und eine Uhr, die 2.5 Sekunden pro Stunde
    zu schnell geht, ist ganz klar nicht akzeptabel.


    72 de Erich, dl7tux

  • Moin, Erich und Ihr anderen,


    erst einmal kann ich heftig bestätigen, dass es einfach Spaß macht, so etwas zu entwickeln!


    Ich habe seit Anfang des Jahres ein selbstprogrammiertes Ührchen im Betrieb - aber mit etwas anderer Zielsetzung: Es soll mir nachts im Schlafzimmer die Zeit zeigen.


    Als besonderes Schmankerl betreibe ich das Ding nicht (direkt) aus der Steckdose, sondern über vier Mignonakkus der 2Ah - Klasse. Die ich nicht öfter als einmal in etwa drei Monaten austauschen will. Damit ergab sich die Zielsetzung, den Gesamtstromverbrauch unter 1 mA zu halten.


    Das habe ich hingekriegt. Die CPU (ein ATMega16L in meinem Fall) pennt fast die ganze Zeit. Die sechs LED-Ziffern (jede Siebensegment plus ".") werden 128 mal in der Sekunde für je 30 µs unter Strom gesetzt. Das gibt eine fürs dunkle Schlafzimmer angemessene Helligkeit bei einem Gesamtenergieverbrauch bei 1 mA wie geplant.


    Ich habe blöderweise die Dioden mit Vorschaltwiderständen von 470 Ohm an den µC angeschlossen. Hätte ich hier kleinere Werte benutzt, könnte ich die LEDs für die gleiche Helligkeit noch kürzer aufleuchten lassen und die CPU würde länger schlafen.



    Ich lerne gerade, wie ich die Ungenauigkeit des Uhrenquarzes (Frequenz zu hoch) durch
    einen numerischen Ozsillator so zurechtstreicheln kann, daß eine genauer laufende
    Uhr dabei herauskommt.


    Ich habe das wie folgt gelöst: Meinen 32768Hz Uhrenquarz ausgemessen, indem ich die Uhr einfach im Spätsommer einige Wochen habe laufen lassen und über die Abweichung Buch führte. Er schwang etwa 32767,25 mal pro Sekunde.


    Mein Uhrenquarz hängt am Timer2. Ich kompensiere die Abweichung, indem ich bei jedem Timer2-Überlauf (also 128 mal in der Sekunde, wenn mein Quarz genau wäre) im Interrupthandler die Zahl 33.555.198 zu einem 32bit - Wert addiere. Wenn bei dieser Addition der 32bit - Wert überläuft, ist eine Sekunde um. Ginge mein Quarz genau, würde ich 2 ** 32 / 128 = 33.554.432 addieren.


    Nach Weglassen von hier unwichtigen Details sieht das in C so aus:



    Das Hauptprogramm, durch den Timerüberlauf-Interrupt mit aufgeweckt, bucht die Sekunden von der seconds Variable runter (zieht 1 ab, wenn da was ist) und dort rein, wo die LEDs gefüttert werden, die anschließend aufleuchten.


    Weitere Schmankerl:


    • Als "User Interface" benutze ich einen Bananenstecker (an Masse), den ich auf Heftzwecken tippe. Damit kann ich die Uhr stellen und auch beliebig zwischen den Zeitzonen UTC, MEZ und MESZ wechseln. (Ich hätte auch Taster nehmen können.)
    • Der ADC misst einmal alle zehn Sekunden die Batteriespannung. Sind die Akkus schon ziemlich erschöpft, werden die Sekunden nicht mehr angezeigt: Zeit für den Akkuwechsel. Sinkt die Akkuspannung weiter, geht die Anzeige ganz aus, damit die Uhr noch möglichst lange weiter läuft.
    • Den Akkuwechsel überbrücke ich mit einem 1F - Kondensator.
    • Ebenfalls per ADC greife ich alle zehn Sekunden die Helligkeit der Umgebung mittels einer Fotodiode ab. Ich könnte die LEDs dann passend heller regeln. Aber damit wäre der Akku zu schnell leer. Ich mache statt dessen die LEDs ganz aus, wenn es hell ist (dann kann ich schließlich auch meine Armbanduhr erkennen). Nur zu jeder vollen Stunde wird kurz mit der nötigen Helligkeit angezeigt, falls ich gerade im Radio DLF höre und mit dem Zeitzeichen vergleichen will.
    • Es wird derzeit kälter in unserem Schlafzimmer, wodurch die Uhr jetzt ungefähr eine Sekunde in drei Wochen nach geht. Um hier noch etwas heraus zu holen, habe ich an den Quarz mit Heißkleber einen LM335 Temperatursensor gebabscht. Ich habe vor, gelegentlich die Temperaturkurve des Quarzes zu erfassen. (Ein GPS-Modul dafür habe ich.) Dann kann ich statt mit der festen Zahl 33.555.198 mit einer zur Quarztemperatur passenden Zahl kompensieren.


    Alle ADC-Messungen gehen gegen die eingebaute Referenz. Spannungsteiler reduzieren die zu messenden Spannungen sinngemäss. Damit diese Spannungsteiler nicht den Akku nach und nach leer saugen, werden Fotodiode oder Temperatursensor überhaupt nur während der Messungen unter Strom gesetzt, über einen jeweils dazu dedizierten IO-Pin. Die Batteriespannung wird analog auch nicht direkt gemessen, sondern die Ausgangsspannung an einem IO-Pin, ebenfalls durch Spannungsteiler passend reduziert.


    Ich habe jeden Abend kurz vor dem Einschlafen meine Freude an meinem "Ührchen", das oben auf dem Kleiderschrank still und ohne jede Blendwirkung seinen Dienst tut.


    Ich wünsche auch Euch solche Zufriedenheit mit Euren Selbstbauprojekten!


    73, Andreas