Projekt: Wohnraumuhr

Wohnraumuhr-Bild Diese Uhr hatte zwar die Multifunktionsuhr zum Vorbild, wurde aber technisch völlig anders realisiert. Hier stand ein einfacher und preiswerter Aufbau im Vordergrund und ich denke, beides ist gelungen. In der einfachsten Variante wird praktisch nur ein Mikrocontroller AT90S4434, AT90S8535 oder ATmega8535 als aktives Bauteil benötigt. Die Anzeige besteht hier aus 4 Stück 7-Segment-LEDs mit 56 mm Ziffernhöhe, welche auch aus einigen Metern Entfernung sehr gut abgelesen werden können. Die Synchronisation erfolgt automatisch mit dem DCF77 oder HBG75 Zeitzeichen.

Letzte Bearbeitung: 14.10.2007

Symbol Downloads

Schaltplanwohnuhr-sch.zip
Stückliste mit Empfehlungen zur Bauteilbestellungwohnuhr-stkl.htm
Software für die Wohnraumuhr mit Quelltext in Assembler, Standard-Versionwohnuhr-v115-std.zip vom 14.10.2007
Software für die Wohnraumuhr mit Quelltext in Assembler, Version mit invertierenden Ausgängen wohnuhr-v115-inv.zip vom 14.10.2007
Software für die Wohnraumuhr mit Quelltext in Assembler, Standard-Version mit LED-Doppelpunkt wohnuhr-v115-dp-std.zip vom 14.10.2007
Software für die Wohnraumuhr mit Quelltext in Assembler, Version mit invertierenden Ausgängen und LED-Doppelpunkt wohnuhr-v115-dp-inv.zip vom 14.10.2007
Platinen-Layout von Lothar Jasper, Version mit Doppelpunkt (2 Platinen als PDF)wohnuhr-pl1.zip
Platinen-Layout von Ulli Staake, Version mit Doppelpunkt (1 Platine im Gerber-Format)wohnuhr-pl2.zip
Platinen-Layout von Lothar Jasper, Version mit Doppelpunkt (1 Platine als PDF)wohnuhr-pl3.zip

Symbol Inhaltsverzeichnis

BeschreibungAllgemeine Informationen über die Wohnraumuhr
SchaltungBeschreibung der Schaltung und Schaltungsvarianten
HardwareBilder und Hinweise zum Aufbau der Wohnraumuhr
SoftwareInbetriebnahme der Uhr und Installation der Software
BedienungBedienung der Wohnraumuhr

Symbol Beschreibung

Diese Uhr entstand zeitlich nach meinen Projekten Multifunktionsuhr und Wecker und so sind hier viele Erfahrungen, die ich mit diesen Projekten sammeln konnte, eingeflossen. Herausgekommen ist eine schöne Uhr mit folgenden Eigenschaften:

Die Wohnraumuhr wurde in ein transparentes Acryl-Gehäuse eingebaut, welches sehr dekorativ aussieht. Ich habe zusätzlich aus dem gleichen Material einen passenden Ständer gebaut, so dass man die Uhr z.B. in einen Schrank oder auf ein Regal stellen kann. Bei mir hat die Uhr einen schönen Platz in der Schrankwand des Kinderzimmers gefunden (siehe letztes Bild im Abschnitt Hardware).

Über einen Taster kann die Uhr bei Bedarf auf eine ständige Sekunden- oder Temperaturanzeige umgeschaltet werden, außerdem ermöglicht er die Einstellung der Uhrzeit und die Änderung des Anzeigeprogramms, wobei folgende Programme zu Auswahl stehen:

Das zuletzt ausgewählte Programm wird selbstverständlich im EEPROM des Controllers gespeichert und bleibt auch nach einem Netzausfall erhalten.

Die Temperatur wird in einem Bereich von -55°C bis +60°C angezeigt, die Uhr kann also auch zur Anzeige der Außentemperatur verwendet werden. Im Temperaturbereich zwischen -39,9°C und +39,9°C erfolgt die Anzeige mit einer Auflösung von 0,1°, außerhalb dieses Bereiches erscheinen die Werte zweistellig mit einer Auflösung von 1°. Bei Temperaturen unter 0°C wird das Grad-Zeichen hinter dem Wert durch ein Minus-Zeichen ersetzt. Die Messung der Temperatur und die Aktualisierung der Anzeige erfolgt alle 10 Sekunden.

Symbol Schaltung

Schaltung 1

