Projekt: Wohnraumuhr
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.

Status | wird nicht weiterentwickelt |
Letzte Bearbeitung | 27.05.2020 |
Aktueller Softwarestand | v1.15 vom 14.10.2007 |

Schaltplan | wohnuhr-sch.zip |
Stückliste mit Empfehlungen zur Bauteilbestellung | |
Software für die Wohnraumuhr mit Quelltext in Assembler, Standard-Version vom 14.10.2007 | wohnuhr-v115-std.zip |
Software für die Wohnraumuhr mit Quelltext in Assembler, Version mit invertierenden Ausgängen vom 14.10.2007 | wohnuhr-v115-inv.zip |
Software für die Wohnraumuhr mit Quelltext in Assembler, Standard-Version mit LED-Doppelpunkt vom 14.10.2007 | wohnuhr-v115-dp-std.zip |
Software für die Wohnraumuhr mit Quelltext in Assembler, Version mit invertierenden Ausgängen und LED-Doppelpunkt vom 14.10.2007 | wohnuhr-v115-dp-inv.zip |
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 |
Platinen-Layout von Thomas Zetsche, Version mit Doppelpunkt (1 Platine als PDF) | wohnuhr-pl4.zip |

Beschreibung | Allgemeine Informationen über die Wohnraumuhr |
Schaltung | Beschreibung der Schaltung und Schaltungsvarianten |
Hardware | Bilder und Hinweise zum Aufbau der Wohnraumuhr |
Software | Inbetriebnahme der Uhr und Installation der Software |
Bedienung | Bedienung der Wohnraumuhr |
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:
- 4-stellige 7-Segment-Groß-Anzeige mit 56 mm Ziffernhöhe
- Automatische Synchronisation mit dem DCF77 oder HBG Zeitzeichensender
- Wechselnde Anzeige von Uhrzeit, Datum und Temperatur (einstellbar)
- Gedimmte Anzeige während der Nacht
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:
- Programm 1 - Anzeige der Zeit (6s), Anzeige des Datums (2s), Anzeige der Temperatur (2s)
- Programm 2 - Anzeige der Zeit (7s), Anzeige der Temperatur (3s)
- Programm 3 - Anzeige der Zeit (ständig)
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.
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 Überschreitung 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:
- Für IC1 kann wahlweise ein AT90S4434, AT90S8535 oder ATmega8535 verwendet werden. Die Software wurde für den zur Zeit der Entwicklung aktuellen AT90S4434 assembliert, ist aber ohne Änderungen oder Einschränkungen auf den anderen Controllern verwendbar.
- Die Kondensatoren am Taktgenerator C1 und C2 wurden absichtlich so gewählt. Bei dieser Dimensionierung war bei meinem Prototyp die Ganggenauigkeit bei Ausfall des DCF77-Empfangs am höchsten. Wenn man es ganz genau haben möchte, dann empfiehlt sich der Einsatz eines Trimmerkondensators für C1, z.B. 4-40 pF.
- DCF77-Empfänger: In dieser Schaltung wird ein Empfänger mit offenem Kollektor-Ausgang benötigt. Die Empfänger von ELV und Conrad (bei letzterem den invertierten Ausgang verwenden) erfüllen diese Bedingung. Bei Empfängern mit direktem Ausgang muss noch eine Transistorstufe zwischengeschaltet werden.
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:
- Betrieb ohne Temperatursensor: In diesem Fall kann man einfach IC2 und C11 weglassen. Die Uhr erkennt automatisch das Fehlen des DS1620 und unterdrückt die Anzeige der Temperatur. Es stehen dann nur noch 2 Anzeigeprogramme zur Auswahl: Anzeige von Zeit und Datum (7/3s) oder ständige Anzeige der Zeit.
- Betrieb ohne Tag/Nacht-Schaltung: In diesem Fall können R2-R6, C4 und Tr1 entfallen und der Anschluss 33 von IC1 muss mit +5V verbunden werden. Da die Anzeige in einem dunklen Raum extrem hell wirkt und blendet, wird dieser Tipp nicht empfohlen.
Diese Stückliste enthält alle Bauelemente, die ich für dieses Projekt verwendet habe.

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:

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:
- wohnuhr-pl1.zip - Dieses Layout in Form von PDF-Dateien wurde von Lothar Jasper für die Schaltungsvariante mit Doppelpunkt entwickelt und besteht aus 2 Platinen.
- wohnuhr-pl2.zip - Dieses Layout wurde von Ulli Staake entwickelt und enthält ein Layout im gwk-Format für eine Platine mit Doppelpunkt-Anzeige.
- wohnuhr-pl3.zip - Dieses Layout wurde ebenfalls von Lothar Jasper entwickelt und enthält ein Layout als PDF für eine Uhrenplatine mit Doppelpunkt-Anzeige.
- wohnuhr-pl4.zip - Dieses Layout wurde von Thomas Zetsche entwickelt und enthält ein Layout als PDF für eine Uhrenplatine mit Doppelpunkt-Anzeige.
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.
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.
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.

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.
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.

So sieht die Einstellung in PonyProg für den ATmega8535 aus.
Die Software liegt in insgesamt 4 Varianten vor:
- wohnuhr-v115-std.zip - Dies ist die Standard-Version.
- wohnuhr-v115-inv.zip - Diese Version ist erforderlich, wenn die Anzeigeelemente über invertierende Treiber-ICs angeschlossen sind.
- wohnuhr-v115-dp-std.zip - Diese Version wird benötigt, wenn man die Schaltungsvariante mit dem LED-Doppelpunkt zwischen Stunden- und Minuten-Anzeige aufgebaut hat.
- wohnuhr-v115-dp-inv.zip - Diese Version wird benötigt, wenn man beide Schaltungsvarianten kombiniert, also einen LED-Doppelpunkt und invertierende Treiber-ICs verwendet.
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.
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 | ||||||
![]() | ||||||
Sekunden (gesamte Anzeige blinkt) |
Anzeige nach 5 Sekunden |
![]() |
Sekunden (Blinken hört auf) |
Tastendruck | ![]() |
Uhrzeit |
![]() 5 Sekunden | ||||||
Temperatur (Grad-Zeichen blinkt) |
Anzeige nach 5 Sekunden |
![]() |
Temperatur (Blinken hört auf) |
Tastendruck | ![]() |
Uhrzeit |
![]() 5 Sekunden | ||||||
aktuelles Anzeigeprogramm (Programmnummer blinkt) |
Anzeige nach 5 Sekunden |
![]() |
Uhrzeit | |||
![]() 5 Sekunden | ||||||
nächstes Anzeigeprogramm (Programmnummer blinkt) |
Anzeige nach 5 Sekunden |
![]() |
Uhrzeit (neues Programm wird gespeichert) | |||
![]() 5 Sekunden | ||||||
nächstes Anzeigeprogramm (Programmnummer blinkt) usw. |
Anzeige nach 5 Sekunden |
![]() |
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 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 | ||||
![]() Sekunden lang drücken | ||||
Stunden-Eingabe (Stunden blinken) |
![]() |
mit Taster den gewünschten Stundenwert einstellen (nur kurz drücken) | ||
![]() | ||||
Minuten-Eingabe (Minuten blinken) |
![]() |
mit Taster den gewünschten Minutenwert einstellen (nur kurz drücken) | ||
![]() | ||||
Uhrzeit/Stopp (Uhr bleibt stehen) |
![]() |
Tastendruck startet die Uhr sekundengenau mit der angezeigten Zeit | ![]() |
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.