Projekt: Multifunktionsuhr
Unter diesem vielleicht nicht ganz optimal gewählten Namen verbirgt sich eine gewaltige Uhrenkonstruktion. Die Uhrzeit wird mit 10cm hohen 7-Segment-LEDs angezeigt und eine weitere 10-stellige 16-Segment-Anzeige sorgt für zusätzliche Informationen wie Datum, Wochentag, Temperatur oder Sekunden. Außerdem kann ein Stundengong aktiviert werden. Selbstverständlich wird die Uhr automatisch mit dem DCF77 oder HBG75 Zeitzeichen synchronisiert.
Letzte Bearbeitung: 15.12.2012
Schaltplan | multiuhr-schaltung.zip |
Stückliste mit Empfehlungen zur Bauteilbestellung | |
Uhren-Software für AT90S8535/ATmega8535 mit komplettem Quelltext in Assembler vom 30.09.2007 | multiuhr-at90s8535-v128.zip |
Gong-Software für AT90S2333/AT90S4433 mit komplettem Quelltext in Assembler vom 24.01.2001 | multiuhr-at90s2333-v100.zip |
Gong-Software für ATmega8 mit komplettem Quelltext in Assembler vom 24.02.2006 | multiuhr-atmega8-v100.zip |
Gong-Sound 1 für 27C256 | multiuhr-27c256-1.zip |
Gong-Sound 2 für 27C256 | multiuhr-27c256-2.zip |
Platinen-Layout Version 1 | multiuhr-pl1.zip |
Platinen-Layout Version 2 | multiuhr-pl2.zip |
Beschreibung | Allgemeine Informationen über die Multifunktionsuhr |
Schaltung | Beschreibung der Schaltung und der Schaltungsoptionen |
Hardware | Bilder und Hinweise zum Aufbau der Uhr |
Software | Inbetriebnahme der Uhr und Installation der Software |
Bedienung | Bedienungsanleitung und komplette Beschreibung aller Funktionen |
Dies ist das erste Projekt, welches ich mit AVR-Mikrocontrollern aufgebaut habe und gleichzeitig ist es auch eines der umfangreichsten Controller-Projekte. Die gesamte Entwicklungs-, Bau- und Programmierzeit betrug mehrere Monate, aber die Arbeit hat sich gelohnt. Die Uhr ist ein schöner Blickfang, wenn man die Wohnung betritt und die meisten Besucher waren von dem Gerät sehr beeindruckt. Hier ein kurzer Überblick über die eingebauten Funktionen:
- Vierstellige 7-Segment-Anzeige (100 mm Ziffernhöhe) - zeigt ständig die aktuelle Uhrzeit an.
- Zehnstellige 16-Segment-Anzeige (20 mm Ziffernhöhe) - zeigt zusätzliche Informationen an, wahlweise:
- Automatik-Anzeige: wechselnde Anzeige von Datum, Wochentag und Temperatur (wechselt alle 4 Sekunden)
- Kompakt-Anzeige: ständige Anzeige von Wochentag, Datum (Tag) und Temperatur
- Sekunden-Anzeige: ständige Anzeige der Sekunden
- DCF-Test: Anzeige des DCF77-Signals und der ermittelten Werte für Impulsabstand, Impulslänge und Impulsnummer
- Menüs: Zusammen mit den beiden Bedientasten wird über dieses Display die Menüführung gesteuert
- Automatische Synchronisation mit dem DCF77 oder HBG75 Zeitzeichensender.
- Temperaturanzeige im Bereich von -50,0°C bis 99,9°C mit einer Auflösung von 0,1°C
- Programmierbarer Stundengong: Zur vollen Stunde ertönt ein Gongschlag, Beginn- und Endzeit kann im Stundenraster eingestellt werden, z.B. von 08:00 bis 22:00 Uhr.
- Programmierbarer Nachtmodus: Während der Nacht wird die Zeitanzeige gedimmt, die Zusatzanzeige abgeschaltet und der Stundengong deaktiviert, Beginn- und Endzeit kann im Stundenraster eingestellt werden, z.B. von 23:00 bis 05:00 Uhr.
- Geburtstagskalender: Es können die Daten von bis zu 24 Geburtstagen eingegeben werden und an jedem Geburtstag wird beim Stundengong ein kurzer Glückwunsch per Laufschrift auf dem Zusatzdisplay angezeigt. Die Dateneingabe ist allerdings nicht direkt an der Uhr möglich.
- Weitere Testfunktionen:
- Gong-Test: löst einen Gongschlag aus und zeigt den Geburtstagstext an, falls für den heutigen Tag ein Geburtstag gespeichert ist.
- LED-Test: Startet den Funktionstest aller LED-Anzeigeelemente.
Zur Bedienung der Uhr sind zwei Tasten vorgesehen. Zusammen mit der Zusatzanzeige ist eine menügeführte Einstellung der Uhr möglich. Mit einer Infrarot-Fernbedienung (RC5-Code) können die beiden Bedientasten auch bequem vom Fernsehsessel aus betätigt werden. Die Tastencodes sind lernbar.
Die Schaltung der Multifunktionsuhr ist sehr umfangreich und lässt sich grob in 5 Funktionsgruppen aufteilen: Zentrale Steuerung, Anzeige-Treiber, Anzeige-Modul, Gong/Infrarot-Steuerung und
Stromversorgung. Alle Hauptfunktionen der Uhr werden von einem AT90S8535 oder ATmega8535 gesteuert. Dieser kümmert sich um die Steuerung der Anzeigen im Multiplex-Betrieb, liest und dekodiert die
DCF77-Impulse, wertet die Tasteneingaben aus und kommuniziert mit dem Temperatursensor. Alle Anzeige-Elemente, die beiden Tasten und der Infrarotsensor sind auf einer separaten Platine angeordnet und
über 2 Steckverbinder mit der Steuerplatine verbunden. So lässt sich bei Problemen alles schnell zerlegen und wieder zusammenbauen.
Ein zusätzlicher AT90S2333, AT90S4433 oder ATmega8 steuert den digitalen Gong-Generator und überwacht den Infrarot-Sensor. Eingehende Infrarot-Daten werden dekodiert und gegebenenfalls als simulierte
Tasteneingaben an den Haupt-Controller weitergegeben. Der AT90S2333 kann auch weggelassen werden, wenn man den Gong/Infrarot-Zusatz nicht benötigt. Stattdessen wäre z.B. eine einfache Gongschaltung
mit einem speziellen IC wie SAE800 denkbar.
Die zentrale Steuerung besteht hauptsächlich aus dem Mikrocontroller AT90S8535 bzw. ATmega8535. Dieser hat insgesamt 32 I/O-Anschlüsse - eigentlich viel zu wenig für 14 Anzeigeelemente, 2 Tasten, einen DCF77-Empfänger und einen Temperatur-Sensor. Deshalb werden die LED-Anzeigen im Multiplexverfahren betrieben. Das spart jede Menge Anschlüsse ein, hat aber auch Nachteile: Es werden zusätzliche Bauteile zur Decodierung benötigt. Außerdem müssen die Anzeigen im Impulsbetrieb mit höherem Strom betrieben werden, der bei Ausfall des Multiplexers die Anzeigen beschädigen kann.
Aber jetzt zu den Einzelheiten: Die vierstellige Zeitanzeige wird über die Portanschlüsse PB0-PB6 des Controllers gesteuert. An PB0-PB3 wird die Ziffer im Binärcode ausgegeben und mittels IC102 ins 7-Segment-Format umgewandelt. Der binäre Zifferncode liegt ebenfalls an den 4 Eingängen des Gatters 1 von IC103 an. Hier wird geprüft, ob der Zifferncode 0x0f (dezimal 15) anliegt und falls das zutrifft, dann wird der Dunkeltasteingang des 7-Segment-Decoders aktiviert. Das ist notwendig, damit in der Zeit von Mitternacht bis 9:59 Uhr die Stunden-Zehner-Stelle ausgeblendet werden kann. An den Portanschlüssen PB4 und PB5 ist ein 1-aus-10-Decoder angeschlossen, dessen Ausgänge A0-A3 zu den Anzeigeelementen führen (Auswahl der Anzeigestelle). Nun bleiben noch die Dezimalpunkte der Zeitanzeige übrig, diese werden über PB6 des Controllers angesteuert.Für die 10-stellige Zusatzanzeige sind folgende Controller-Portanschlüsse zuständig: PA4-PA7, PC0-PC7 und PD0-PD7. PA4-PA7 führen zu einem 1-aus-10-Decoder. Hier wird (ähnlich wie bei der Zeitanzeige) die Anzeigestelle ausgewählt. Die Anschlüsse PC0-PC7 und PD0-PD7 steuern direkt die einzelnen Segmente der 16-Segment-Anzeigeelemente an - bis auf eine Ausnahme: die Segmente E und F wurden zusammengefasst um noch einen Portanschluss für den Dezimalpunkt zu gewinnen.
Die verbleibenden Portanschlüsse PA0-PA3 und PB7 haben natürlich auch eine Funktion: PA0 bedient zusammen mit PC0 und PC1 über ein so genanntes 3-Wire-Interface den Temperatursensor IC106. Die doppelte Verwendung von PC0 und PC1 ist kein Problem: im Anzeigebetrieb ist durch PA0=Low sichergestellt, dass IC106 deaktiviert ist und bei der Kommunikation mit IC106 wird ein Zeitpunkt genutzt, an dem die Anzeige nicht aktiv ist. Über den Eingang PA1 werden die vom DCF77-Empfänger kommenden Zeitimpulse eingelesen. PA2 und PA3 sind ebenfalls Eingänge, hier sind die beiden Bedientasten angeschlossen. Der letzte Anschluss PB7 führt zum zweiten Controller und steuert den Stundengong.
Die Portanschlüsse PB5-PB7 und der Anschluss RESET haben noch eine zusätzliche Funktion: Über sie kann der Controller programmiert werden, wobei der Chip in der Schaltung verbleiben kann. Dazu sind
diese 4 Leitungen und ein Masseanschluss an einen 5-poligen Steckverbinder geführt. Damit die Dezimalpunkte der Zeitanzeige wegen der Doppelfunktion von PB6 während der Programmierung nicht beschädigt
werden, bewirkt das bisher nicht erwähnte Gatter 2 von IC103 eine Abschaltung der Dezimalpunkte. Außerdem wird über die Pullup-Widerstände R101-R104 der Ziffernwert auf 0x0f gesetzt und somit die
Zeitanzeige ausgeschaltet.
Von einem freundlichen Bastlerkollegen erhielt ich folgenden Tipp: Der 4543 ist ebenfalls ein guter Ersatz für den V40511, dieser stellt die Ziffern 6 und 9 ordentlich dar, hat allerdings eine andere
Anschlussbelegung. Das nebenstehende Bild zeigt die Schaltungsvariante mit 4543. Auch hier kann wie beim 4511 die Verbindung zu IC103 entfallen.
Noch ein Hinweis zum DCF77 Empfänger: Auch wenn im Text nur von DCF77 die Rede ist, es kann auch ein HBG75 Empfänger verwendet werden. Bei einigen Empfängern sind zwei Ausgänge vorhanden, hier muss unbedingt der invertierte Ausgang benutzt werden. Manche Empfänger neuerer Bauart sind noch mit einem weiteren Anschluss namens PON ausgestattet, dieser muss auf Masse liegen.
Teil 2 - Anzeige-Treiber
Alle Anzeigeelemente der Zeitanzeige werden mit +12V gespeist. Das ist notwendig, weil die verwendeten Ziffernanzeigen SA40 intern aus mehreren in Reihe geschalteten LEDs bestehen, welche insgesamt
eine relativ hohe Flussspannung haben. Bei den kleineren PSA08 der Zusatzanzeige ist das nicht der Fall, hier genügen +5V.
Die Treiberschaltungen für die Zeit- und die Zusatzanzeige sind im Prinzip identisch. Die Anodentreiber sind zweistufig aufgebaut, weil zum einen ein relativ hoher Strom geschaltet wird und zum
anderen bei der Zeitanzeige eine Pegelwandlung auf 12V erfolgen muss. Die Kathodentreiber konnten mit einem einzelnen Transistor realisiert werden. Hier ist aber eine Besonderheit zu beachten: Der
Treiber für die Dezimalpunkte der Zeitanzeige hat mehrere Eingänge. Neben dem normalen Eingang E1 dient E2 zum Dunkelsteuern der Dezimalpunkte während der Controller-Programmierung. E3 wird im
Zusammenhang mit der Infrarot-Steuerung benötigt, die im Teil 4 beschrieben wird.
Die Kathodentreiber der Zeit- und der Zusatzanzeige (Treibertyp D, E und F) können übrigens auch mit geeigneten Treiber-ICs aufgebaut werden, z.B. ULN2803.
Teil 3 - Anzeige-Modul
Die Anzeigeelemente und einige andere Komponenten habe ich auf einer zweiten Platine untergebracht. Genau genommen ist die Anzeigeplatine eigentlich das tragende Element und die Controllerplatine ist an dieser festgeschraubt. Beide Platinen werden über 2 Flachbandkabel (20- und 34-polig) mit Pfostensteckern verbunden. Wie man auf der Schaltung erkennen kann, befindet sich auf der Anzeigeplatine noch ein Infrarot-Empfänger, ein Lautsprecher für den Stundengong und 2 Tastern für die Bedienung der Uhr. Auch die Anschlüsse dieser Teile sind über die Steckverbinder geführt.
Die Anzeigeelemente selbst sind in der Schaltung etwas vereinfacht dargestellt. Bei der Zeitanzeige werden einfach alle gleichnamigen Segment-Anschlüsse (Kathoden) zusammengeschaltet: alle Anschlüsse
für die Segmente A der 4 Anzeigen werden miteinander verbunden und bilden den Anschluss A; alle Anschlüsse für die Segmente B werden miteinander verbunden und bilden den
Anschluss B usw. Die Anoden werden einzeln angeschlossen, wobei zu beachten ist, dass Z0 (Ziffer 0) die Anzeigestelle auf der rechten Seite ist.
Bei der Zusatzanzeige gelten die gleichen Regeln. Auch hier sind alle gleichnamigen Segment-Anschlüsse miteinander verbunden und als Anschluss A bis T
bezeichnet. Die Anoden sind ebenfalls einzeln angeschlossen und Z0 ist auch hier die rechte Anzeigestelle.
Dieser Schaltungsteil ist optional und kann auch komplett weggelassen werden. In der ursprünglichen Version der Uhr bestand die Gong-Schaltung nur aus dem Gong-IC SAE800. Weil dieser aber für meinen Geschmack scheußlich klingt, habe ich nach Alternativen gesucht: Zuerst probierte ich einen ISD1416, welcher für Sprachaufzeichnungen bis 16 Sekunden gedacht ist. Die Klangqualität ließ allerdings sehr zu wünschen übrig. Also entwickelte ich eine eigene Schaltung und hier kommt wieder ein Mikrocontroller zum Einsatz (AT90S2333, AT90S4433 oder ATmega8). Da dieser die meiste Zeit nichts zu tun hat, habe ich noch eine Infrarot-Empfangssoftware implementiert.
Aber jetzt zur Schaltung: Das besondere bei diesem Gong ist, dass hier echte digitalisierte Klänge erzeugt werden, welche in 2 EPROMs vom Typ 27C256 gespeichert sind. Bei dem hier verwendeten Sampling mit 16 Bit und 11,025 kHz reicht die Spielzeit für knapp 3 Sekunden - genau richtig für diesen oder diesen Gongschlag.
Der Ablauf ist folgender: Der Controller liest zyklisch den I/O-Anschluss PB1 und wartet sozusagen auf das Startsignal vom Haupt-Controller. Sobald ein High-Signal erkannt wird, werden über die
Portanschlüsse PD0-PD7, PC0-PC5 und PB0 die 15 Adressleitungen der EPROMs von 0 beginnend bis 0x7FFF (32767) hochgezählt und zwar genau alle 90,75 µs, was einer Frequenz von 11019 Hz entspricht.
Die Abweichung zur Sollfrequenz 11025 Hz ist minimal und nicht hörbar. Die Daten-Ausgänge der beiden EPROMs werden an ein 1R/2R-Netzwerk (R403-R434) geführt, welches den aktuellen 16-Bit-Wert in einen
Analogwert umwandelt. Das gewonnene Audiosignal wird mit R436, R437, C409 und C410 gefiltert und dann dem NF-Leistungsverstärker IC404 zugeführt, an dessen Ausgang sich ein kleiner Lautsprecher (8
Ohm, 0,5 VA) befindet. Über R440 kann die Lautstärke eingestellt werden.
Die Siebglieder R439/C414 und R443/C404 mindern die Störungen auf den Betriebsspannungen +5V und +12V, die durch den Multiplexbetrieb der Anzeigen verursacht werden. Die Betriebsspannung des
Controllers und der EPROMs beträgt dann zwar nur noch 4,9V, aber das liegt noch im grünen Bereich.
Die beiden Befehlscodes können mittels einer Lernprozedur selbst festgelegt werden. Die genaue Beschreibung dieser Prozedur befindet sich im Abschnitt Bedienung.
Auch bei diesem Controller habe ich die Programmieranschlüsse an einen Steckverbinder geführt, damit ein Software-Update ohne Ausbau des Chips möglich ist. Zur Vermeidung von Fehlfunktionen während des Programmiervorganges sind 3 DIP-Schalter vorgesehen:
- S401 - Stummschaltung des Gongs: Da die Gongleitung auch gleichzeitig eine der Programmierleitungen des Haupt-Controllers ist, wird während seiner Programmierung ständig ungewollt der Gong ausgelöst. Durch Schließen von S1 kann man den Ton einfach stummschalten.
- S402/S403 - Sperre der Bedientasten: Da PB3 und PB4 des Gong-Controllers gleichzeitig Programmieranschlüsse sind, werden während der Programmierung ungewollt kurze "Tastenbetätigungen" zum Haupt-Controller gesendet. Mit dem Öffnen von S2 und S3 wird dies verhindert.
Zusammenfassung: Vor der Programmierung von IC101 (AT90S8535 oder ATmega8535) sollte S401 geschlossen werden und vor der Programmierung von IC401 (AT90S2333, AT90S4433 oder ATmega8) sollten S402 und S403 geöffnet werden. Nach der erfolgreichen Programmierung werden die Schalter wieder in den Normalzustand gebracht.
Hinweis zu den verwendeten Bauelementen: Für die Widerstände R403-R434 eignen sich am besten Metallschichtwiderstände mit einer Toleranz von 0,1%. Da solche Widerstände sehr teuer sind, kann man auch einen anderen Weg gehen: Man kaufe eine größere Anzahl preisgünstiger Metallschichtwiderstände mit 1% Toleranz und messe diese aus, es sollten sich dann genügend gleiche Werte finden. Auf jeden Fall sollte hier sehr genau gearbeitet werden, denn das Klangbild hängt hauptsächlich von diesen Widerständen ab!Eigentlich war anstatt des Widerstandsnetzwerkes ein 12- oder 16-Bit-D/A-Wandler-IC vorgesehen. Leider sind solche Bauteile recht teuer und schwer beschaffbar, deshalb habe ich mich für diese Variante entschieden.
Teil 5 - Stromversorgung und Sonstiges Die Stromversorgung kann über ein handelsübliches Steckernetzgerät mit stabilisierter Ausgangsspannung erfolgen (12V und mindestens 500mA), wobei sich hier ein modernes Schaltnetzteil am besten eignet. Die stabile Spannung ist wichtig, damit die Helligkeit der Zeitanzeige, welche direkt mit 12V betrieben wird, konstant bleibt. Außerdem verkraftet der NF-Verstärker keine höheren Betriebsspannungen als 12V.
Vom Hohlsteckeranschluss K501 gelangt die Spannung über eine Schmelzsicherung auf einen 5V-Spannungsregler. Dieser speist die Zusatzanzeige sowie die Mikrocontroller und Logik-ICs. Der 5V-Spannungsregler ist ein moderner Schaltregler, der nur eine Spule (L501) und eine Schottky-Diode (D502) als zusätzliche Bauteile benötigt. Obwohl die Verlustleistung dieses Schaltreglers äußerst gering ist, empfiehlt sich die Montage auf einem kleinen Kühlkörper. Die Diode D501 soll die Schaltung schützen, falls versehentlich ein falsches Netzteil mit negativer Spannung angeschlossen wird. Besser wäre an dieser Stelle eine Surpressordiode, weil sie auch sicher vor Überspannung schützt. Für C503 muss ein spezieller Elko (Low ESR) verwendet werden. Ein normaler Typ ist nicht geeignet und würde nicht lange überleben. Für die Spule L501 habe ich eine vorhandene Ringkern-Drosselspule verwendet, die nur etwas abgewickelt werden musste. In einem späteren Projekt habe ich jedoch gute Erfahrungen mit einer Festinduktivität gemacht, die auch in der Stückliste erwähnt wird.Ein wichtiges Element ist bisher nur kurz erwähnt worden: der DCF77-Empfänger. Ich habe hier einen einfachen Empfänger verwendet, wie er z.B. bei ELV, Conrad oder Reichelt erhältlich ist. Ursprünglich sollte der DCF77-Empfänger auf einer der Platinen untergebracht werden. Leider werden innerhalb der Uhr durch den Multiplex-Betrieb der Anzeigen und den 5V-Schaltregler sehr viele Störsignale erzeugt, so dass hier ein sicherer Empfang nicht möglich ist. Deshalb wurde der Empfänger nach außen verlagert und über einen 3-poligen 3,5mm-Klinkenstecker angeschlossen. Der Empfänger und die dazugehörige Ferritantenne können in einem kleinen Plastikgehäuse untergebracht werden. Anstatt eines DCF77 Empfängers kann auch einer für das HBG75 Signal verwendet werden.
Diese Stückliste enthält alle Bauelemente, die für dieses Projekt benötigt werden.Die Datei multiuhr-pl1.zip enthält ein komplettes Platinenlayout für die Multifunktionsuhr in Form von PDF-Dateien. Dieses wurde von Lothar Jasper entwickelt und zur Verfügung gestellt, vielen Dank.
Ein weiteres Platinenlayout multiuhr-pl2.zip stammt von Michael Hamacher und wurde im Eagle-Format erstellt, auch hier vielen Dank. Derzeit ist allerdings noch keine Gongschaltung enthalten.
Die gesamte Uhr besteht hauptsächlich aus 2 Platinen: der Anzeigeplatine und der Controllerplatine.
AnzeigeplatineDiese trägt die 4 LED-Displays für die Zeitanzeige sowie die 10 LED-Elemente für die Zusatzanzeige, die Bedientaster (rechts unten) und den IR-Empfänger (links unten). Genau genommen besteht die Platine aus zwei Teilstücken, da es keine Lochrasterplatinen in der benötigten Größe gibt.
Die Zusatzanzeige und die beiden Bedientaster sind jeweils auf einer kleinen Extra-Platine montiert, um die Höhe an die großen Anzeigeelemente anzugleichen. Den IR-Empfänger habe ich direkt auf die Anzeigeplatine gelötet.Damit diese Großplatine die nötige Stabilität bekommt, habe ich sie vor dem Bestücken mit Aluminium-Winkelprofilen verstärkt. Über die 4 kleinen Holzplatten wird die Platine später an einen Bilderrahmen geschraubt.
Die beiden Flachbandkabel stellen die Verbindung zur Controllerplatine her. Das linke 34-polige Kabel führt alle Anschlüsse der Zusatzanzeige sowie die Leitungen für Taster und Lautsprecher. Das rechte 20-polige Kabel führt zu den Elementen der Zeitanzeige und zum IR-Empfänger.
Der Lautsprecher wurde hier einfach auf die Platine geklebt.
Controllerplatine
Die gesamte Elektronik habe ich auf einer weiteren Lochrasterplatine untergebracht. Auch diese wurde zur Verbesserung der Stabilität teilweise mit Winkelprofilen verstärkt. An den Profilen lassen sich dann später die beiden Platinen (Anzeige- und Controllerplatine) gut zusammenschrauben.
In der Mitte befindet sich der AT90S8535, rechts daneben sind die Treiber für die Zusatz- und die Zeitanzeige zu sehen. In die rechts oben sichtbaren Stiftleisten werden später die Flachbandkabel zu
den Anzeigelementen gesteckt. Unten rechts sind die 4 peripheren ICs zu sehen (2x 4028, 4012 und 40511). Im linken Teil befindet sich die Gongsteuerung: der AT90S2333, die beiden 27C256 und links
daneben das Widerstandsnetzwerk des D/A-Wandlers sowie das Verstärker-IC LM386.
Über den Mikrocontrollern sind die beiden 5-poligen Programmieranschlüsse zu sehen. Links oben befinden sich 4 DIP-Schalter, 3 davon werden bei der Programmierung verwendet (siehe Teil 4). Den Temperatursensor DS1620 habe ich ganz unten links platziert, damit er möglichst weit von den Wärmequellen der Uhr entfernt ist.
An dem großen Aluminium-Winkel befinden sich die Anschlüsse der Uhr: Stromversorgung 12V (links) und DCF77-Empfänger (rechts), außerdem habe ich hier das 10k Trimmpotentiometer für die Gong-Lautstärke angeklebt. So kann man ohne Eingriff in die Uhr die Lautstärke mit einem kleinen Schraubendreher einstellen.Und hier ein vergrößerter Blick auf die rechte Platinenseite.
Ganz links befinden sich die 16 Segmenttreiber für die Zusatzanzeige, rechts daneben die 10 zugehörigen Anodentreiber. Wiederum rechts daneben sind die 8 Segmenttreiber der Zeitanzeige und die 4 Anodentreiber zu sehen. Rechts unten befinden sich die ICs 102-105.
Links unten wurde die 5V-Stromversorgung untergebracht. Die Bauteile wirken etwas deplatziert, was daran liegt, dass die Schaltung ursprünglich anders aufgebaut war: Die Zusatzanzeige wurde mit 12V
versorgt und ein Linearregler 7805 war für die Versorgung der Controller zuständig. Diese Variante hatte allerdings einen enormen Stromverbrauch zur Folge und so baute ich alles noch einmal um.
Hier ist eine Detailansicht der linken Unterseite zu sehen.
Gesamtwerk
Auf diesem Bild wurden die beiden Platinen zusammengesetzt und verschraubt. Durch das Aufstecken der Flachbandkabel sind alle Verbindungen zwischen den Platinen hergestellt.
Auch auf die Rückseite kommt noch ein Rahmen, an dem sich 2 Winkel für die Wandbefestigung befinden. Auf eine Rückwand habe ich verzichtet, da diese Seite sowieso immer von einer Wand abgedeckt wird.
Man kann auch rotes Plexiglas verwenden, das lässt sich leichter verarbeiten und es ist keine Folie notwendig. Allerdings ist bei diesem Material die Oberfläche sehr empfindlich.
Insgesamt müssen bei der Multifunktionsuhr 4 ICs programmiert werden: die beiden Mikrocontroller sowie die beiden EPROMs. In der folgenden Übersicht stehen alle Dateien zum Download zur Verfügung:
AT90S8535/ATmega8535 (IC101) - Uhr-ControllerFür diesen Controller ist die Software v1.28 vom 30.09.2007 bestimmt. Dieses Paket enthält den kompletten Assembler-Quelltext sowie die fertig assemblierte Software als HEX- und EEP-File. Da es derzeit noch keine Möglichkeit gibt, die Geburtstagsdaten über die beiden Bedientaster einzugeben, muss die Assembler-Datei mit dem AVR-Studio nachbearbeitet und neu compiliert werden. Entsprechende Hinweise befinden sich als Kommentarzeilen im Quelltext.
Bei Verwendung eines ATmega8535 ist die richtige Einstellung der Fuse-Bits wichtig. Im AVR-Studio sieht die Einstellung so aus.Wer PonyProg verwendet, findet hier die Einstellung für den ATmega8535.
AT90S2333/AT90S4433/ATmega8 (IC401) - Gong-Controller
Für den Gong-Controller gibt es 2 verschiedene Softwareversionen, die abhängig vom verwendeten Controller programmiert werden müssen:
- Software v1.00 vom 24.01.2001 - für AT90S2333 oder AT90S4433
- Software v1.00 vom 24.02.2006 - für ATmega8
Beide Pakete enthalten jeweils den Assembler-Quelltext, das HEX- und das EEPROM-File.
Bei Verwendung eines AT90S2333 oder AT90S4433 müssen die Fuse-Bits mit dem AVR-Studio so wie im nebenstehenden Bild gesetzt werden.
Wer PonyProg verwendet, findet hier die Einstellung für den AT90S2333 oder AT90S4433.
Wer PonyProg verwendet, findet hier die Einstellung für den ATmega8.
Für die EPROMs stehen Datenpakete für 2 verschiedene Gong-Sounds zur Verfügung:
Beide Pakete enthalten die EPROM-Dateien im BIN- und HEX-Format. Die Datei mit low im Namen ist für IC402 bestimmt, die Datei mit high für IC403. Weiterhin liegt noch das WAV-File bei, welches als Vorlage für die EPROM-Files diente.
Falls der Wunsch besteht, andere Sounds für den Gong zu verwenden, dann ist dieses kleine Konverter-Tool sicher hilfreich. Es ist ein einfaches Kommandozeilenprogramm und wandelt normale unkomprimierte WAV-Files in 2 Binärfiles um, die direkt in die EPROMs geschrieben werden können. Wichtig: Das WAV-File muss folgende Parameter haben: Samplingrate: 11,025 kHz, 16 Bit, Mono, 32768 Samples (Spielzeit 2,9722 Sekunden), keine Komprimierung.
Zunächst ein paar allgemeine Worte: Die Uhr zeigt auf der oberen 4-stelligen Anzeige immer die aktuelle Uhrzeit an. Die Dezimalpunkte haben teilweise eine besondere Bedeutung: Der Punkt zwischen den
Stunden und Minuten blinkt im Normalbetrieb im Sekundentakt. Wenn die Uhr in Betrieb genommen oder nach einem Netzausfall wieder eingeschaltet wird, dann blinkt dieser Punkt im Rhythmus des
empfangenen DCF77-Signals. So kann man gleich die Funktion des DCF77-Empfängers überprüfen und den Empfänger gegebenenfalls optimal ausrichten. Sobald die Uhr drei aufeinander folgende fehlerfreie
Datenrahmen (entspricht 3 Minuten) empfangen hat, wird sie gestellt und der Dezimalpunkt zwischen Stunden und Minuten geht in einen normalen Blinkrhythmus über.
Der ganz rechte Dezimalpunkt dient als DCF77-Ausfallsignal. Er leuchtet auf, wenn die Uhr 120 Minuten lang kein verwertbares Signal empfangen hat. Sobald sich die Uhr wieder mit dem DCF77-Signal
synchronisiert hat, verlischt der Punkt wieder.
Die Zusatzanzeige dient außerdem noch zur Darstellung von Menütexten. Mithilfe der beiden Taster Menü und OK ist so eine bequeme Bedienung der Uhr möglich. Wird die Taste Menü gedrückt, dann erscheint eine Frage auf der Anzeige wobei das Fragezeichen blinkt. An dieser Stelle wird eine weitere Eingabe erwartet: Ein nochmaliges Drücken auf Menü schaltet zur nächsten Funktion weiter und OK bestätigt die Auswahl. Bei einigen Menü-Funktionen sind weitere Eingaben erforderlich, z.B. bei den Zeiten für die Nachtschaltung und den Gong. Hier blinkt dann die Zeichenposition, wo die Eingabedaten erwartet werden. Wird innerhalb von 10 Sekunden keine weitere Taste gedrückt, dann kehrt die Anzeige automatisch in den Normalmodus zurück. In diesem Fall werden keine Änderungen gespeichert.
Die folgende Übersicht zeigt alle Menüfunktionen:
Menü | ||||||||||||
AUTOMATIK? | OK | Aktivierung der Automatik-Anzeige: Wechsel von Datum, Wochentag und Temperatur im Abstand von 4 Sekunden. | ||||||||||
Menü | ||||||||||||
KOMPAKT? | OK | Aktivierung der Kompakt-Anzeige: ständige Anzeige von Wochentag, Datum (nur Tag) und Temperatur, wird alle 4 Sekunden aktualisiert. | ||||||||||
Menü | ||||||||||||
SEKUNDEN? | OK | Aktivierung der Sekunden-Anzeige. | ||||||||||
Menü | ||||||||||||
DCF-TEST? | OK | Aktivierung der DCF-Anzeige: Anzeige des DCF77-Zeittaktes und der ermittelten Zeiten in Einheiten von 15,6ms: Impulslänge, Impulsdauer und Impulsnummer (für Power-User). | ||||||||||
Menü | ||||||||||||
NACHTZEIT? | OK | NACHT23-06 | OK | NACHT23-06 | OK | Rückkehr in den Normalmodus und Speichern der Nachtzeiten. | ||||||
Menü | Menü | Menü | ||||||||||
Nachtzeit-Beginn um eine Stunde erhöhen | Nachtzeit-Ende um eine Stunde erhöhen | |||||||||||
GONGZEIT? | OK | GONG08-22 | OK | GONG08-22 | OK | Rückkehr in den Normalmodus und Speichern der Gongzeiten. | ||||||
Menü | Menü | Menü | ||||||||||
Gongzeit-Beginn um eine Stunde erhöhen | Gongzeit-Ende um eine Stunde erhöhen | |||||||||||
GONGTEST? | OK | Simulation eines Stunden-Gongs; falls für den aktuellen Tag ein Geburtstag programmiert wurde, dann wird der Geburtstagstext angezeigt, anderenfalls wird in den Normalmodus zurückgekehrt. | ||||||||||
Menü | ||||||||||||
LED-TEST? | OK | LED-Test; auf beiden Anzeigen wird nacheinander der komplette darstellbare Zeichensatz ausgegeben. So kann der richtige Anschluss der Anzeigeelemente überprüft werden. | ||||||||||
Menü | ||||||||||||
AUTOMATIK? | (Zyklus beginnt von vorn) |
Hier noch einige weitere Informationen:
- Automatik-Anzeige: Bei dieser Einstellung werden zyklisch das Datum, der Wochentag und die Temperatur angezeigt. Der Wechsel erfolgt alle 4 Sekunden und zwar immer zur Sekunde 2, 6, 10, 14 usw. Falls die Uhr noch nicht mit dem DCF77-Signal synchronisiert wurde und folglich noch keine aktuellen Datums- und Wochentags-Informationen vorhanden sind, wird nur die Temperatur angezeigt.
- Kompakt-Anzeige: Hier werden gleichzeitig der Wochentag, das Datum (nur der Tag) und die Temperatur angezeigt. Die Anzeige wird alle 4 Sekunden im gleichen Rhythmus wie die Automatik-Anzeige aktualisiert. Auch hier gilt: solange die Uhr noch nicht synchronisiert wurde, erscheint nur die Temperatur.
- Sekunden-Anzeige: Diese Anzeige kann man benutzen, wenn man andere Uhren sekundengenau stellen möchte.
- DCF77-Test: Das ist eine Einstellung für Power-User :-) Hier können neben einem im DCF77-Rhythmus blinkenden Antennensymbol 3 Werte abgelesen werden, mit denen die Qualität des empfangenen DCF77-Signals beurteilt werden kann. Der erste Wert zeigt die Impulslänge und der zweite die Impulsdauer des letzten Sekundenimpulses an, wobei ein Timer-Zyklus von 15,6ms als Einheit verwendet wird. Das klingt jetzt kompliziert, ist es aber nicht. Der erste Wert sollte im Idealfall 64 betragen (entspricht 1s) oder 128 beim Minutenwechsel (entspricht 2s), der zweite Wert ist normalerweise 6 bei einem empfangenen 0-Bit oder 12 bei einem 1-Bit. Der dritte Wert zählt einfach fortlaufend die empfangenen Impulse.
- Nacht- und Gongzeit: Soll der Nachtmodus grundsätzlich ausgeschaltet werden, dann ist eine Nachtzeit von 00-00 Uhr einzustellen. Gleiches gilt, wenn der Gong grundsätzlich ausgeschaltet werden soll. Für einen Gongschlag rund um die Uhr sollte eine Zeit von 0-23 Uhr eingestellt werden.
Die Taste OK hat noch eine weitere Funktion: Wenn sie ohne vorherige Betätigung von Menü gedrückt wird, dann wird die Uhr vom Tag- in den Nachtmodus geschaltet. Eine weitere Betätigung schaltet wieder auf Tag usw. Im Nachtmodus wird die Zeitanzeige per PWM auf eine niedrige Helligkeit umgeschaltet und die Zusatzanzeige verlischt ganz. Weiterhin wird im Nachtmodus der Gong deaktiviert. Wird im Nachtmodus die Taste Menü gedrückt, dann wacht die Uhr auf und aktiviert ganz normal das Menü. Die Umschaltung Tag/Nacht und umgekehrt kann jederzeit erfolgen. Bei der nächsten programmierten Umschaltung wird dann wieder der vorgegebene Rhythmus hergestellt.
Die Taste OK hat noch eine dritte Funktion: Die Aktivierung des Infrarot-Lernmodus. Damit diese Funktion nicht versehentlich bei normaler Bedienung ausgelöst wird, ist hierfür eine besondere Prozedur nötig:- Uhr ausschalten (Netzstecker ziehen)
- Uhr wieder einschalten
- Innerhalb von 5 Sekunden auf die Taste OK drücken und die Taste gedrückt halten. Wenn man erfolgreich war, dann leuchten alle Dezimalpunkte der Zeitanzeige auf und die Taste kann wieder losgelassen werden. Die Uhr wechselt dabei wegen der Doppelfunktion dieser Taste in den Nachtmodus, was aber den folgenden Ablauf nicht stört.
- Die Taste auf der Fernbedienung drücken, welche der Funktion Menü zugeordnet werden soll; die Dezimalpunkte der Zeitanzeige verlöschen kurz, wenn ein gültiger Code empfangen wurde.
- Die Taste auf der Fernbedienung drücken, welche der Funktion OK zugeordnet werden soll; die Dezimalpunkte der Zeitanzeige verlöschen, wenn ein gültiger Code empfangen wurde, der Lernmodus ist damit beendet.
Hinweis: Wenn bei aktiviertem Lernmodus innerhalb von 10 Sekunden kein gültiger Code empfangen wurde, dann wird der Lernmodus beendet und die Dezimalpunkte der Zeitanzeige verlöschen wieder (die Uhr
kehrt in den Normalzustand zurück). Die bisher verwendeten Codes bleiben dabei erhalten und werden weiterhin benutzt.
Die Fernbedienung muss übrigens mit dem RC5-Code arbeiten. Dieser Code ist mehr oder weniger weit verbreitet, es sollte sich eigentlich in jedem Haushalt eine solche Fernbedienung finden. Alternativ
kann man eine Universalfernbedienung nehmen und ein RC-5 Gerät einstellen, z.B. ein TV-Gerät von Loewe. Bei mir funktioniert es beispielsweise sehr gut mit den Fernbedienungen eines Loewe-Fernsehers
und einer Hauppauge WinTV-Karte.
Ich habe festgestellt, dass die verwendeten LED-Anzeigen recht stark altern. Nach fast 6 Jahren ununterbrochenem Dauerbetrieb mit aktivierter Kompaktanzeige konnte man sehr genau erkennen, welche Segmente häufig genutzt werden und welche nicht. Auch die Elemente der Zeitanzeige haben stark nachgelassen, so dass ich mich entschloss, alle Anzeigen auszuwechseln. Die Kompaktanzeige ist zwar sehr übersichtlich und praktisch, aber sie hat den Nachteil, dass die Anzeige "einbrennt". Ich empfehle deshalb, die Automatik-Anzeige zu verwenden.