Die Schaltung ist relativ einfach aufgebaut. Alle 4 Anzeigeelemente werden über Vorwiderstände direkt vom Mikrocontroller angesteuert, da sie nur wenig Strom benötigen (4 mA pro Segment genügen). Weil die Anzeigen intern aus 4 in Reihe geschalteten LEDs bestehen, reichen 5V als Anodenspannung nicht aus. Hier ist eine zusätzliche Spannung von ca. 9,5V notwendig, die vom Spannungsregler IC4 erzeugt wird. Bei Dunkelheit wird diese Spannung durch den Controller über Tr1 auf ca. 6,5V heruntergeschaltet, wodurch die LEDs nur noch schwach leuchten, aber trotzdem noch gut erkennbar sind. Die Dezimalpunkte der Anzeigen enthalten intern nur 2 LEDs, aus diesem Grund habe ich zum Ausgleich jeweils eine Z-Diode bei den Dezimalpunkten ergänzt.

Warnung: Diese Schaltung wurde für die angegebenen SA-23 Anzeigen optimiert, welche intern aus 4 in Reihe geschalteten LEDs bestehen. Ein Betrieb mit den größeren SA-40 ist auch möglich, wenn man durch Verkleinern der Vorwiderstände den Segmentstrom erhöht. Auf keinen Fall dürfen kleinere Anzeigen mit Einzel-LEDs verwendet werden. In diesem Fall würden hohe Ströme von der Display-Spannung über die LEDs in die Controllerausgänge fließen, welche den Controller und die LEDs beschädigen können!

Zu den Anschlüssen des Controllers: Die Portanschlüsse PD0-PD7 steuern die rechte Anzeigestelle inklusive des Dezimalpunktes an. PC0-PC6 sind für die nächste Stelle (zweite von rechts) zuständig. Hier wird der Dezimalpunkt nicht gebraucht, deshalb kann PC7 für andere Zwecke verwendet werden und steuert hier den Temperatursensor IC2 zusammen mit PD0 und PD1. Normalerweise stört die Doppelfunktion von PD0/PD1 den Anzeigebetrieb. Ich habe das aber so organisiert, dass die Abfrage des Temperatursensors nur während des Wechsels der Anzeige durchgeführt wird. In diesem Fall werden die Störungen nicht wahrgenommen. Die nächste Anzeigestelle arbeitet wieder mit Dezimalpunkt und belegt deshalb den kompletten Port PB0-PB7. PB5-PB7 haben eine zusätzliche Funktion: Sie dienen zur Programmierung des Controllers und sind aus diesem Grund auf den Steckverbinder K2 geführt. Über K2 kann der Controller bei Bedarf neu programmiert werden, wobei er nicht aus der Uhr ausgebaut werden muss. Die Ansteuerung der linken Anzeigestelle weicht etwas von den anderen ab. Da hier nur die Ziffern 1, 2 und 3 dargestellt werden müssen, kann man die Ansteuerung wesentlich vereinfachen und die Segmente A, D und G zusammenfassen. Somit genügen die 4 Port-Anschlüsse PA0-PA3.

Die 4 verbleibenden Anschlüsse PA4-PA7 haben folgende Funktion: PA4 überwacht den Taster, PA5 liest die Daten vom DCF77-Empfänger ein und PA6/PA7 sorgen für das Dimmen der Anzeige bei Dunkelheit. Die Schaltung mit dem Fotowiderstand R2 sowie R3, R4 und C4 überwacht die Helligkeit im Raum und übergibt einen entsprechenden Spannungswert an PA7 des Controllers, welcher für diesen Zweck als A/D-Wandler-Eingang arbeitet. Der Controller misst ständig die Spannung an diesem Eingang und schaltet bei Überscheitung des Schwellwertes von ca. 2,6V die Uhr auf Tag oder bei Unterschreitung des Schwellwertes von ca. 2,4V auf Nacht. Gleichzeitig wird PA6 entsprechend gesetzt (Tag = Low, Nacht = High) und schaltet dann über R5, Tr1 und R6 die Anzeigespannung auf 9,5V oder 6,5V. Während der Nacht wird übrigens nicht nur die Anzeige gedimmt, sondern auch das Wechseln der Anzeige (Zeit, Datum und Temperatur) abgeschaltet und nur noch die Uhrzeit angezeigt.

