Projekt: Wecker

Wohnraumuhr-Bild Man mag in der heutigen Zeit, wo man für 4,95€ einen fertigen Wecker kaufen kann, den Sinn dieses Projektes nicht ganz nachvollziehen können. Aber es hat durchaus seine Berechtigung, denn ich fand einfach kein Gerät, welches meine Wünsche ohne Einschränkungen erfüllen konnte: selbstleuchtende Anzeige, 2 Weckzeiten, einstellbare Weckerlautstärke, Speicherung der Weckzeiten bei Netzausfall ohne zusätzliche Batterie, DCF77 oder HBG Synchronisation und einfache Bedienung. Also machte ich mich selbst ans Werk und baute diesen Wecker mit einem AT90S4434 (bzw. AT90S8535 oder ATmega8535) auf.

Letzte Bearbeitung: 10.03.2007

Symbol Downloads

Schaltplan wecker-sch.zip
Stückliste mit Empfehlungen zur Bauteilbestellung wecker-stkl.htm
Software für den Wecker mit Quelltext in Assembler, Standard-Version wecker-v105.zip vom 04.03.2007
Software für den Wecker mit Quelltext in Assembler, Version mit invertierenden Ausgängen wecker-v105-inv.zip vom 04.03.2007
Platinen-Layout von Lothar Jasper (2 Platinen als PDF) wecker-pl.zip
Gehäuse-Entwurf von Bernd Markscheffel (Fräs-Vorlage als PDF/CDR) wecker-ge.zip

Symbol Inhaltsverzeichnis

Beschreibung Allgemeine Informationen über den Wecker
Schaltung Beschreibung der Schaltung
Hardware Bilder und Hinweise zum Aufbau des Weckers
Software Inbetriebnahme des Weckers und Installation der Software
Bedienung Bedienung des Weckers

Symbol Beschreibung

Nachdem ich nun einige Erfahrungen mit meiner großen Multifunktionsuhr gesammelt hatte und ich mir sowieso einen neuen Wecker zulegen wollte, kam mir die Idee, eine kleine Uhrenversion in Form eines Weckers zu bauen. Dabei ist ein praktisches kleines Gerät mit folgenden Funktionen dabei herausgekommen: Die Weckuhr wurde in ein transparentes Acryl-Gehäuse gebaut, das sieht optisch sehr gut aus, wenn man sauber arbeitet. Außerdem habe ich eine etwas ausgefallene Gehäuseform gewählt: Die Elektronik-Platine befindet sich in einem flachen liegenden Gehäuse, während die Anzeige senkrecht auf die Elektronikplatine aufgesteckt wird.

Symbol Schaltung

Schaltung

Die Schaltung ist relativ einfach aufgebaut, als zentrale Komponente wird hier der Mikrocontroller AT90S4434, AT90S8535 oder ATmega8535 verwendet. Die Ports PD0-PD7 steuern die rechte Anzeigestelle inklusive Dezimalpunkt an. PC0-PC6 sind für die nächste Stelle (zweite von rechts) zuständig. Hier wird der Dezimalpunkt nicht gebraucht, deshalb bekommt PC7 eine andere Verwendung und bedient den Tongenerator. Die nächste Anzeigestelle arbeitet wieder mit Dezimalpunkt und belegt deshalb einen kompletten Port (PA0-PA7). Die Ansteuerung der linken Anzeigestelle weicht etwas von den anderen ab. Da hier nur die Ziffern 1 und 2 angezeigt werden müssen, kann man die Ansteuerung wesentlich vereinfachen. Es werden nur die Segmente b und c einzeln gebraucht und die Segmente a, d, e und g können zu einer Gruppe zusammengefasst werden. Insgesamt reichen also 3 Portanschlüsse (PB0-PB2) aus. Die 5 verbleibenden Anschlüsse arbeiten als Eingänge: Einer davon (PB3) liest die Daten vom DCF77-Empfänger ein und der Rest (PB4-PB7) überwacht die 4 Bedientasten.

