GenuhR
[Firmware] |
|
Der eingesetzte Controller ist
vom Typ 80C32, die ROM-lose CMOS-Variante des legendären 8052 (Bild). Der
Controller verfügt über 256 Byte internen RAMs und kann je
nach Ausbaustufe bis zu 64KB externen Programmspeichers adressieren. In
der GenuhR kommt dafür ein 32K EPROM vom Typ 27C256 zum Einsatz.
Da für den Controller inzwischen eine Reihe brauchbarer C-Compiler
existieren, ist die Firmware auch komplett in C implementiert. Das hat
den Vorteil der einfacheren Lesbarkeit, der Code lässt sich
leichter warten und wiederverwenden und es erspart die doch recht
mühsame und zeitraubende Formulierung in Assembler oder
Maschinencode. Eingesetzt wurde hier der SDCC (sdcc.sourceforge.net),
ein Open-Source-C-Compiler, der aus der Entwicklung eines
Sourceforge-Projektes hervorgegangen ist. Da der Compiler ständig
weiterentwickelt wird, wurde die in diesem Projekt zum Einsatz kommende
Version (V2.5.4#1191) eingefroren und mit meinen Quelltexten abgelegt.
Die
Firmware gibt es als
Binärversion
(Intel-Hex-Format), die direkt mit jedem
gängigen EPROM-Brenner auf ein 32K EPROM gebracht werden kann. Auf
alle Einzelheiten der Firmware und deren genaue Funktionweise wird an
dieser Stelle nicht genauer eingegangen. Jedem, der interessiert ist,
werden die Quelltexte mitsamt Compiler
natürlich kostenfrei zur Verfügung gestellt. Dazu reicht
es, eine
EMail an "softwork@grasbon.de" schicken.
Stücke der Firmware, die den Schaltplan betreffen, werden jedoch kurz angesprochen. Dazu gehört als ersten einmal IC1 eine Resetlogik mit integriertem Watchdog. Der Watchdog-Timer muss ständig mittels Impulsen auf der /STB-Leitung zurückgesetzt werden. Bleibt ein Impuls auf /STB länger als 1,2 Sekunden (ca.) aus, führt IC1 einen Reset aus (RST- und /RST-Leitung). Damit sorgt IC1 dafür, dass sich der Controller stets in einem kontrollierten Zustand befindet. Dann ist da noch IC5, die Echtzeituhr. Sie wird durch die DCF-Uhr gestellt und sorgt dafür, dass bei Wegbleiben der Betriebsspannung die Uhrzeit weiterläuft (Gangreserve). Mit an Board des Echtzeituhr-Chips sind noch eine Reihe frei verfügbarer Speicherbytes, die von der Firmware zur Speicherung persistenter Daten wie z.B. die Weckzeiten eingesetzt werden. Wie lange die Gangreserve reicht, hängt von der Stromzufuhr an Pin 3 (VBAT) ab. Häufig wird der Uhrenchip mit einer 3V Lithiumzelle für mehrere Jahre am Leben gehalten. Das ist für die GenuhR jedoch nicht notwendig, da nach Wiederkehr der Betriebsspannung und bei korrektem Funkempfang Datum und Zeit nach spätestens zwei kompletten Minuten wieder verfügbar sind. Der hier eingesetzte Gold-Cap-Kondensator reicht immerhin dafür, mehrere "stromlose" Tage überbrücken zu können. Die Kommunikation mit dem Controller findet mittels I²C-Bus statt. Dieser von Phillips in den 80ern entwickelte universelle Datenbus ist gut durchdacht und findet sich quasi heute in jedem Gerät der Konsumelektronik wieder. Viele Chips stellen ihre Funktionalität über diesen Bus zur Verfügung. So auch der externe Thermosensor der GenuhR. Da es sich bei dem Name "I²C" um ein eingetragenes Warenzeichen handelt, wird der Bus bei anderen Herstellern auch unter der Bezeichnung "Two-Wire-Bus" geführt. Der 80C32 hat keine spezielle Hardwareunterstützung für I²C. Da die Hardwareanforderungen an die Buspegel aber extrem einfach sind (Pull-Ups R8 und R9), ist das Busprotokoll komplett in Software realisiert (Bit-Banging). Der 80C32 übenimmt dabei die Rolle des "Singel-Masters". Tiefergehende Informationen zum Thema I²C gibt es überall auf dem Netz. Ebenfalls sehr ergiebige Informationen finden sich auf dem Netz zum Thema Funkzeit. Der Hintergrund: Die offizielle deutsche Zeit wird von der Physikalisch-Technische Bundesanstalt in Braunschweig mit ihren Atomuhren festgelegt. Diese Zeitinformation wird dann über einen Langwellensender in der Nähe von Frankfurt a.M. (Rufzeichen DCF77) ausgestahlt. Überall im Empfangsgebiet, das sich auf bis zu 1500km im Umkreis des Senders erstreckt, können passende DCF77-Empfänger die übertragene Zeitinformation entgegen nehmen. Ein solcher Empfänger ist das hier eingesetzt DCF-Modul vom Typ BN 641138. Die Funkzeit beinhaltet neben der Zeit, auch den Wochentag und das Datum. Alle Informatonen werden innerhalb einer kompletten Minute mit einem Bit pro Sekunde übertragen. Das Signal, das vom DCF-Modul geliefert wird, ist das demodulierte Rohsignal. Das DCF77-Rohsignal definiert eine '0' durch einen 100ms-Pegel. Eine '1' wird durch einen 200ms-Puls dargestellt (Bild rechts). Dabei lässt das Kodierschema der Funkzeit die 59. Sekunde ausfallen (weder '0' noch '1'). Dieses ternäre Signal dient als Synchronisationsmarke, die den Beginn einer neuen Minute kennzeichnet. Danach wird in jeder Sekunden ein Bit der Funkzeitinformation übertragen. Die Daten sind nach folgendem Schema kodiert: |
|