Der Jumperblock JP1 wurde erst später ergänzt. Es hat sich nämlich herausgestellt, dass die Programmierung eines ATmega8535 in der Schaltung gar nicht oder nicht zuverlässig funktioniert, während die ursprünglich verwendeten AT90S4434 oder AT90S8535 keine Probleme verursachen. Zur Lösung dieses Problems ist es erforderlich, die Verbindung von den ISP Anschlüssen des Controllers (Pin 6-8) zu den LED-Segmenten aufzutrennen und genau dafür ist JP1 gedacht. Im normalen Betrieb müssen hier 3 Jumper stecken und während der Programmierung müssen diese abgezogen werden, falls Probleme dabei auftreten. Alternativ kann hier auch ein DIP-Schalter verwendet werden.

Die beiden Keramik-Kondensatoren C12 und C13 sind optional. Sie werden nur dann benötigt, wenn der Temperatursensor an einem längeren Kabel angeschlossen ist und die Kommunikation nicht oder nicht zuverlässig funktioniert. In diesem Fall sollte man es zunächst mit einem Wert von 100p probieren und gegebenenfalls durch Versuche den optimalen Wert ermitteln. Mit den Kondensatoren lassen sich Entfernungen von bis zu 5m überbrücken, allerdings ist dies abhängig vom Kabelmaterial.

Zur Stromversorgung: Hier empfehle ich ein Schaltnetzteil mit einer festen Spannung von 12V. Die Uhr benötigt weniger als 200mA, somit ist die kleinste Netzteil-Version meist ausreichend.

Noch ein paar Hinweise zu den verwendeten Bauelementen:

Die gesamte Schaltung wurde so entworfen, dass der Hardware-Aufwand sehr gering ist. Es lässt sich an der Schaltung also kaum noch etwas vereinfachen. Wer allerdings auf einige Funktionen verzichten kann, für den bieten sich noch folgende Sparmöglichkeiten:

Diese Stückliste enthält alle Bauelemente, die ich für dieses Projekt verwendet habe.

Symbol Schaltungsvarianten

Ich habe einige Anfragen bekommen, ob man nicht irgendwie einen blinkenden Doppelpunkt zwischen der Stunden- und Minuten-Anzeige realisieren könnte. Es ist möglich, aber da am Controller kein freier Port vorhanden ist, muss man hier einen Kompromiss eingehen. Der Portanschluss B7 (Pin 8) steuert bei dieser Variante den Doppelpunkt an und der Portanschluss D7 (Pin 21) steuert neben dem Dezimalpunkt von D5 zusätzlich den Punkt von D3 an. Die Modifikation der Schaltung sieht dann so aus:

Schaltung 2

D8 und D9 bilden den Doppelpunkt. Den richtigen Wert des Vorwiderstandes R39 muss man experimentell ermitteln. Er sollte so gewählt werden, dass die Helligkeit vom Doppelpunkt und der restlichen Anzeige ungefähr gleich ist. Diese Schaltungsvariante hat allerdings einen kleinen Schönheitsfehler, wobei man diesen zum Teil mit dem Jumper JP2 korrigieren kann: Bei geschlossenem JP2 leuchten die Dezimalpunkte von D3 und D5 immer gleichzeitig, was bei der Anzeige des Datums ok ist, bei der Temperatur jedoch nicht so schön aussieht. Öffnet man JP2, dann wird nur noch der Dezimalpunkt von D3 angesteuert. Die Temperaturanzeige sieht so besser aus, aber das Datum leider nicht. Für JP1 und JP2 kann man übrigens einen 4-fachen DIP-Schalter einsetzen.

Für die Wohnraumuhr gibt es derzeit 3 verschiedene Platinenlayouts, die von freundlichen Bastler-Kollegen zur Verfügung gestellt wurden:

Für alle Platinenvarianten ist eine modifizierte Software erforderlich. Diese ist im Abschnitt Software zu finden.

Auf speziellen Wunsch habe ich noch eine weitere Software-Variante erstellt. Wenn man leistungsstärkere Displays oder vielleicht sogar mehrere Displays gleichzeitig an die Uhr anschließen möchte, dann ist der Controller nicht mehr in der Lage, die Anzeigen direkt zu treiben. Hier müssen dann zusätzliche Treiber-ICs wie z.B. ULN2803 zwischen die Controllerausgänge und die Anzeigen geschaltet werden. Diese Treiber-ICs invertieren allerdings die Ausgangspegel des Controllers und so müssen alle LED-Ausgänge invertiert angesteuert werden. Auch diese Software-Version ist im Abschnitt Software zu finden.

Symbol Hardware

Platine vorn