Die zur Anzeige führenden Controller-Anschlüsse enden zunächst auf einem 34-poligen Pfostensteckverbinder. Dieser ist so auf der Elektronikplatine angeordnet, dass die Anzeigeplatine direkt von oben aufgesteckt werden kann. Die unverzichtbaren LED-Vorwiderstände habe ich auf der Anzeigeplatine untergebracht, da hier mehr Platz zur Verfügung stand. Die Werte von 1k erscheinen auf den ersten Blick etwas hoch, aber die verwendeten Anzeigeelemente SA08-11SWRA leuchten so intensiv, dass man den Strom auf 3,5 mA reduzieren kann.
Allerdings ist das bei Dunkelheit auch noch zu viel, deshalb habe ich noch eine zusätzliche Dimmschaltung mit D6-D10, Tr2, IC2/2 und R8-R10 eingebaut. Bei Tageslicht ist der Fotowiderstand relativ niederohmig, so dass das Gatter 2 von IC2 einen High-Pegel erkennt, welcher einen Low-Pegel am Ausgang zur Folge hat und den Tr2 durchsteuert. Die Anzeige hat in diesem Fall die volle Betriebsspannung zur Verfügung. In der Dämmerung wird der Fotowiderstand hochohmig bis schließlich das IC2/2-Gatter umschaltet und den Tr2 sperrt. Dann wird die Betriebsspannung um die Flussspannung der 5 Dioden D6-D10 reduziert und beträgt nur noch knapp 2V, was eine angenehme Helligkeit während der Nacht zur Folge hat.
Ursprünglich wollte ich die Helligkeit per PWM ohne zusätzliche Hardware steuern, was im Test auch sehr gut geklappt hat. Allerdings zeigte sich in der Praxis ein ähnliches Problem wie bei der Multifunktionsuhr: die getaktete Anzeige stört den DCF77-Empfang. Also habe ich mich für die Hardware-Variante entschieden, die zudem den Vorteil hat, dass sie sich immer zur optimalen Zeit aktiviert.

Und jetzt zu einem wichtigen Schaltungsteil, der zu jedem Wecker gehört: die Tonerzeugung. In der ursprünglich geplanten Weckerversion sollte der Ton komplett vom Controller generiert werden, was jede Menge Bauteile eingespart hätte. Das hat auch funktioniert, aber der Ton war leider ein wenig unsauber. Die Ursache dafür liegt an einem Timer-Interrupt, der alle 10 ms aktiviert wird und somit die Tonausgabe stört. Auf den Timer kann ich aber schlecht verzichten, weil er die Zeitzählung, den DCF-Empfang, die Tastenabfrage und Entprellung und teilweise auch die Anzeige steuert. Also wird über den Anschluss PC7 nicht direkt die Tonfrequenz ausgegeben, sondern nur ein High-Pegel als Aktivierungssignal. Dieses führt zu dem als Oszillator geschalteten Schmitt-Trigger-Gatter IC2/4 und dient als Schalter für den Oszillator. Der Oszillatorausgang wird invertiert auf ein Potentiometer zur Lautstärkeeinstellung geführt und gelangt schließlich über den Treiber Tr1 zum Lautsprecher. Die zusätzliche Invertierung mit IC2/3 ist notwendig, damit der Lautsprecher im Ruhezustand des Oszillators stromlos ist.
Die Frequenz des Oszillators wird durch R2 und C7 bestimmt. Ich habe die Werte so bemessen, dass ein relativ hoher Piep-Ton erzeugt wird. Wer das nicht mag, kann durch Vergrößerung von C7 die Frequenz niedriger einstellen, alternativ kann man auch R2 durch ein 250k Trimmpotentiometer ersetzen. Dann kommt man auch in den Bereich der Resonanzfrequenz des benutzten Mini-Lautsprechers (oft als Sound Transducer bezeichnet) und dann wird es fast unerträglich laut. Für Leute mit tiefem Schlaf ist diese Einstellung aber vielleicht empfehlenswert :-)

Die Anschlüsse PB5-PB7 und RESET haben noch eine Zusatzfunktion: Über sie lässt sich der Mikrocontroller programmieren. Ich habe diese 4 Anschlüsse und einen Masseanschluss auf einen 5-poligen Steckverbinder geführt, so dass man den Controller jederzeit neu programmieren kann, ohne ihn aus der Schaltung entfernen zu müssen.

Zum Schluss noch ein Wort zur Stromversorgung: Hier kann ein einfaches Steckernetzgerät verwendet werden, welches einen Strom von 150-200 mA liefern kann. Die anliegende Wechselspannung sollte dabei mindestes 7V betragen. Es ist auch ein Betrieb mit Gleichspannung möglich, wobei die Polarität keine Rolle spielt. Allerdings sind dann mindestens 10V als Eingangsspannung erforderlich. Bei höheren Eingangsspannungen empfiehlt es sich, den Spannungsregler auf ein kleines Kühlblech zu montieren. Optimal ist hier ein geregeltes Schaltnetzteil mit 12V und mindestens 200mA geeignet.

Diese Stückliste enthält alle Bauelemente, die für den Wecker erforderlich sind.

