DCF (Dekodierung mit PIC-Mikrocontroller, Elektronik)


zurück zu Elektronik, Homepage


4. Demonstrationsbeispiel:

Das folgende Beispiel dient nur zur Demonstration der DCF-Auswertesoftware. Sie zeigt eine mögliche Einbindung der im Abschnitt 3. Software besprochenen Unterprogramme.

nach oben

4.1. Hardware

Der Schaltplan befindet sich, so wie die Software im Abschnitt 5. Download.

Die Hardware dieses Demonstrationsbeispiels besteht aus einem Mikrocontroller (IC1) vom Typ PIC16F628, der im Abschnitt 2. Hardware besprochenen Anpass-Schaltung, einer Takterzeugung bestehend aus einem 4,096-MHz-Quarz (X1), zwei Kondensatoren (C3, C4) und einem Widerstand (R4) und 12 Leuchtdioden (D2 bis D13) mit je einem Vorwiderstand (R5 bis R16)

Als "Reset-Quelle" wird der interne RESET verwendet, so dass der Pin 4 (MCLR/RA5) als zusätzlicher Portpin genutzt werden kann. Dieser kann jedoch nur als Eingangspin verwendet werden. Hier wird er als DCF-Eingang verwendet.

Zur Stromversorgung gibt es nicht viel zu sagen. Ein Festspannungsregler (IC2) vom Typ 78L05 übernimmt mit den Kondensatoren C5 und C6 die Spannungsregelung. Als Spannungsquelle dient beispielsweise ein unstabilisiertes 9-V-Steckernetzteil. Bei gestecktem Jumper JP2 dient die Leuchtdiode D15 als Spannungskontrolle. Dieser Jumper sollte allerdings nicht dauerhaft gesteckt werden, da dadurch die Spannungs- quelle unnötig zusätzlich belastet wird. Die Diode D14 dient hier als Verpolungsschutz.

nach oben

4.2. Anmerkungen zur Software

Die Software zum Demonstrationsbeispiel befindet sich im Download- Bereich auf dieser Seite

Die Software besteht im wesentlichen aus einem kurzen Hauptprogramm, einer kurzen Interrupt-Service-Routine (kurz ISR), die im Abschnitt 3.4. Software besprochenen Unterprogramme zur DCF-Dekodierung, ein Unterprogramm zur Ausgabe der Uhrzeit (ANZEIGE) und zwei Unterprogramme, welche eine binäre Zahl in BCD-Form umwandeln bzw. eine BCD-Zahl in die binäre Form.

Die ISR wird alle 4ms aufgerufen und besitzt "nur" die Aufgabe zwei Zeitbasen zu erzeugen, indem sie zwei Botschaftsflags für das Hauptprogramm erzeugt. Eine Zeitbasis alle 4ms und die zweite Zeitbasis jede Sekunde. Da die ISR alle 4ms aufgerufen wird ist die 4-ms-Zeitbasis besonders einfach. Es muss nur bei jedem Aufruf ein Flag gesetzt werden, und zwar das Flag FLAG4MSEK im Register FLAGSISRHP. Die Generierung für die 1-Sekunden-Zeitbasis ist dagegen schon etwas "umfangreicher". Damit eine Zeit von einer Sekunde entsteht, muss die ISR 250-mal aufgerufen werden (250 x 4ms = 1000ms = 1 Sekunde). Bei jedem ISR-Aufruf muss also ein Zählregister um 1 vermindert werden. Besitzt es danach den Wert 0, so ist eine Sekunde vergangen. Nun wird das Botschaftsflag FLAG1SEK im Register FLAGSISRHP gesetzt, und das Zählregister muss mit dem Wert 250 neu geladen werden. Der Wert 250 wird hier durch die Konstante KONSTISR1SEK ersetzt.

Die ISR wird, wie schon mehrmals erwähnt, alle 4ms aufgerufen Diese 4ms ergeben sich folgendermaßen: TMR0 wird mit dem Wert 0 geladen es dauert also 256 Taktzyklen bis das Register wieder den Wert 0 besitzt, der Vorteiler besitzt den Wert 16 (vgl. Abschnitt 3.3. Initialisierung (Unterprogramm "INIT"). Der Taktzyklus ergibt sich aus dem verwendeten Quarz (X1). Dieser ist bei der PIC-Familie wie folgt definiert:

                              4
                        -------------
                        Quarzfrequenz

Daraus ergibt sich folgender Zusammenhang:

                            4 x 256 x 16       4 x 256 x 16
        ISRAUFRUF [s] = ------------------- = ------------ = 4000
                         Quarzfrequenz [MHz]       4,096

Also ein ISR-Aufruf alle 4000µs, was gleichbedeutend mit 4ms ist.

Das Hauptprogramm befindet sich nach der Initialisierung (Unterprogramm INIT) und der Interruptfreigabe in einer Endlosschleife. Diese Schleife besitzt die Aufgabe ständig die so genannten Botschaftsflags abzufragen. Ist eines dieser Botschaftsflags gesetzt, so muss vom Hauptprogramm eine bestimmte Aufgabe ausgeführt werden. Diese Aufgaben sind in Form von Unterprogrammen vorhanden. Zwei dieser Botschaftsflags werden in der Timer-ISR gesetzt. Und zwar wird alle 4ms ein Flag gesetzt. Das zweite Flag von der ISR wird jede Sekunde gesetzt.

Hier Zusammenfassend die Tätigkeiten in der Endlosschleife, welche durch die Botschaftsflags ausgelöst werden:

Das Unterprogramm INIT dient zur Initialisierung des Controller. Hier werden unter anderem die Ports konfiguriert (Port dient als Eingang oder als Ausgang), der oder die Timer eingestellt usw. Dieses Unterprogramm ist vom Controllertyp abhängig und je nach Anwendung mehr oder weniger umfangreich. Hier muss zusätzlich der Startzustand des DCF-Eingangs eingelesen werden.

Das Unterprogramme ANZEIGE dient nur zur Ausgabe der Uhrzeit (hier der Stunden und Minuten) an den Ports. Die Aufgabe dieses Unterprogramms besteht darin die in den Registern UHRSTUNDE und UHRMINUTE enthaltene Uhrzeit an die Hardware anzupassen.

nach oben


zurück zu Elektronik, Homepage

Autor: Buchgeher Stefan
Erstellt: 9. Dezember 2003
Letzte Änderung: 10. Oktober 2004