Die gesamte Elektronik der Uhr wurde auf einer Lochrasterplatine mit einer Größe von 255 x 125 mm untergebracht. Genau genommen sind es mehrere Platinen, die ich zu einer verbunden habe, da ich keine einzelne Platine in dieser Größe bekommen habe. Zur Verstärkung habe ich oben und unten eine kleine Winkelprofilschiene aus Aluminium angebracht. An dieser wird dann später auch das Gehäuse angeschraubt.

Den Mittelteil der Platine füllen die großen Anzeigeelemente aus. Alle anderen Bauteile wurden um die Anzeigen herum platziert. Im oberen Teil wurde die Platine des DCF77-Empfängers und die Ferritantenne angeordnet. Links oben befindet sich der ISP-Anschluss K2 für den Controller, darunter der Controller selbst und unter diesem die Fassung für den Temperatursensor (ist hier nicht bestückt). Die rechte Seite ist komplett für die Stromversorgung reserviert, wobei IC4 mit einem flachen Kühlblech versehen wurde. Der untere Teil enthält das "Kleinzeug": Fotowiderstand, Trimmpoti, LED-Vorwiderstände und IC3, welcher ohne Kühlung auskommt. Übrig bleiben jetzt noch der Taster und der Anschluss K1 für das Netzgerät, beides befindet sich rechts unten. Der Quarz wurde übrigens unter dem Controller versteckt.

Platine hinten

Ein Blick auf die Unterseite: Für die Verdrahtung der Bauteile habe ich unterschiedliche Drahtsorten verwendet: die stromführenden Leitungen sind mit einer Drahtstärke von 0,5 mm verlegt worden und für alle Signalleitungen verwendete ich 0,3 mm Kupferlackdraht (auch Fädeldraht genannt). Die gesamte Verdrahtung ist relativ unkritisch, aber 2 Dinge sind zu beachten: Der Quarz und die beiden Kondensatoren C1 und C2 sollten sich möglichst nah am Controller befinden. Weiterhin sind die 100 nF Stützkondensatoren C10 und C11 direkt an IC1 und IC2 zu platzieren.

Wohnraumuhr

Und so sieht die fertige Uhr aus. Das volltransparente Design mag vielleicht nicht jedem gefallen, ich finde das aber sehr dekorativ. Außerdem hat es den Vorteil, dass das Licht ungehindert den Fotowiderstand im Geräteinneren erreicht. Man kann sich die Uhr aber auch in einem schönen Holzgehäuse vorstellen.

Symbol Software

Die aktuelle Software v1.15 vom 14.10.2007 enthält den kommentierten Assembler-Quelltext sowie das fertige HEX- und EEPROM-File für den Controller der Wohnraumuhr. Die Software wurde (wie bereits erwähnt) für den AT90S4434 geschrieben und kann unverändert in einem AT90S8535 oder ATmega8535 verwendet werden. Bei Verwendung eines ATmega8535 sind zusätzlich einige Fuse-Bits zu setzen, damit die Uhr richtig funktioniert.

Fuse-Bits 1

So sieht die Einstellung im AVR-Studio für den ATmega8535 aus.

Fuse-Bits 2

So sieht die Einstellung in PonyProg für den ATmega8535 aus.

Die Software liegt in insgesamt 4 Varianten vor:

Genau genommen handelt es sich bei allen Varianten um die gleiche Software, die sich nur in zwei Bytes unterscheidet. Diese steuern dann während des Programmlaufes die LED-Ausgabe. So ist es für mich einfacher, die 4 Varianten zu verwalten und es erleichtert zukünftige Updates.

Symbol Bedienung

Die Bedienung reduziert sich auf das Drücken eines einzelnen Tasters. Normalerweise stellt man damit einmalig bei der Inbetriebnahme der Uhr das Anzeigeprogramm ein, danach wird der Taster kaum noch benötigt. Trotzdem kann man einiges damit anstellen, was folgende Übersicht zeigt:

Uhrzeit
SymbolTastendruck
Sekunden
(gesamte Anzeige blinkt)
Anzeige nach
5 Sekunden
Symbol Sekunden
(Blinken hört auf)
Tastendruck Symbol Uhrzeit
SymbolTastendruck innerhalb
5 Sekunden
Temperatur
(Grad-Zeichen blinkt)
Anzeige nach
5 Sekunden
Symbol Temperatur
(Blinken hört auf)
Tastendruck Symbol Uhrzeit
SymbolTastendruck innerhalb
5 Sekunden
aktuelles Anzeigeprogramm
(Programmnummer blinkt)
Anzeige nach
5 Sekunden
Symbol Uhrzeit
SymbolTastendruck innerhalb
5 Sekunden
nächstes Anzeigeprogramm
(Programmnummer blinkt)
Anzeige nach
5 Sekunden
Symbol Uhrzeit
(neues Programm
wird gespeichert)
SymbolTastendruck innerhalb
5 Sekunden
nächstes Anzeigeprogramm
(Programmnummer blinkt) usw.
Anzeige nach
5 Sekunden
Symbol Uhrzeit
(neues Programm
wird gespeichert)

