Der Schaltplan
Dem folgenden Schaltplan ist natürlich vorläufig und eher als Skizze zu verstehen.
Die genaue Belegung der Pins ist auch nicht sonderlich interessant,
da die Ports des Micro-Controllers (MC) frei programmierbar sind.
Etwas Schaltungsaufwand verursacht lediglich der
Wecker.
Die Komponenten
- Micro-Controller
- Als MC verwende ich einen Atmel 89C2051.
Er ist klein (DIL20),
preiswert (weniger als 4 €),
verfügt über 2 kByte Flash-Eprom
und 128 Bytes RAM.
Er hat 15 frei programmierbare I/O-Ports, einen Analog-Komparator,
zwei externe Interupts, zwei Timer, und einen seriellen UART.
Der Assembler geht einem in wenigen Tagen in Fleisch und Blut über.
- Spannungsversorgung (VCC, GND)
- Die Spannungsversorgung VCC von 5 V= übernimmt ein primärgetaktetes Stecker-Netzteil von egston.
Das ist zwar teurer als ein normales Netzteil, aber kleiner, effizienter und leiser.
- Reset (RST)
- Nach dem Einschalten der Spannungsversorgung wird ein kurzes
Reset-Signal erzeugt, um den MC in einen definierten Anfangszustand zu bringen.
- DCF-Modul (INT0, INT1)
- An den externen Interupts INT0, INT1 schliesse ich ein DCF-Empfänger-Modul,
um immer die exakte Uhrzeit zu haben. Das DCF-Signal wird in
Mainflingen bei Frankfurt ausgestrahlt und wird in einem Umkreis von ca 1000km um den
Sender empfangen. Die Übertragungsrate ist 1 Bit pro Sekunde.
- Quarz und Takterzeugung (XTAL4, XTAL5)
- Den Takt für den MC erzeuge ich mit einem 18 MHz Quarz.
Die Frequenz sollte möglichst hoch (max. 24 MHz) und durch 12 teilbar sein.
Ich habe einen 18 MHz Quarz gewählt, denn das ist der billigste,
die Frequenz genügt vollauf, und die Verlustleistung ist geringer als mit 24 MHz.
Die Forderung nach einer durch 12 teilbaren Frequenz rührt daher,
daß bei Ausfall oder Nichtanschluss des DCF-Moduls der Quarz als Zeitbasis
herangezogen wird und
ein Maschinenzyklus des MC 12 Takte dauert.
- Wecker & Eieruhr (Ports 3.4, 3.7, AIN1 [, AIN0])
- Als Wecker/Eieruhr verwende ich ein Klangspiel, daß ich mir vor einigen Jahren
gebaut habe. Es hat einen wunderschönen Klang.
...wenn man morgens schon geweckt wird, dann bitte mit Gefühl!
Die Komponenten zur Ansteuerung des Klangspiels nehmen am meisten Platz weg und
belegen den ganzen unteren Teil des Schaltplanes.
Eine ausführliche Funktionsbeschreibung findest du
unter "Wecker".
Die dort verwendeten Bezeichnungen der Signale sind wie folgt zugeordnet:
MC_3kHz | Port 3.7 |
MC_Charged | Port AIN1 |
MC_Alarm | Port 3.4 |
- Eingabe (Ports 1.2-1.5)
- Die Eingabe erfolgt über vier kleine, unauffällig angebrachte Drucktaster:
Weckzeit stellen, Wecker aktivieren/deaktivieren, Eieruhr stellen,
Status abfragen (hat das DCF-Modul Empfang oder läuft die Uhr auf Quarz?),
Uhrzeit einstellen (falls kein DCF-Modul angeschlossen ist), etc.
Die Möglichkeiten der Taster werden erweitert durch das Unterscheiden von
langen oder kurzen Tastendrucken. Entprellt müssen die Taster nicht werden,
das macht alles die Software des MCs.
- Rückmeldung beim Bedienen (Port 3.5)
- Die Bedienung der Uhr ist intern über eine Menue-Struktur realisiert.
Um beim Bedienen nicht die Orientierung zu verlieren, wo ich mich gerade im
Menue befinde, gibt mir die Uhr über einen Mini-Lautsprecher
Rückmeldung in Form von Morse-Zeichen.
Hab ich beim Bund gelernt und kann's immer noch ganz gut *grins*.
Alternative zur akustischen Morse-Rückmeldung wären popelige 7-Segment-Anzeigen
gewesen. Die sind teurer, komplizierter anzusteuern, größer, können weniger darstellen,
und sind wie gesagt - popelig.
- Anzeige (Ports 3.0, 1.6, 1.7)
- Der Anschluß für die Anzeige hat 5 Pins (unten mehr dazu):
- VCC und GND
- Die Spannungsversorgung für die gesamte Anzeige (ICs und LEDs).
- SER
- Port 3.0. Serielle Daten-Bits für die Anzeige. (40 Stück, 39 werden benötigt.)
- SCK
- Port 1.7. Serieller Takt: Mit jedem Takt-Puls an SCK wird ein weiteres Bit von SER in die Anzeige-Einheit geschoben.
- RCK
- Port 1.6. Latch-Takt: Sind alle 40 Bits im Anzeige-Modul gelandet, überträgt ein Strobe an RCK die
Daten ins Ausgabe-Latch. (Damit die Anzeige während des Schiebens nicht kurz aufleuchtet.)
- Anschlüsse
- Die Haupt- und die zwei Anzeigeplatinen sind recht klein und schmal (3cm breit),
damit sie in die lange, schmale Uhr hinein passen. Deshalb sind einige Bauteile nicht
auf diesen Platinen angeordnet, sondern es sind nur Steckverbinder für sie
vorgesehen, um sie im Gehäuse unterbringen zu können.
JP_SUPPLY | Anschluss der Spannungversorgung. |
JP_DCF | Anschluss für das DCF-Modul. |
JP_TAST | Anschluss für die 4 Drucktaster. |
JP_LED | Anschluss für die Anzeige. |
JP_SPEAK | Anschluss für den Miniatur-Lautstpecher (8Ω, 20mm × 39mm) |
JP_C JP_DROSSEL JP_ANKER | Die grossen Bauteile für den Wecker. |
Was noch fehlt ist natürlich die Anzeige. Sie wird gebildet durch 39 kleine,
gelbe Low-Current LEDs (3 mm, 2 mA).
Die benötigten Vorwiderstände von 1.1 kΩ habe ich direkt in die Gehäuse der LEDs eingelötet,
um den Schaltplan zu entlasten.
Das vom MC erzeugte Zeitsignal konvertiere ich in ein serielles Format.
Der MC schiebt jede Sekunde einmal das komplette Zeitsignal in die Anzeige.
Auf dem Schaltplan für die Anzeige erkennt man drei 74595 (IC1 - IC3).
Der 74595 ist ein serielles Schieberegister mit 8 Bit paralleler Ausgabe
und Ausgabe-Latch.
Mit jedem 74595 können also 8 Bits dargestellt bzw. LEDs angesteuert werden (QA-QH).
Bei jedem Puls am seriellen Takt SCK werden die Bits um eine Position weiter geschoben
und das Bit am seriellen Eingang SER in das Schieberegister aufgenommen.
Das Bit erscheint nach 8 Takten wieder unverändert am Ausgang QH* und gelangt so zum
Eingang SER des nächsten IC.
Sind alle Bits an ihrer Position angelangt,
dann überträgt ein Puls an RCK die Daten von den Schieberegistern in die Ausgabe-Latches.
Erst hierdurch gelangen die Bits an die Ausgänge QA-QH
und die Anzeige zeigt die neue Zeit an.
Das vermeidet ein kurzes Aufflackern während dem Durchschieben der Bits.
Das Aufflackern (zB bei Verwendung eines 74164) dauert zwar nur wenige Millisekunden,
es wird vom menschlichen Auge aber durchaus wahrgenommen.
Um alle 39 LEDs ansteuern zu können, werden 2 der obigen Module hintereinander
gehängt. JP_IN des zweiten Anzeige-Moduls wird also mit JP_OUT des Ersten
verbunden und fertig. Im zweiten Modul kann der Sockel von IC3 leer bleiben.
|