Herzlich Willkommen auf der Homepage von Sven Jordan! Sonntag, 06. Oktober 2024, 04:05

Funkuhr

Das hier vorgestellte Programm-Modul beinhaltet das Dekodieren des DCF77-Funkuhr-Signals, inklusive Plausibilitätsprüfung der empfangenen Daten. Es wurde auf das DCF77-Empfänger-Modul, Bestellnummer "DCF77 MODUL" von Reichelt Elektronik zugeschnitten, das direkt an 5 Volt betrieben wird und die empfangenen DCF77-Impulse als TTL-Pegel ausgibt. Der Ausgang des Empfängers kann an einen beliebigen digitalen I/O-Pin des ATmega32 angeschlossen werden.

Download

Download: funkuhr.h (C-Header-Datei)

Versions-Verlauf

Version 1.0: Initiale Version

Funktionen

Voraussetzungen

Dieses Programm-Modul beinhaltet auch eine Funktion zum Anzeigen von Datum und Uhrzeit. Deshalb ist wird zusätzlich das Modul zur Display-Ansteuerung benötigt.

Datenstruktur der Zeitinformationen

Die Funktionen zum Empfangen und zum Anzeigen der Funk-Uhrzeit verwenden eine Struktur (vom Typ "zeit"), die global deklariert wird. Diese Struktur enthält sämtliche relevanten Informationen. Sie enthält folgende Elemente:

  • unsigned char second
    Aktuelle Sekunde (0 ... 59)
  • unsigned char minute
    Aktuelle Minute (0 ... 59)
  • unsigned char hour
    Aktuelle Stunde (0 ... 23)
  • unsigned char day
    Aktueller Wochentag (1 = Montag ... 7 = Sonntag)
  • unsigned char date
    Aktueller Tag des Monats (1 ... 31)
  • unsigned char month
    Aktueller Monat (1 = Januar ... 12 = Dezember)
  • unsigned char year
    Aktuelles Jahr, zweistellig (0 ... 99)
  • unsigned char MESZ
    Zeigt an, ob die aktuelle Zeit Sommer- oder Winterzeit ist (0 = MEZ, 1 = MESZ, 2 = Unbekannt)
  • unsigned char zeitumstellung
    Dieses Element hat den Wert 1, wenn am Ende der laufenden Stunde die Zeit von MEZ auf MESZ oder umgekehrt umgestellt wird
  • unsigned char RX_OK
    Dieses Element hat den Wert 1, wenn die letzte empfangene Zeitinformation plausibel ist und übernommen wurde

Funkuhr-Funktion

Datentyp der Funktion: struct zeit funkuhr(unsigned char eingangsport, unsigned char eingangsbit)
Diese Funktion erwartet als Argumente die Information, wo der DCF77-Empfänger angeschlossen ist. Das erste Argument bestimmt den verwendeten Port ('A', 'B', 'C' oder 'D'). Das zweite Argument bestimmt das Bit des entsprechenden Ports (0 ... 7). Die Funktion muss zyklisch alle 10 Millisekunden aufgerufen werden. Dabei wird eine vom DCF77-Signal unabhängige Uhr inkrementiert. Weiterhin wird der Eingang, an dem der DCF77-Empfänger angeschlossen ist, abgetastet. Die empfangenen Zeitinformationen werden in den Zeitpuffer übernommen, wenn zwei aufeinander folgende Telegramme sich nur in einer Minute unterscheiden, oder wenn das letzte empfangene Telegramm nur um eine Minute vom Zeitpuffer abweicht. Nach dem Starten des Empfangs dauert es also mindestens 2 Minuten und bei gutem Empfang höchstens 3 Minuten, bis erstmals eine (auf Plausibilität geprüfte) Zeit zur Verfügung steht. Als Rückgabewert liefert die Funktion die oben beschriebene Datenstruktur mit den empfangenen Zeitinformationen bzw. dem internen Zeitpuffer.

Anzeigefunktion

Datentyp der Funktion: void print_time(struct zeit uhrzeit)
Diese Funktion erwartet die anzuzeigenden Zeitinformationen, die in einer wie oben beschriebenen Struktur verpackt sein müssen. Die Ausgabe erscheint auf dem LC-Display in einer Zeile mit 20 Zeichen mit folgender Formatierung: "DD TT.MM.JJ HH:MM:SS". (DD = Wochentag, TT = Tag des Monats, MM = Monat, JJ = Jahr, HH = Stunde, MM = Minute, SS = Sekunde).
© Sven Jordan Letzte Änderung: 01.10.2019, 08:16 1 Aufruf heute Druckansicht beenden