Wenn in der oben stehenden Übersicht Uhrzeit steht, dann kann je nach gewähltem Anzeigeprogramm auch gerade das Datum oder die Temperatur auf dem Display erscheinen. Der oben aufgezeigte Ablauf ändert sich übrigens geringfügig, wenn der Temperatursensor nicht bestückt wurde. Dann wird nämlich die Temperaturanzeige einfach übersprungen. Ähnliches passiert auch beim normalen Uhrenbetrieb: Falls die Uhr auf eine Wechselanzeige eingestellt ist, die Uhr aber noch nicht synchron mit dem DCF77-Signal ist, dann wird die Datumsanzeige übersprungen. Gleiches gilt bei manueller Einstellung der Uhr.

Wie an anderer Stelle schon erwähnt, wird das eingestellte Anzeigeprogramm im EEPROM gespeichert, so dass die Uhr nach einem Netzausfall wieder zum gewohnten Anzeigeprogramm übergeht. Wenn die Uhr dauerhaft auf die Sekunden- oder die Temperaturanzeige eingestellt ist, dann wird auch das im EEPROM vermerkt und auch in hier wird die Anzeige nach einem Netzausfall wieder genauso hergestellt. Diese Funktion ist für diejenigen gedacht, die die Uhr als Temperatur-Großanzeige verwenden.

Erwähnenswert ist noch, dass beim Einschalten der Uhr zunächst für 3 Sekunden die Versionsnummer der Software angezeigt wird. Danach beginnt der normale Betrieb und die Synchronisation mit dem DCF77-Signal, welche bei fehlerfreiem Empfang zwischen 3 und 4 Minuten dauert. Während dieser Zeit blinkt der Dezimalpunkt zwischen den Stunden und Minuten im Rhythmus des empfangenen DCF77-Signals. Nach der Synchronisation geht der Dezimalpunkt in ein gleichmäßiges Blinken über. Es ist jederzeit möglich, den Empfang des DCF77-Signals zu kontrollieren, indem man einfach die Sekundenanzeige aufruft. Hier blinkt der Dezimalpunkt immer im DCF77-Rhythmus.

Ursprünglich nicht vorgesehen war eine manuelle Einstellung der Uhr. Auf Grund mehrerer Nachfragen habe ich nachträglich eine solche Funktion implementiert. Somit kann man die Uhr auch in Gebieten mit schlechtem DCF77-Empfang oder sogar ohne DCF77-Empfänger als gewöhnliche Quarzuhr betreiben. Es gibt hier aber eine kleine Einschränkung: es wird kein Datum angezeigt.

Die Prozedur zum Stellen der Uhrzeit sieht folgendermaßen aus:

Uhrzeit
SymbolTaster mindestens 5
Sekunden lang drücken
Stunden-Eingabe
(Stunden blinken)
Symbol mit Taster den gewünschten Stundenwert einstellen (nur kurz drücken)
Symbol5 Sekunden warten
Minuten-Eingabe
(Minuten blinken)
Symbol mit Taster den gewünschten Minutenwert einstellen (nur kurz drücken)
Symbol5 Sekunden warten
Uhrzeit/Stopp
(Uhr bleibt stehen)
Symbol Tastendruck startet die Uhr sekundengenau mit der angezeigten Zeit Symbol Uhrzeit

Falls man die Einstell-Prozedur aufruft, ohne neue Werte für Stunden oder Minuten einzugeben, dann wird nach Ablauf der 2 mal 5 Sekunden Wartezeit wieder die bisherige Uhrzeit angezeigt.


Startseite - Seitenanfang

Allgemeines - Projekt-Überblick - Links, Software - Neuigkeiten - „Klassiker“ - Galerie - Impressum

AVR-Programmierung - Multifunktionsuhr - Matrixuhr - Tischuhr - Wohnraumuhr - Wecker - LCD-Wecker - Zahnputzuhr - BigBen-Türgong - Fahrtregler - EPROM-Programmiergerät - Temperaturmesssystem - USB-RS232 Interface - Weihnachtsstern - Kleine Projekte