Die Datei wecker-pl.zip enthält ein komplettes Platinenlayout für den Wecker in Form von PDF-Dateien. Dieses wurde von Lothar Jasper entwickelt und zur Verfügung gestellt, vielen Dank.

Noch ein paar Hinweise zu den verwendeten Bauelementen:

Und noch ein Hinweis zum 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.

Symbol Hardware

Platine 1 oben Der Wecker wurde auf 2 Lochrasterplatinen aufgebaut: Die Elektronikplatine enthält (wie der Name schon sagt) die gesamte Elektronik und auf der Anzeigeplatine sind die Anzeigeelemente sowie die dazugehörigen Vorwiderstände untergebracht.

Das nebenstehende Bild zeigt die Elektronikplatine von oben. Auf der rechten Seite oben befindet sich eine Klinkenbuchse für die Stromzuführung. Normalerweise gehört hier ein Hohlsteckeranschluss hin, aber dieser hätte von der Höhe her nicht ins Gehäuse gepasst. Darunter sind die Gleichrichterdioden, der Ladekondensator und der Spannungsregler (mit Kühlblech) zu sehen. Oben in der Mitte befindet sich der DCF77-Empfänger und links neben der kleinen Empfängerplatine der Fotowiderstand. Da das Gehäuse transparent wird, kann der Fotowiderstand direkt auf der Platine platziert werden.
In der Mitte ist der Steckverbinder für die Anzeigen, der Mikrocontroller und der Lautstärkesteller zu erkennen. Ganz unten befinden sich die Bedientasten und dazwischen der Quarz für den Controller sowie der Lautsprecher.

Platine 1 unten

Schauen wir uns das Ganze von unten an. Für die Verdrahtung der Lötpunkte habe ich unterschiedliches Material verwendet: Masse- und Stromversorgungsleitungen sind mit einer Drahtstärke von 0,5 mm verlegt worden und für alle Signalleitungen verwendete ich 0,3 mm Draht. Die gesamte Verdrahtung ist relativ unkritisch, aber 2 Dinge sind zu beachten: Der Quarz sollte mit möglichst kurzen Drähten an den Controller angeschlossen werden und die 100 nF Stützkondensatoren sind möglichst nah an den ICs anzuordnen.

Platine 2 oben Unterhalb der 4 Anzeigeelemente sind die 29 Vorwiderstände angeordnet. Die Anschlüsse führen von einer Pfostenbuchse über ein kurzes Stück Flachbandkabel zur Platine und werden auf der Rückseite entsprechend verbunden.

Nach der vollständigen Prüfung der Verdrahtung habe ich die Pfostenbuchse mittels Zweikomponenten-Kleber an der Platine befestigt.

Platine 2 unten

Und das ist die Rückseite der Anzeigeplatine. Die Verdrahtung zwischen den Vorwiderständen und den Flachbandkabelanschlüssen ist etwas knifflig, aber durchaus machbar.

Platinen im Gehäuse

Hier sind beide Platinen bereits in einem Acryl-Gehäuse eingebaut.

Wecker fertig Das ist dann das Endergebnis, wenn man beide Platinen zusammensteckt. Der Einsteller für die Weckerlautstärke befindet sich jetzt unter dem Gehäuse der Anzeigeplatine. Zum Einstellen der Lautstärke ist es erforderlich, die Anzeigeplatine abzuziehen, was man aber ohne Bedenken bei eingeschaltetem Wecker tun kann - echtes Plug & Play :-)

Wer stolzer Besitzer eines Fräs-Automaten ist, der findet in der Datei wecker-ge.zip eine Vorlage für ein Gehäuse aus Acrylglas. Vielen Dank an den Bastlerkollegen Bernd Markscheffel, der die Daten zur Verfügung gestellt hat.

Symbol Software

Die aktuelle Software v1.05 vom 04.03.2007 für den Mikrocontroller AT90S4434, AT90S8535 oder ATmega8535 enthält den kommentierten Quelltext in Assembler sowie das fertige HEX- und EEPROM-File. Es gibt noch eine modifizierte Software v1.05 mit invertierenden (High-aktiven) LED-Ausgängen. Diese ermöglicht den Anschluss von Anzeigen mit gemeinsamer Kathode oder den Anschluss von Großanzeigen über Treiber-ICs.

Fuse-Bits 1

Bei Verwendung eines ATmega8535 ist die richtige Einstellung der Fuse-Bits wichtig. Das Bild links zeigt die Einstellung im AVR-Studio.

Fuse-Bits 2

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

Symbol Bedienung

