Shack-Uhr

Bei einer meiner Bauteil-Bestellungen fiel mir auf, daß LC-Displays mittlerweile recht preisgünstig zu erstehen sind. Und da ich mich schon bei mehreren meiner Projekte über die "mühsame Auswertung" irgendwelcher leuchtender/blinkender LEDs geärgert hatte, dachte ich mir, es wäre doch einmal nett, eine "lesbare" Anzeige zu haben, und bestellte mir ein einfaches LCD-Modul (2x16 Zeichen) mit. Nachdem das LCD-Modul einige Monate in meinen Bauteilkisten "vor sich hin gerostet" hatte, fiel es mir wieder in die Hände. Nach kurzem Studium des Datenblattes entschloß ich mich, ein paar PIC-Funktionen für dieses Modul zu schreiben, um das Display mit Hilfe eines PIC16F84 (und ggf. auch anderer Controller dieser Baureihe) ansteuern zu können. Damit konnte ich nun z.B. "Test" an verschiedenen Stellen des Displays erscheinen lassen, nur eine echte Anwendung fehlte mir noch.

Bei dem nächsten Versuch, die Ausbreitungsbedingungen auf 20m (mit Hilfe einer DCF77-synchronisierten Uhr und einer NCDXF-Bakenliste) zu prüfen, ärgerte ich mich (wieder einmal) über meine mittlerweile etwas "eingerosteten" Rechenkünste (war 15:52 UTC nun die erste, zweite oder dritte Minute des Bakendurchlaufs ?). Das wäre doch eine Anwendung für ein LC-Display! Naja, eine DCF77-Synchronisierung wäre schon notwendig, aber auch dafür gibt es ja entsprechende Empfangsmodule, die sich recht einfach an einen Microcontroller "anbinden" lassen. Während der Zeit, die die Bestellung/Lieferung eines solchen Moduls dauerte (-> es wird erst bestellt, wenn der "Wunschzettel" am Kühlschrank voll ist), beschäftigte ich mich mit der Codierung des DCF77-Signals und setzte mich daran, ein paar entsprechende PIC-Funktionen zu schreiben (was sich als "nicht gerade trivial" herausstellte). Als sich das DCF-Modul auf meinem Basteltisch eingefunden hatte, schloss ich es an mein Labornetzteil an und versorgte es mit 5V. Nur am Signalausgang des Moduls war (ausser bei Einschalten) keinerlei Signal (Sekundenimpulse) zu erkennen. Sollte das etwa mit dem Pegel am Steuereingang ("PON") zusammenhängen? Der Versuch, diesen Eingang ebenfalls auf 5V zu legen, führte zu einem Kurzschluß: Der Eingang war "brutal" mit GND verbunden, jedoch nicht an der Anschlußleiste (wo es ja erkennbar gewesen wäre), sondern "mitten in der Schaltung"! Ich trennte die entsprechende Leiterbahn auf, und versuchte mein Glück erneut -> keine Änderung. Also legte ich den Steuereingang wieder auf GND und versuchte, weitere Informationen aus dem (bestimmt nicht von/für Techniker erstellten) Datenblatt zu erhalten, was mir jedoch auch nicht weiterhalf. Als ich am Ende meiner Versuche (und meiner Weisheit) angekommen war, schaltete ich die Stromversorgung ab und begann, eine bitterböse Nachricht an den Hersteller zu verfassen. Doch was war das denn? Während sich der Siebkondensator langsam entlud, erschienen plötzlich die ersehnten Impulse! Der Spannungsbereich, in dem das Modul funktionierte, endete bei ca. 3V, anstatt (wie im Datenblatt angegeben) bei 5V. Ausserdem funktionierte das Modul bei einer hochohmigen Spannungsversorgung (> 10kOhm) deutlich besser??? Na gut, ich stellte mir lieber keine weiteren Fragen zu diesem seltsamen Empfänger, baute eine einfache Pufferstufe an den Ausgang und verschaltete die Konstruktion mit dem PIC, der das LC-Display steuerte.
 
Nachtrag (23.Dez.2008): Nicht nur ich hatte Probleme, mein DCF-Modul zum Funktionieren zu "überreden". Auch Manfred (DL5OAS) berichtete über "Startschwierigkeiten" mit seinem Modul (ein anderes als meins, auch von einem anderen Lieferanten). Ausser einem Pullup-Widerstand am Datenausgang benötigte sein Modul anscheinend etwas mehr Strom: R10 musste auf 100Ohm verringert werden. Also bitte nicht verzagen, wenn das DCF-Modul nicht auf Anhieb "mitspielt": Hier ist möglicherweise ein wenig Experimentieren angesagt...
 
