GenuhR
[Firmware]

 





Firmware Binary
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. Kodierung DCFDas 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:

Zeitschema DCF
Die Paritätsbits ergänzen die betroffenen Bits auf eine gerade Anzahl an Einsen. Zeit und Datum sind BCD-kodiert, d.h. die aufsteigenden Bits haben die Wertigkeit 1,2,4,8,10,20, usw. Die innerhalb der Minute zusammengestellte Zeit gilt stets für die nachfolgende Minute. Übertragen wird das Signal per Leitung DCF an den Controller. Es ist möglich den Fortschritt der Dekodierung des Zeitsignals am Display mitzuverfolgen. Dazu muss er die Uhr neu starten, indem er im Einstellungsmenü der Firmware den Menüpunkt "Reset" aufruft (siehe Bedienungsanleitung).
zurück