Alle Funktionen werden mit 4 Bedientasten gesteuert. Mit der Taste AL1 wird der Alarm 1 eingeschaltet, dabei wird für 5 Sekunden die Weckzeit 1 angezeigt. Die Anzeige flackert während dieser Zeit, damit man diesen Zustand von der normalen Zeitanzeige unterscheiden kann. Innerhalb dieser 5 Sekunden hat man die Möglichkeit, mit den Tasten Std und Min die Weckzeit 1 zu verändern, wobei nach jedem Tastendruck der 5-Sekunden-Timeout wieder von vorn beginnt. Ein Druck auf die Taste Std bewirkt die Erhöhung der Weckzeit 1 um eine Stunde, die Taste Min bewirkt eine Erhöhung um 5 Minuten. Das ist zunächst etwas ungewöhnlich, aber durchaus praktisch, denn so kommt man schneller an die gewünschte Zeit heran und die Zwischenzeiten braucht man eigentlich gar nicht (wer stellt schon seinen Wecker auf 6:01 Uhr?).

Es ist auch möglich, die Weckzeit rückwärts einzustellen, also z.B. die Stunden von 6 auf 5 zu setzen: Man drückt auf die Taste Std, hält diese fest und drückt zusätzlich die Taste Min so oft, bis man die gewünschte Stunde erreicht hat. Mit den Minuten funktioniert das genauso, dann werden die Tasten in der umgekehrten Reihenfolge verwendet. Da diese Logik vielleicht nicht von jedem nachvollzogen kann, will ich nicht weiter darauf eingehen :-)

5 Sekunden nach der letzten Eingabe wechselt die Anzeige wieder zur normalen Uhrzeit, allerdings leuchtet jetzt der äußerst rechte Dezimalpunkt als Kennzeichen für die aktivierte Weckzeit 1. Die Weckzeit wird (falls sie sich verändert hat) im EEPROM abgespeichert, außerdem wird der veränderte Alarmstatus im EEPROM vermerkt, so dass sich die Uhr nach einem Netzausfall an den aktivierten Alarm 1 erinnert. Der Alarm kann wieder deaktiviert werden indem man erneut AL1 oder AL2 drückt. Der rechte Dezimalpunkt verlischt dann wieder.

Das Einstellen der Weckzeit 2 erfolgt ebenso wie das Einstellen der Weckzeit 1, hier muss nur anstatt AL1 die Taste AL2 gedrückt werden. 5 Sekunden nach der Einstellung der Weckzeit 2 kehrt auch hier die Anzeige wieder zur Uhrzeit zurück, allerdings blinkt dann der rechte Dezimalpunkt als Kennzeichen für den aktivierten Alarm 2. Es ist übrigens nicht vorgesehen, beide Weckzeiten gleichzeitig zu aktivieren.

Wird nun irgendwann die aktivierte Weckzeit 1 oder 2 erreicht, dann ertönt das Wecksignal. Dieses besteht aus 3 kurzen Pieptönen und einer anschließenden gleichlangen Pause und wird innerhalb einer Minute 60 mal wiederholt. Danach wird das Wecksignal wieder abgeschaltet, der Alarm bleibt aber aktiviert. Üblicherweise wird man das Wecksignal aber nicht eine Minute lang ertragen wollen, deshalb kann man es durch Drücken einer beliebigen Taste abschalten, wobei der Alarm auch gleichzeitig deaktiviert wird. Eine Schlummerfunktion gibt es nicht.

Während der normalen Zeitanzeige kann man durch Drücken der Tasten Std oder Min zur Sekundenanzeige wechseln. Der Dezimalpunkt, der normalerweise zwischen den Stunden und Minuten gleichmäßig blinkt, zeigt jetzt direkt die eingehenden Impulse des DCF77-Empfängers an. Dabei scheint der Punkt zu leuchten und im Sekundentakt kurz zu verlöschen (100 ms bei einem 0-Bit, 200 ms bei einem 1-Bit). So kann man bei Empfangsproblemen nachschauen, ob überhaupt ein DCF-Signal empfangen wird. Ein nochmaliger Druck auf Std oder Min schaltet wieder zur normalen Zeitanzeige zurück.

Erwähnenswert ist noch, dass beim Einschalten der Uhr zunächst für 2 Sekunden die Versionsnummer der Software angezeigt wird. Danach erscheint die Anzeige 0.00, da ja noch keine Synchronisation mit der DCF77-Zeit stattgefunden hat. Die Synchronisation dauert bei fehlerfreiem Empfang mindestens 3 Minuten und während dieser Zeit zeigt der sonst gleichmäßig blinkende Dezimalpunkt zwischen Stunden und Minuten die eingehenden DCF77-Impulse an.


Startseite - Seitenanfang


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


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