Nachtrag (10.Dez.2016): Ronny (DK4RL) berichtete mir, daß sein Nachbau zwar "SH", "Si" und zeitweise auch "RX" anzeigt, sich aber nicht synchronisierte. Er verwendet ein DCF-Modul von Conrad (#641138), welches erst funktioniert, wenn es direkt an die 5V des Mikrocontrollers (Pin 14) angeschlossen wird, und einen Pullup-Widerstand von 10kOhm (zwischen der Basis von T1 und 5V) erhält (R10 entfällt in diesem Fall).

Ein einfaches Programm, welches die von meinen DCF77-Funktionen ermittelten Daten auf dem Display anzeigte, war bald erstellt und schien recht brauchbar zu funktionieren. Jedoch ist eine der "Grundvoraussetzungen" für eine Schack-Uhr, daß sie auch UTC anzeigen können muß. Auch dieser Programmteil war recht bald erstellt, in den PIC "gebrannt", und funktionierte zuverlässig. Aber nun ging es darum, die Rufzeichen der NCDXF-Baken (und deren Anzeige) noch mit in das Programm aufzunehmen. Hierbei musste ich feststellen, dass die Liste der Baken nicht in den EEPROM-Speicher (64 Byte) des verwendeten PIC16F84 passen würde. Die Verwendung eines PIC16F628 ("Nachfolger" des von mir verwendeten Controllers mit doppelt so großem Programm- und EEPROM-Speicher) wäre hier eine Lösungsmöglichkeit gewesen, jedoch hätte ich dafür meine Programmiersoftware ebenfalls umstellen/erweitern müssen. Also sah ich dieses Problem lieber als "sportliche Herausforderung", und modifizierte mein PIC-Programm so, daß nur die Suffixe der Baken in EEPROM abgelegt wurden, und die Präfixe "errechnet" wurden, denn im Programmspeicher des Chips war noch etwas Platz. Als es danach darum ging, zu berechnen, welche Bake zu welchem Zeitpunkt (zusammen mit der Bakenfrequenz) angezeigt werden sollte, musste ich schon recht tief "in die Trickkiste greifen", um auch diese Funktion noch in das Programm (bei knapp werdenden Programmspeicher) aufzunehmen. Nach dem Verzicht auf einige LCD-Funktionen, die ich nicht unbedingt brauchte, und dem Umschreiben der Funktion, die für die Anzeige des Wochentags zuständig war, passte mein Programm endlich in den PIC (sowohl der Programmspeicher mit 1024 Instruktionen, als auch das EEPROM werden vollständig genutzt). Leider passte die Funktion zum Ausblenden der Bake "KH6WO" auf den Frequenzen 18.110MHz und 24.930MHz (hier sendet diese Bake nicht) nicht mehr in den Speicher, aber ich glaube, mit diesem Manko "lässt sich leben".

Da ich bei meinem ersten Testaufbau feststellte, daß der DCF77-Empfang im Shack durch Halogen-Transformatoren, Niedervolt-Lötkolben und andere Geräte doch zeitweise erheblich gestört wurde, sah ich bei der Erstellung des Schaltplans mittels Eagle vor, den Empfänger bei Bedarf abgesetzt von der Uhr betreiben zu können. Die Verbindung zwischen Empfänger und Uhr erfolgt in diesem Fall mit Hilfe einer zweiadrigen, abgeschirmten Leitung und zweier Stereo-Klinkenstecker. Das Platinenlayout gestaltete ich so, daß die Leiterplatte mit dem PIC "kopfüber", d.h. mit den Bauteilen nach unten zeigend, mit Hilfe einer 16-poligen Steckleiste an der Oberkante des Displays montiert werden kann -> Ein direktes Verbinden von zwei im rechten Winkel aufeinandertreffenden Platinen mittels Verlötens von Kontaktflächen führt erfahrungsgemäss nach einiger Zeit zu Kontaktproblemen und Übergangswiderständen aufgrund der mechanischen Beanspruchung der Lötstellen. Für den Empfangsteil sind im Layout drei verschiedene Montagemöglichkeiten vorgesehen: 1. Auf der gleichen Platine wie der PIC (Leiterplatte bleibt bestehen, auf die Bestückung der beiden Klinkenbuchsen incl. der Induktivitäten und Zenerdioden kann verzichtet werden). 2. Abgesetzter Betrieb, wobei der Empfangsteil durch Schneiden der Platine abgetrennt, in einem separatem Gehäuse montiert, und mit Hilfe der beiden Klinkenbuchsen und eines entsprechenden Kabels mit der restlichen Schaltung verbunden wird. 3. Eine um 90 Grad abgewinkelte Montage, wobei die drei Verbindungen mit Hilfe von abgewinkelten Kontakten realisiert werden (auch hierbei ist die Bestückung der Klinkenbuchsen nicht notwendig). Für die beiden Taster am rechten Rand des Layouts sind ebenfalls mindestens zwei Montagemöglichkeiten vorgesehen: Entweder dieser Teil verbleibt auf der Hauptplatine und die Betätigung der Taster erfolgt von oben, oder dieser Teil wird abgetrennt und an der Seite des LC-Displays montiert, sodaß die Betätigung von vorne erfolgt. Die drei Verbindungen zu der Platine mit den Tastern wird in diesem Fall mit Hilfe von Litze vorgenommen. Je nach Bedarf kann die Bestückung der Taster sowohl von der Bestückungsseite als auch von der Lötseite vorgenommen werden. Die beiden Trimmpotentiometer in der Nähe des LCD-Moduls dienen der Einstellung der Helligkeit und des Kontrasts des Displays. Beim Bestücken der einseitigen Leiterplatte ist darauf zu achten, die eine (anscheinend bei meinen Konstuktionenen mittlerweile obligatorische) Drahtbrücke (über den Kontakten des Displays) nicht zu vergessen.

Beim Aufbau des Prototypen habe ich eine Variante gewählt, bei der sowohl der DCF77-Empfänger als auch die Tasten auf separaten Leiterplatten aufgebaut sind. Die elektrische Verbindung erfolgte mittels Steckverbindern zwischen den Modulen. Bei dieser Variante entstand ein recht kompakter "Elektronik-Klotz", der gut in ein Gehäuse vom Typ "Teko B3" (nicht sonderlich schön, war aber "griffbereit") passte. Die Spannungsversorgung erfolgte über eine Hohlsteckerbuchse, die an der Rückseite des Gehäuses montiert (und mit einer "Schusseldiode" versehen) ist. Zur Befestigung der gesamten Konstruktion im Gehäuse klebte ich vier Schrauben an die Rückseite der "Frontplatte", und fixierte so das LCD-Modul. Die beiden Schrauben an der rechten Seite dienen gleichzeitig zur Positionierung der Taster-Platine. Die Betätigung der beiden Kurzhubtaster erfolgt mit Hilfe zweier Messing-Stifte, die in (ebenfalls angeklebten) Kunststoffhülsen geführt werden. Damit die Betätigungsstifte nicht aus der Führung herausfallen können, sind diese an einem Ende etwas abgedreht und die Führungshülse am anderen Ende entsprechend aufgebohrt. Die komplizierteste Aktion bei der Herstellung des Prototypen war die Erzeugung des Gehäuse-Ausschnitts für das Display: Da das verwendete Aluminium relativ weich ist, hätten Arbeiten mit einer Feile mit hoher Wahrscheinlichkeit zur Verformung des Gehäuses geführt. Zum Aussägen mittels einer Laubsäge fehlte der (für exaktes Arbeiten notwendige) Platz im Innern des Gehäuses. Da ich aber weder über eine Fräsbank verfüge, noch bereit war, für einen zum Display passenden Kunststoffrahmen (der die ggf. auftretenden Ungenauigkeiten des Ausschnitts verdecken würde) einen höheren Preis zu zahlen, als für das Display selber, erzeugte ich den Ausschnitt (mühsam) mit Hilfe einer kleinen Trennscheibe und kaschierte die geringfügigen Unebenheiten durch einen dicken Anstrich mit schwarzer Acrylfarbe.
 
Nachtrag (6.Aug.2007): Wie ich mittlerweile festgestellt habe, bin ich nicht der Einzige (und auch nicht der Erste), der eine solch "spezielle" Uhr entwickelt hat. Die Uhr von Theo (DJ9PK) verwendet ein grösseres Display (2x40 Zeichen) und steckt in einem sehr eleganten Holzgehäuse.
 
Nachtrag (7.Mär.2008): Auch Theo (DJ9PK) war nicht untätig, und hat eine "Low-Cost"-Variante seiner Uhr entwickelt. Die neue Version hat ein Display mit 2x16 Zeichen und steckt in einem Kunststoffgehäuse.

Meine neue Shack-Uhr steht nun (weit genug entfernt von Transformatoren) zwischen den Transceivern und zeigt in der oberen Zeile die Uhrzeit, Zeitzone und den Decodierungs-Zustand des DCF77-Signals an. Mögliche Zustands-Werte sind:

SL: Das Eingangssignal ist immer "Low".

SH: Das Eingangssignal ist immer "High".

Si: Ein Eingangssignal (Sekundenimpulse) ist vorhanden.

Rx: Der "fehlende" (59.) Sekundenimpuls wurde erkannt, die Decodierung der empfangenen Datenbits erfolgt.

Ok: Die Daten wurden korrekt empfangen (-> Paritätsbits), die Uhr ist synchonisiert.

Die Zeitzone lässt sich mit Hilfe der oberen Taste zwischen der "offiziellen" Zeit (MEZ oder MESZ) und UTC umschalten. Die untere Taste dient zur Auswahl der Information, die in der unteren Zeile des Displays angezeigt wird. Hier gibt es folgende Möglichkeiten:

Wochentag und Datum.

Aktuell sendende NCDXF-Bake auf 14.100MHz.

Aktuell sendende NCDXF-Bake auf 18.110MHz.

Aktuell sendende NCDXF-Bake auf 21.150MHz.

Aktuell sendende NCDXF-Bake auf 24.930MHz.

Aktuell sendende NCDXF-Bake auf 28.200MHz.

Schaltplan im "Eagle"-Format.
Layout im "Eagle"-Format.
Quellcode des PIC-Programms.
Quellcode der PIC-Funktionen zur Ansteuerung eines Displays von Typ "LCD162C".
Quellcode der PIC-Funktionen zur Decodierung der Signales des DCF77-Moduls.
Quellcode der PIC-Funktionen zur Abfrage von einfachen Tasten.
Assembliertes PIC-Programm im "Intel-HEX"-Code.

Update/Bugfix (5.Aug.2007): Meine Shack-Uhr leistete mir seit über einem halben Jahr gute Dienste, bis ich entdecken musste, daß bei der Umschaltung zwischen offizieller Zeit und UTC das "Z" von "MESZ" nicht überschrieben wird (die Entwicklung und die Tests des Programms fanden während der Winterzeit statt, daher blieb dieser Fehler lange unentdeckt). Dieser Fehler ist nun (durch Verschieben einer Sprungmarke) behoben. Der Quellcode sowie der HEX-Code wurde entsprechend "updated".

Update/Bugfix (25.Dez.2007): Beim Vergleich der LCD-Funktionen auf dieser Seite und meiner "Arbeits"-Version fiel mir auf, daß ein Bugfix noch keinen Einzug in den hier verfügbaren Code gehalten hatte. Dieser Bug ist für das Projekt "Shack-Uhr" unkritisch (es werden nur neun ungenutzte Instruktionen zuviel erzeugt), könnte sich aber bei anderer Verwendung dieser Funktionen (bitte die Lizensierung beachten) auswirken.

Update (13.Okt.2008): Manfred (DL5OAS) hatte bei einem Nachbau (mit eigenem, mittels Sprint erzeugtem Layout) das Problem, daß das Display in der oberen Zeile nur dunkle Blöcke anzeigte und die untere Zeile leer blieb. Die Ursache dafür war, daß der PIC (z.B. bei relativ langsam ansteigender Versorgungsspannung) die Initialisierungssequenz an das Display sendete, bevor das Displaymodul dafür bereit war. Abhilfe schafft in diesem Fall die Vergrösserung von R6 und C5 (auf 10k bzw. 100nF). Dadurch bleibt das Resetsignal am PIC länger auf "low" und der PIC initialisiert das Display einige Millisekunden später.

Update (23.Dez.2008): Manfreds Uhr ist fertig und steckt im Gehäuse. Danke für die Bilder und die Erlaubnis, sie hier einzubinden. Damit existiert ein Nachweis, daß es möglich ist, mit den hier verfügbaren Informationen (und den entsprechenden "bastlerischen Fähigkeiten") diese Uhr nachzubauen (was bereits bezweifelt wurde).
 

Update (19.Mär.2012): Auch Gerhard (DL4ASJ) hat die Uhr (mit handgezeichnetem Layout) nachgebaut. Nach anfänglichen Schwierigkeiten bei der Programmierung des PIC (mit einem "Galep III" lässt sich anscheinend der EEPROM-Bereich nicht "brennen") läuft die Uhr nun auch bei ihm. Danke für die Bilder und die Erlaubnis, sie hier einbinden zu dürfen.
 

Update (5.Jul.2013): Dietmar (DL1JAN) hat die Uhr auf einer Universalplatine aufgebaut, und verwendet ein DCF-77-Modul aus einer Wetterstation aus dem Supermarkt (→ keine Versandkosten). Diese Konstruktion funktionierte auf Anhieb! Möglicherweise ist dieser Umstand dadurch begründet, daß Dietmar Erfahrungen mit Mikrocontrollerschaltungen hat, und die "Adaptierung" des DCF-77-Moduls auch für andere Projekte verwendet. Ein Gehäuse fehlt zwar noch, aber der Aufbau tut schon einmal seinen Dienst. Auch hier mein Dank für das Bild und die Erlaubnis, es hier veröffentlichen zu dürfen.

Update (1.Okt.2013): Nun hat auch Dietmars Uhr (nach ein paar Umbauten) eine geätzte Leiterplatte und ein Gehäuse bekommen.
 

Update (14.Dez.2016): Auch Ronny (DK4RL) hat seine Uhr nach einer kleinen Modifikation zur Adaptierung seines DCF77-Moduls (s.o.) zum Synchonisieren bekommen. Meinen Dank für die Beschreibung, wie ein weiteres DCF-Modul anzuschließen ist, und die Erlaubnis, das Bild hier einbinden zu dürfen

Update/Bugfix (12.Mär.2022): Ich habe einen Hinweis erhalten, daß die Assemblierung des Quellcodes mittels MPASM V5.50 (ggf. auch anderer Versionen) eine Fehlermeldung "IFs nested too deep" in den LCD-Funktionen erzeugt. Als Ursache dafür hat sich eine Limitierung dieses Assemblers bei der Verschachtelungstiefe bedingter Assemblierung herausgestellt. Da ich gpasm zur Assemblierung verwendet habe, ist mir dieser Umstand bisher nicht aufgefallen. Zur Behebung habe ich die bedingte Assemblierung in den LCD-Funktionen etwas modifiziert, was jedoch keinen Einfluß auf den (Hex-)Code für die Bakenuhr hat.

Hinweise für Nachbauwillige: Für den Bau dieser Uhr ist ein wenig Erfahrung mit der Herstellung einseitiger Leiterplatten und die Möglichkeit der Programmierung des Flash-ROMs von PICs erforderlich. Es handelt sich hierbei nicht um einen Bausatz, sondern eher um eine Anregung für eigene Konstruktionen (wie die hier vorgestellten Nachbauten belegen). Alles, was ich dazu anbieten kann, befindet sich auf dieser Seite, d.h. Nachfragen nach Bausätzen, fertigen Leiterplatten oder programmierten PIC-Controllern sind zwecklos -> Ich "produziere" ausschliesslich für den Eigenbedarf. Über Nachbauberichte würde ich mich freuen.

Hinweis für "Steckdosenamateure": Wer sich lieber ein Fertiggerät zulegen möchte, der sollte mal bei DJ9PK reinschauen.
Nachtrag (3.Jul.2013): Wie ich mittlerweile gesehen habe, bietet DJ9PK keine Fertiggeräte mehr an, aber Bausätze sind dort noch zu bekommen.
Nachtrag (14.Dez.2016): Wie ich erfahren habe, hat Theo mittlerweile auch all seine restlichen Bausätze verkauft...
Nachtrag (12.Mär.2022): Wie ich bemerkt habe, scheint Theo den Verkauf der Bakenuhren an DF1SD (Kuno) weitergegeben zu haben. Es könnte also wieder fertige Uhren geben ...

Für die Funktionalität und Nachbausicherheit dieses Gerätes kann ich keinerlei Verantwortung übernehmen. Eine kommerzielle Verwertung des Schaltplans, des Layouts, oder des PIC-Programms ist nur mit meiner ausdrücklichen Genehmigung zulässig. Die PIC-Funktionen zur Ansteuerung des LC-Displays, des DCF77-Moduls und der Tasten unterliegen der "GNU Public License".

Startseite  Hardware  Rechtliches  Kontakt  Darstellung

HTML und Design: DK1RM erstellt: 17.12.2006 ·letzte Änderung: 13.03.2022