ebps.de.vu > Schaltungen > AVR > Funkuhr mit Datum
Kurz vor Weihnachten bekam ich bei einem Tauschhandel eine Anzeigeplatine in die Finger, auf der sich 14 grüne Siebensegmentanzeigen sowie vier X-förmig angeordnete, längliche LEDs zwischen der sechsten und der siebten Anzeige befanden. Durch die ideale Einteilung der Anzeigen in einer Sechser- und eine Achtergruppe eignet sich die Platine also ideal für die Anzeige von Uhrzeit (mit Sekunden) und Datum (mit vierstelligem Jahr). Nachdem ich die Platine kurz ausgemessen hatte, stellte sich heraus, dass die Anzeigen ganz normal für Multiplexing verschaltet waren und gemeinsame Kathoden hatten. Die 4 LEDs stellten eine eigene Stelle dar, die nur die Segmente a bis d hatte. Da ich aber nichts Sinnvolles mit den LEDs anzuzeigen wusste, habe ich sie kurzerhand ausgelötet. Zusammen mit 3 weiteren LEDs, die als Segmente e, f und g verschaltet sind, zeigt die Uhr auf dieser "Anzeigestelle" den aktuellen Wochentag mit sieben einzelnen LEDs auf einer Zusatzplatine an.
Die 15 Anzeigen (14 Siebensegmentanzeigen plus Wochentag-LEDs) werden der Reihe nach eingeschaltet, indem eine Eins durch die beiden Schieberegister "wandert". Als Verstärker kommen hier zwei ULN2003 zum Einsatz, die jeweils sieben Darlington-NPN-Transistoren enthalten. Für den Wochentag habe ich einen zusätzlichen BC550C verwendet, man kann aber genausogut einen der beiden ULN2003 durch einen ULN2803 ersetzen, welcher einen Kanal mehr enthält. Für die Segmente kommen gewöhnliche PNP-Transistoren zum Einsatz, denn auch hier werden wesentlich höhere Ströme benötigt als der AVR liefern kann, damit die Anzeigen trotz Multiplexing über 15 Stellen noch eine brauchbare Helligkeit haben. Dazu kommt dann nur noch der obligatorische AVR und natürlich ein DCF77-Empfänger. Als Spannungsquelle wollte ich eigentlich ein 5 V-Schaltnetzteil von Pollin verwenden, mit dem allerdings kein DCF77-Empfang mehr möglich war. Es ist also anscheinend ein Netzteil mit gewöhnlichem Transformator (und Spannungsregler für die 5 V) erforderlich, damit die Uhr funktioniert. Der Kondensator und der Elko sind in dieser Schaltung sehr wichtig, ohne die beiden ging zuerst gar nichts. Sie sollten möglichst nah am AVR montiert werden, außerdem sollte der Strom für die Anzeigen und der Strom für den AVR und den DCF77-Empfänger möglichst nicht weit durch die selben Leiterbahnen laufen, um Störungen durch die hohen Ströme der Anzeigen zu vermeiden.
Da die Anzeigenplatine bereits Lötaugen für alle Anschlüsse hat, habe ich versucht, die Schaltung auf einer zweiten, genauso großen Lochrasterplatine aufzubauen, die später als "Doppeldecker" mit der Anzeigenplatine verschraubt wird und die Verbindung über eine Stiftleiste herstellt. Leider sind die Löcher für die Schrauben nicht ganz im 2,54 mm-Raster, aber mit etwas Kraft hat es schließlich doch noch alles zusammengepasst. Die Wochentag-LEDs sind auf eine angeklebten Zusatzplatine (Lochraster) gelötet, welche ich vor dem Einstecken der LEDs mit einem Streifen schwarzen Isolierbands überklebt habe, um sie farblich an die Anzeigenplatine anzupassen. Der DCF77-Empfänger muss allerdings weit entfernt von der Uhr entfernt montiert werden, damit er sich keine Störungen einfängt, die durch das Multiplexing leider immer entstehen.
Die Software bietet am Anfang des Assemblerprogramms einige Einstellungen, mit denen sie für den jeweiligen Aufbau passend eingestellt werden kann. Die fertigen Hexfiles sind für den ursprünglichen Aufbau mit invertiertem DCF77-Signal und Anzeigen mit gemeinsamer Kathode sowie 7 LEDs als Wochentagsanzeige vorgesehen, wenn Sie die Schaltung nach einem der anderen Schaltpläne oder komplett anders aufbauen, müssen Sie die entsprechenden Einstellungen ändern und das Programm anschließend neu assemblieren. Folgende Einstellungen sind möglich:
Einstellung | Standard-Wert | Funktion | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
AT90S1200 (nur in 0.8.1) |
0 (AT90S2313 oder ATTiny2313) | Kann auf "1" gesetzt werden, um den AT90S1200 zu verwenden. Die Wochentags-Matrix-Anzeige kann mit diesem Controller nicht verwendet werden (da der lpm-Befehl nicht unterstützt wird) - ist sie trotzdem aktiviert, sollte der Assembler mit einem Fehler abbrechen. | ||||||||
DCFInvert (bis 0.8.1) DCF_INVERTED (ab 0.9) |
1 (invertiertes Signal) | Invertiertes oder "normales" Signal vom DCF77-Empfänger. Ein invertieres Signal ist die meiste Zeit auf High und wird von Low-Impulsen unterbrochen (der Empfänger hat dann meistens einen Transistor auf der Platine), beim nicht-invertierten Signal ist das Signal meistens Low und wird durch High-Impulse unterbrochen (Empfänger ohne oder mit 2 Transistoren). Der Empfänger von Conrad (Bestell-Nr. 641138) hat Ausgänge für beide Möglichkeiten. | ||||||||
DCF_PULLUP (ab 0.9) |
1 (interner Pullup eingeschaltet) | Schaltet den internen Pullup für den DCF77-Eingang ein. Manche Empfänger (Reichelt, Pollin) haben sehr schwache Push-Pull-Ausgänge, die nicht gegen den Pullup ankommen, andere mit Open-Collector-Ausgang (Conrad, ELV) benötigen ihn jedoch unbedingt. | ||||||||
ReverseDateFormat |
0 (Datumsformat YYYY-MM-DD) | Alternatives Datumsformat DD.MM.YYYY verwenden. | ||||||||
InvertCommon |
0 (High-aktive Ausgänge) | Ausgänge für gemeinsame Anschlüsse der Anzeigen invertieren. Wird für Anzeigen mit gemeinsamer Anode gebraucht. Funktionsfähig ab Version 0.7. | ||||||||
InvertSegments |
0 (Low-aktive Ausgänge) | Ausgänge für die Segmente invertieren. Notwendig für Anzeigen mit gemeinsamer Anode oder doppelten Treiber-Transistoren für Riesen-Anzeigen, die mehr als 5 V benötigen. Voll funktionsfähig ab Version 0.8. | ||||||||
UTCDefault (ab 0.9) |
0 (lokale Zeit wenn PD4 offen) | Standardmäßig angezeigte Zeitzone, lokal wenn 0, UTC wenn 1. Die angezeigte Zeitzone kann umgeschaltet werden, indem PD4 auf Masse gelegt wird, das geht jedoch nur, wenn PD4 nicht durch andere Funktionen belegt ist. | ||||||||
WeekdayLEDs |
1 (aktiviert) | 7 LEDs zur Wochentagsanzeige aktivieren. Die LEDs werden, wie im Schaltplan eingezeichnet, als virtuelle 15. Anzeigestelle angeschlossen. Bis einschließlich Version 0.7 hieß diese Einstellung DisableWeekday , Standardwert war 0 (LEDs aktiviert). |
||||||||
SecondLEDs (ab 0.9) |
0 (nicht aktiv) | Ausgänge für Schieberegister aktivieren, mit denen 60 LEDs (eine für jede Sekunde) angesteuert werden können. Ungetestet! | ||||||||
SecondLEDsMode (ab 0.9) |
1 (siehe unten) | Anzeigemodus für die 60 Sekunden-LEDs.
|
||||||||
InvertSecondLEDs (ab 0.9) |
0 (High-aktive Ausgänge) | Invertiert die Ausgänge für die 60 Sekunden-LEDs. | ||||||||
WeekdayMatrix (ab 0.8) |
0 (nicht aktiv) | Wochentagsanzeige im Klartext (2 Buchstaben) auf einer auf der Seite liegenden 5x7-Dot-Matrix-Anzeige. Wenn diese Funktion aktiv ist, wird der Ausgang für die Dezimalpunkte für die Matrix gebraucht. Um trotzdem die Dezimalpunkte der Anzeigen verwenden zu können, dürfen nur die Anschlüsse der leuchtenden Dezimalpunkte verbunden werden (alle anderen bleiben offen) und werden über den Vorwiderstand direkt an die Versorgungsspannung (Plus für Anzeigen mit gemeinsamer Kathode, Masse für Anzeigen mit gemeinsamer Anode) gelegt. Der obige Schaltplan zeigt eine Möglichkeit, wie die Dezimalpunkte von intern verschalteten Anzeigen verwendet werden können (einer pro Anzeige). | ||||||||
InvertMatrix |
0 (Low-aktive Ausgänge) | Ausgänge für die Wochentags-Matrix (siehe unten) invertieren. Benötigt in Verbindung mit Anzeigen mit gemeinsamer Anode, als Matrix kommt dann eine mit Spalten-Anoden zur Verwendung. |
Wenn Sie die Uhr mit anderen Anzeigen aufbauen möchten oder nur Anzeigen mit gemeinsamer Anode zur Verfügung haben, können Sie die Ausgänge des AVR (für die Segmente) und die Ausgänge der Schieberegister (für die gemeinsamen Anschlüsse der Anzeigen) durch eine Einstellung am Anfang des Assemblerprogramms invertieren. Außerdem können Sie dort auch das Datumsformat umdrehen, falls Sie die Reihenfolge "DD.MM.YYYY" vorziehen.
Stephan hat die Uhr um eine Klartext-Wochentagsanzeige auf 16-Segment-Anzeigen mit einem zusätzlichen ATMega8 erweitert. Freundlicherweise hat er den Schaltplan, den Quellcode für den ATMega8 und den geänderten Quellcode für die Uhr zur Verfügung gestellt. Die Schaltung verwendet die Segment-Ausgänge a, b und c, um den Wochentag einzulesen.
Reinhard hat eine ähnliche Uhr selbst entwickelt, sie verwendet einen ATMega16 und zeigt die Uhrzeit mit Sekunden, das Datum und den Wochentag im Klartext auf Dot-Matrix-Anzeigen aus alten D-Boxen an. Der Zeichensatz für die Anzeigen ist von ihm selbst erstellt. Mit mehreren LEDs werden außerdem diverse DCF77-Statusbits angezeigt.