ebps.de.vu > Schaltungen > AVR > LCD-Funkuhr

Batteriebetriebene LCD-Funkuhr

Beschreibung

Diese Funkuhr ist mein erster Versuch, eine stromsparende Funkuhr zu bauen, die mit Batterien betrieben werden kann. Die Stromaufnahme liegt bei nur ca. 25 µA (ohne DCF77-Empfänger). Damit die Stromaufnahme durch den Empfänger nicht deutlich höher ist, wird der Empfänger nur zwischen 3:00 und 3:15 eingeschaltet, werden in dieser Zeit zwei aufeinanderfolgende DCF77-Telegramme erfolgreich empfangen, wird die Uhr neu gestellt und der Empfänger sofort wieder abgeschaltet. Auch ohne Empfang stellt sich die Uhr automatisch zwischen Winter- und Sommerzeit um.

Aufbau

Die Schaltung besteht nur aus den wesentlichen Teilen und ist schnell aufgebaut. Ich habe den Controller unter dem LCD eingebaut, wodurch die Platine kaum größer als das LCD sein muss. Auf der Lochrasterplatine habe ich das Kupfer an einigen Stellen entfernt, damit die schrägen Drähte zwischen Controller und LCD nicht durch die unbenutzten Lötaugen kurzgeschlossen werden. Die Kondensatoren am Quarz müssen an den verwendeten Quarz angepasst werden, dazu kann die Frequenz an der LCD-Backplane gemessen werden, sie muss genau 32 Hz betragen. Wenn der von Ihnen verwendete Quarz Kondensatoren mit ca. 36 pF benötigt, können auch die internen Kondensatoren im AVR über ein Fuse-Bit aktiviert werden, mit meinem Quarz lief die Uhr damit jedoch zu langsam (ca. 50 ppm Abweichung).

Der Enable-Ausgang für den Empfänger kann auch direkt als Spannungsversorgung des Empfängers verwendet werden, im Assemblerprogramm ist einstellbar, ob der Ausgang high- oder low-aktiv ist. Wird z.B. der Empfänger von Conrad (Bestellnummer 641138) verwendet, kann der VCC-Eingang des Empfängers mit dem Enable-Ausgang der Uhr verbunden werden. Zusätzlich können die zwei Transistoren für den nicht-invertierten Ausgang und die Z-Diode ausgelötet werden, um die Stromaufnahme zu reduzieren. Der Empfänger von Reichelt besitzt einen low-aktiven Enable-Eingang, hier muss also erst das Programm geändert und die Verbindung zwischen Enable und Masse auf der Empfängerplatine getrennt werden, auch der Pull-up sollte im Programm bei Verwendung dieses Empfängers deaktiviert werden.

Achtung: Der Controller kann mit gewöhnlichen ISP-Programmiergeräten nicht mehr programmiert werden, nachdem die Fuses auf den 32 KiHz-Quarz eingestellt sind. Eine Ausnahme stellen Programmer wie das STK500 dar, bei denen die ISP-Taktfrequenz einstellbar ist, sie muss hier auf weniger als 8 kHz eingestellt werden (fISP ≤ fCLK / 4).

Software

Folgende Einstellungen können im Programm vorgenommen werden (in der ersten Spalte ist die Standardeinstellung gezeigt):

Name Beschreibung
DCF_ENABLE_INVERTED = 0 Enable-Ausgang für den DCF77-Empfänger invertieren. Benötigt z.B. für den Enable-Eingang des Reichelt-Empfängers oder Empfänger mit CMOS-Ausgang ohne Enable-Eingang (Empfänger dann zwischen +3V und Enable anschließen). Standardeinstellung ist 0 (nicht invertiert, Ausgang ist active high)
DCF_PULLUP = 1 Pull-up-Widerstand für den DCF77-Eingang aktivieren. Sollte nur für Empfänger mit Open-Collector-Ausgang aktiviert werden (z.B. für den Conrad-Empfänger). Standardeinstellung ist 1 (Pull-up aktiv).
DCF_INVERTED = 1 DCF77-Eingangssignal ist invertiert (negative Impulse). Bei Empfängern mit Open-Collector-Ausgang sollte immer der invertierte Ausgang verwendet werden, da dann seltener Strom durch den Pull-up-Widerstand fließt. Standardeinstellung ist 1 (Signal ist invertiert).

Eine Änderung der Segment-Belegung von PORTA, PORTB, PORTC und PORTD ist ebenfalls möglich, dazu müssen die Zuweisungen am Ende des Programms geändert werden. Dabei entspricht temp PORTA, temp2 PORTB, temp3 PORTC und temp4 PORTD.

Wenn die Uhr eingeschaltet wird, erscheinen zunächst Informationen zum DCF77-Empfang, bis eine gültige Uhrzeit empfangen wurde. Die ersten beiden Displaystellen zeigen die Anzahl der empfangenen Bits des aktuellen Telegramms an, die dritte Stelle den letzten Fehler und die vierte Stelle das zuletzt empfangene Bit. Der Dezimalpunkt zwischen der zweiten und dritten Stelle zeigt das DCF77-Eingangssignal direkt an. Folgende Fehlercodes sind möglich:

Code Bedeutung
(leer) Kein Fehler, Empfang läuft
- Kein Fehler, Empfang gestoppt (warte auf Beginn des nächsten Telegramms)
1 Kein Fehler, erstes Telegramm erfolgreich empfangen. Erst nach erfolgreichem Empfang des zweiten Telegramms wird die Uhrzeit angezeigt.
L Length - Bitlängenfehler (Impuls zu lang oder zu kurz). Tritt oft bei schlechtem Empfang oder beim Einschalten des Empfängers auf.
C Count - Bitanzahlfehler. Tritt bei Empfangsstart in der Mitte eines Telegramms oder während einer Schaltsekunde auf.
P Parity - Paritätsfehler. Tritt selten bei schlechtem/gestörtem Empfang auf.
S Start Bit - Startbitfehler. Tritt selten bei schlechtem/gestörtem Empfang auf.
d DST - Sommerzeit/Winterzeit-Bits nicht sinnvoll gesetzt. Tritt selten bei schlechtem/gestörtem Empfang auf.
E Error - Plausibilitätsprüfung fehlgeschlagen (aufeinanderfolgende Telegramme enthalten nicht aufeinanderfolgende Uhrzeiten). Tritt bei schlechtem/gestörten Empfang auf.

Wenn die Uhrzeit angezeigt wird, kann der Status am Doppelpunkt abgelesen werden. Nach erfolgreichem Empfang ist er dauerhaft eingeschaltet, wird zwischen 3:00 und 3:15 keine gültige Zeit empfangen, blinkt der Doppelpunkt bis 3:00 des nächsten Tages, dann wird der Empfang erneut versucht. Während des Empfangs ist der Doppelpunkt abgeschaltet, stattdessen ist am Dezimalpunkt zwischen der zweiten und dritten Anzeigestelle das DCF77-Signal zu sehen.

Fotos

[Foto]
800 | 1600
Fertig aufgebaute Uhr, noch ohne DCF77-Empfänger (zum Einstellen der Zeit wurde der DCF77-Simulator verwendet).
[Foto]
800 | 1600
Lötseite der Platine. Hier sind nur die SMD-Kondensatoren zu sehen.