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