Hallo zusammen,
möchte Euch heute ein weiteres spannendes Thema vorstellen. Nämlich den DCF77 Funkuhrempfang mit einem ATmega128 sowie die Unterstützung einer Real-Time-Clock DS1307 unter BASCOM.
Dazu ist vorab zu sagen, das BASCOM einem die Arbeit durch die vorhandene Bibliothek weitgehend abnimmt. Das ganze besteht in BASCOM im wesentlichen aus dem CONFIG DCF77 Statement. Dahinter verbirgt sich die komplette Abtastung des DCF77 Funkuhrsignals, eine komplette SoftClock mit automatischer Synchronisation und die Generierung eines Sekundentakts. Total genial, einfach und simpel.
Zum Einsatz kommt das DCF77 Funkuhrmodul der Firma Conrad. Es hat sich bzgl. der Empfangsqualität bestens bewährt. Darüber hinaus bietet es einen invertierten und einen nicht-invertierten Ausgang.
Zur Signalaufbereitung fahre ich in meinem Beispiel noch über einen NAND-Schmitt-Trigger. Das gefällt dem ATmega ganz gut
Hintergrund:
Ich suchte nach einer Lösung eine SoftClock via DCF77 zu synchronisieren. Bei erfolgter Synchronisation werden die Zeit und Datumsinformationen in der RTC DS1307 abgelegt die mit einer Stützbatterie gepuffert ist.
Auf diesem Weg ist es möglich - falls man gerade keinen DCF77 Empfang hat - oder bei Systemstart gleich mit realen Zeitwerten aus der RTC zu starten.
Außerdem kann man zur Entlastung des Systems die DCF77 so konfigurieren, das man nur jede Stunde oder einem in 24 Stunden neu synchronisiert. Die restliche Zeit holt man sich ggf. die Zeitwerte aus der RTC.
Der Code und die Zeitauswertung ist von mir bewußt so realisiert, das ich grundsätzlich auf den Variablen der SoftClock arbeite.
Ressourcen:
Eigentlich werden nur der Timer 1 und ein beliebiger Eingangspin als Ressourcen zum Betrieb benötigt.
Möchte man den RTC noch verwenden so benötigt man für das HW TWI-Interface die freien PINs für SCL und SDA.
Mittels SW TWI-Interface kann man zwei beliebige PINs verwenden.
Also, was gibts zu sehen:
- Beispielcode für die DCF77 Anbindung unter BASCOM
- Beispielcode für die Anbindung der RTC DS1307 an den ATmega über TWI-Interface
- Schaltbild für die Anbindung der DCF77 von Conrad
- Schaltbild für die Anbindung der RTC
- Bilder der Prototypen
In Betrieb genommen habe ich das ganze mit dem STK500 und STK501 mit einem ATmega128 16Mhz extern.
Zur Funktion:
Die Routinen für DCF77 und RTC sind wie üblich in ausreichend kommentiertem Code und Test-/Beispielsequenzen eingepackt.
Bei Systemstart wird die SoftClock einmalig mit den aktuellen Zeitwerten der RTC geladen.
Die DCF77 Routinen beginnen sofort mit ihrer Arbeit und dem Dekodieren des Zeitsignals. Das meiste davon übernimmt die DCF77 Lib von BASCOM. Denkbar einfach also.
Wenn die Zeit- und Datumsinformationen ganzheitlich empfangen wurden und BASCOM die eigene SoftClock synchronisiert (Auswertung eines Sync-Bits) wird auch die RTC gestellt.
Darüber hinaus gibt es in der Konfiguration noch eine "CallBack-Routine" welche sectic heißt und welche pro Sekunde durch die SoftClock einmal aufgerufen wird. Mit dieser Routine ist es möglich einen Sekunden-Systemtakt zu erzeugen oder Ausgaben zu machen oder einen einfache Time-Scheduler für bestimmte Aufgaben aufzuziehen. Der Fantasie sind hier keine Grenzen gesetzt.
Zur LCD-Ausgabe:
Neben den Zeit- und Datumsinformationen gebe ich auf dem LCD-Display noch den binären dcf_status und die dcf_bits aus. Damit kann man ganz gut die Funktion überrüfen.
Mit einem Stern kennzeichne ich den Zeitpunkt zu dem erstmalig gesynct wird und mit einem Zähler (unter dem Stern) gebe ich die Anzahl der von Systemstart an erfolgten Synchronisationen an.
Ist ein ziemlich spannendes Thema. Schaut es Euch einfach mal an, probiert es aus und wenn es Fragen gibt dann meldet Euch!
Grüße,
Markus
möchte Euch heute ein weiteres spannendes Thema vorstellen. Nämlich den DCF77 Funkuhrempfang mit einem ATmega128 sowie die Unterstützung einer Real-Time-Clock DS1307 unter BASCOM.
Dazu ist vorab zu sagen, das BASCOM einem die Arbeit durch die vorhandene Bibliothek weitgehend abnimmt. Das ganze besteht in BASCOM im wesentlichen aus dem CONFIG DCF77 Statement. Dahinter verbirgt sich die komplette Abtastung des DCF77 Funkuhrsignals, eine komplette SoftClock mit automatischer Synchronisation und die Generierung eines Sekundentakts. Total genial, einfach und simpel.
Zum Einsatz kommt das DCF77 Funkuhrmodul der Firma Conrad. Es hat sich bzgl. der Empfangsqualität bestens bewährt. Darüber hinaus bietet es einen invertierten und einen nicht-invertierten Ausgang.
Zur Signalaufbereitung fahre ich in meinem Beispiel noch über einen NAND-Schmitt-Trigger. Das gefällt dem ATmega ganz gut
Hintergrund:
Ich suchte nach einer Lösung eine SoftClock via DCF77 zu synchronisieren. Bei erfolgter Synchronisation werden die Zeit und Datumsinformationen in der RTC DS1307 abgelegt die mit einer Stützbatterie gepuffert ist.
Auf diesem Weg ist es möglich - falls man gerade keinen DCF77 Empfang hat - oder bei Systemstart gleich mit realen Zeitwerten aus der RTC zu starten.
Außerdem kann man zur Entlastung des Systems die DCF77 so konfigurieren, das man nur jede Stunde oder einem in 24 Stunden neu synchronisiert. Die restliche Zeit holt man sich ggf. die Zeitwerte aus der RTC.
Der Code und die Zeitauswertung ist von mir bewußt so realisiert, das ich grundsätzlich auf den Variablen der SoftClock arbeite.
Ressourcen:
Eigentlich werden nur der Timer 1 und ein beliebiger Eingangspin als Ressourcen zum Betrieb benötigt.
Möchte man den RTC noch verwenden so benötigt man für das HW TWI-Interface die freien PINs für SCL und SDA.
Mittels SW TWI-Interface kann man zwei beliebige PINs verwenden.
Also, was gibts zu sehen:
- Beispielcode für die DCF77 Anbindung unter BASCOM
- Beispielcode für die Anbindung der RTC DS1307 an den ATmega über TWI-Interface
- Schaltbild für die Anbindung der DCF77 von Conrad
- Schaltbild für die Anbindung der RTC
- Bilder der Prototypen
In Betrieb genommen habe ich das ganze mit dem STK500 und STK501 mit einem ATmega128 16Mhz extern.
Zur Funktion:
Die Routinen für DCF77 und RTC sind wie üblich in ausreichend kommentiertem Code und Test-/Beispielsequenzen eingepackt.
Bei Systemstart wird die SoftClock einmalig mit den aktuellen Zeitwerten der RTC geladen.
Die DCF77 Routinen beginnen sofort mit ihrer Arbeit und dem Dekodieren des Zeitsignals. Das meiste davon übernimmt die DCF77 Lib von BASCOM. Denkbar einfach also.
Wenn die Zeit- und Datumsinformationen ganzheitlich empfangen wurden und BASCOM die eigene SoftClock synchronisiert (Auswertung eines Sync-Bits) wird auch die RTC gestellt.
Darüber hinaus gibt es in der Konfiguration noch eine "CallBack-Routine" welche sectic heißt und welche pro Sekunde durch die SoftClock einmal aufgerufen wird. Mit dieser Routine ist es möglich einen Sekunden-Systemtakt zu erzeugen oder Ausgaben zu machen oder einen einfache Time-Scheduler für bestimmte Aufgaben aufzuziehen. Der Fantasie sind hier keine Grenzen gesetzt.
Zur LCD-Ausgabe:
Neben den Zeit- und Datumsinformationen gebe ich auf dem LCD-Display noch den binären dcf_status und die dcf_bits aus. Damit kann man ganz gut die Funktion überrüfen.
Mit einem Stern kennzeichne ich den Zeitpunkt zu dem erstmalig gesynct wird und mit einem Zähler (unter dem Stern) gebe ich die Anzahl der von Systemstart an erfolgten Synchronisationen an.
Ist ein ziemlich spannendes Thema. Schaut es Euch einfach mal an, probiert es aus und wenn es Fragen gibt dann meldet Euch!
Grüße,
Markus