Eine digitale Casio Uhr an einem Handgelenk.

Wie kommt die Zeit in meine Uhr?


Inhalt

  1. Eine neue Uhr
  2. Der DCF77
    1. Das Zeitsignal
    2. Der Time Code
    3. Das Paritätsbit
  3. Signal empfangen
  4. Daten auslesen
    1. Metainformationen
    2. Minuten
    3. Stunden
    4. Kalendertag
    5. Wochentag
    6. Monat
    7. Jahr
    8. Gesamtergebnis
  5. Optimierungspotential
  6. Meine Gedanken

Eine neue Uhr

Vor kurzem habe ich mir eine neue Uhr gekauft. Genauer gesagt eine Casio G-Shock GW-M5610U-1ER . Hauptsächlich deshalb, weil ich im Laufe des Tages immer sehr stark von meiner Smartwatch abgelenkt wurde. Deshalb beschloss ich, eine normale Uhr zu kaufen, die aber trotzdem praktisch für mich ist. Und die Casio bot alle Features, die ich brauchte. Vor allem ist sie per Solar aufladbar. Als jemand, der häufig mit einer leeren Smartwatch am Handgelenk herumlief, weil er abends mal wieder vergessen hatte, seine Uhr aufzuladen, ist das sehr hilfreiche. Dazu kommt, dass ich diese 90s Retro Ästhetik der Casio Uhren liebe.

Nach dem Kauf weckte eine Besonderheit an dieser neuen Uhr mein Interesse. Sie wurde groß mit Multi Band 6 beworben. Mir sagte das aber gar nichts. Also schaute ich nach und fand heraus, dass Casio damit den Funkempfang ihrer Uhren meint. Weltweit werden 6 große Funksender unterstützt. Unter anderem in Nordamerika, Japan, China und eben auch bei uns in der EU. Dort gibt es sogar zwei: Eine Station in Anthorn in Großbritannien und eine Station bei uns in Deutschland in Mainflingen (Nähe Frankfurt). Dieser Radio Zeitsender wird kurz auch DCF77 genannt. Wie nun die Zeit vom Radiosender in meine Uhr kommt, möchte ich im Folgenden näher betrachten.

Der DCF77

Der DCF77 ist ein Sender, der von der Physikalisch-Technischen Bundesanstalt (PTB) betrieben wird und schon seit 1973 für das Senden der Zeitinformationen genutzt. Der Name DCF77 bildet sich aus D für Deutschland, C für die Kennzeichnung eines Langwellensenders und F für die Nähe zu Frankfurt. Die 77 kommt daher, dass der Sender seine Informationen auf einer Frequenz von 77,5kHz aussendet.

Das Zeitsignal

Das ausgesendete Zeitsignal wird binär ausgesendet. Dazu wird im Sekundentakt das Signal für einen kurzen Moment auf etwa 15% Stärke abgesenkt. Entscheidend ist dabei die Dauer der Absenkung. Für eine binäre 0 wird es etwa 100ms abgesenkt, für eine binäre 1 sind es 200ms. So ergeben sich pro Minute 59 Bit an Informationen. Weshalb nicht 60? Weil bei der letzten Sekunde einer jeden Minute auf eine Absenkung des Signals verzichtet wird. So lässt sich eindeutig erkennen, wann eine neue Minute beginnt und auch wann der binäre Datenstrom für die nächste Minute startet.

Der Time Code

Innerhalb der 59 Bit werden die Zeitinformationen immer nach einem bestimmten Schema codiert. Auf der Seite der PTB findet sich folgende visuelle Darstellung des Time Codes. Eine visuelle Darstellung des Time Codes des DCF77

Der Time Code beginnt immer mit folgenden Metainformationen:

  • Bit 0 ist immer 0. Es kennzeichnet den Start einer neuen Minute
  • Bit 1-14 sind nicht Teil der Zeitinformationen. Sie werden von der Firma Meteotime genutzt, um verschlüsselte Wetterinformationen zu senden
  • Bit 15 ist das sogenannte “Rufbit” und dient der PTB als Alarmierung der Mitarbeiter, falls Unregelmäßigkeiten im Betrieb auftreten
  • Bit 16 kündigt eine Umstellung von Winter- auf Sommerzeit und umgekehrt an. Dieses wird eine Stunde lang vor der Umstellung minütlich ausgesendet.
  • Bit 17-18 Bit codiert die aktuelle Zeitzone. 01 für Winterzeit (CET) und 10 für Sommerzeit (CEST).
  • Bit 19 kündigt eine Schaltsekunde an. Genau wie bei dem Bit für die Zeitumstellung, wird dieses eine Stunde lang vor der Umstellung minütlich ausgesendet.
  • Bit 20 ist immer 1 und kennzeichnet den Start der folgenden Zeitinformationen

Die Zeitinformationen werden als sogenannte Binary-Coded-Decimals (BCD) gesendet. Das heißt, dass jede Dezimalstelle einzeln mithilfe der Bits dargestellt wird. Für die Zahlen von 0-9 werden insgesamt 4 Bits benötigt. Die stehen jeweils für 1 2 4 8. Theoretisch sind innerhalb dieser Bits die Zahlen von 0-15 möglich, jedoch werden nicht alle verwendet.

Das BCD System ist eigentlich etwas antiquiert, vor allem, weil es sehr verschwenderisch ist. Wie für alles gibt es aber auch für das BCD System noch heute Anwendungsfälle. Unter anderem in der Finanzbranche, weil es nicht anfällig gegenüber Rundungsfehlern ist. Ein weiterer - wenn auch marginaler - Vorteil ist, dass es sich im hexadezimalen System einfach lesen lässt. In der untenstehenden Tabelle sieht man alle Dezimalzahlen von 0-9 und ihre Darstellung im BCD und Hex System.

BitsZahlHex
000000
000111
001022
001133
010044
010155
011066
011177
100088
100199

Eine Besonderheit im Time Code des DCF77 ist, dass nicht immer alle 4 Bits des BCD Systems verwendet werden. Als Beispiel: Bei der Darstellung der Minuten werden für die Zehner-Dezimalstelle nur 3 Bits verwendet, da hier der Wert maximal 60 sein kann. Die genauen Zeitinformationen werden wie folgt codiert:

BitsBelegungBedeutung
21-241 2 4 8Minute (Einer)
25-2710 20 40Minute (Zehner)
28Paritätsbit Minute
29-321 2 4 8Stunde (Einer)
33-3410 20Stunde (Zehner)
35Paritätsbit Stunde
36-391 2 4 8Kalendertag (Einer)
40-4110 20Kalendertag (Zehner)
42-441 2 4Wochentag
45-481 2 4 8Monat (Einer)
491Monat (Zehner)
50-531 2 4 8Jahr (Einer)
54-5710 20 40 80Jahr (Zehner)
58Paritätsbit Datum

Das Paritätsbit

Zur Überprüfung der Fehlerfreiheit der Daten, werden im Signal insgesamt drei Paritätsbits eingefügt. Diese befinden sich an Stelle 35, 49 und 58 und beziehen sich jeweils auf die davor liegenden Gruppen. Für die Paritätsbits wird eine gerade Parität verwendet. Das heißt, dass zunächst die Summe aller 1er Bits in einer Gruppe berechnet wird. Ist diese Summe ungerade, wird das Paritätsbit auf 1 gesetzt. Ist die Summe bereits eine gerade Zahl, ist das Paritätsbit 0. Wenn also alle 1er Bits in einer Gruppe inklusive des Paritätsbits eine gerade Summe ergeben, kann davon ausgegangen werden, das die Daten fehlerfrei empfangen wurden.

Sollte das nicht der Fall sein, sind die Daten korrupt. Eine Lösung hierfür gibt es nicht. Es muss also auf den nächsten Minutenzyklus des Time Code gewartet werden. Deshalb dauert der Empfang der Uhrzeit bei ungünstigen Voraussetzungen auch manchmal etwas länger.

Signal empfangen

Um das Zeitsignal empfangen zu können, benötigt man zunächst eine passende Antenne. Hier gibt es eine große Auswahl in den bekannten Shops wie ELV, Pollin, Reichelt etc. Da ich selbst aber nicht sehr Hardware-affin bin, habe ich stattdessen auf die tolle Funk Community zurückgegriffen. Im Receiverbook gibt es eine Vielzahl an Empfängern, die über diverse Open-Source Weboberflächen eine visuelle Ansicht von Radiosignalen erlauben. In meinem Fall ist das eine mit KiwiSDR laufende Instanz.

Wenn man den Empfänger auf die Frequenz 77,5kHz einstellt, sollte man das Signal des DCF77 erkennen können: Ein Ausschnitt eines Radiosignals auf der Frequenz 77,5kHz

In dem Bild sieht man, wie auf der Frequenz ein dauerhaftes Signal gesendet wird, welches in regelmäßigen Abständen kurz abschwächt.

Daten auslesen

Um aus dem gezeigten Signal die Zeitinformationen zu erhalten, gibt es glücklicherweise ein Plugin für KiwiSDR namens timecode. Das übernimmt die Übersetzung des gesendeten Signals in die Bits des Time Code für uns. Im Test habe ich folgende Bitfolge erhalten:

0 10100110011111 00010 1 0110010 1 001010 0 100011 101 10000 10100100 1 1

Die Daten sind netterweise bereits nach ihren Gruppen im Time Code getrennt. Das erste Bit und den darauffolgenden großen Block an Wetterinformationen können wir also für das Auslesen der Zeitinformationen ignorieren.

Wir werden die empfangene Bitfolge nun Stück für Stück durchgehen, die enthaltenen Daten auslesen und so die Zeitinformationen zusammensetzen.

Metainformationen

Wir haben folgende Bits für die Metainformationen erhalten.

00010

Diese bedeuten folgendes:

BitBedeutung
0Rufbit. Keine Unregelmäßigkeiten
0Keine angekündigte Umstellung der Zeit von Sommer- auf Winterzeit oder umgekehrt
01Es ist aktuell Winterzeit
0Es wird keine Schaltsekunde eingefügt

Minuten

Bits:

0110010

Übertragen auf das BCD System bedeutet das:

Bit 0  1  1  0  0  1  0
BCD 1  2  4  8  10 20 40

Die Summe der BCD Zahl ergibt dann 2 + 4 + 20 = 26. Bedeutet: 26 Minuten.

Als Paritätsbit wurde für diese Gruppe eine 1 gesendet. Wir haben in dieser Gruppe 3 1er Bits erhalten, also sind die Daten korrekt.

Stunden

Bits:

001010

BCD:

Bit 0  0  1  0  1  0
BCD 1  2  4  8  10 20

Ergebnis: 4 + 10 = 14. Bedeutet: 14 Stunden.

Als Paritätsbit wurde für diese Gruppe eine 0 gesendet. Wir haben in dieser Gruppe 2 1er Bits erhalten, also sind die Daten korrekt.

Kalendertag

Bits:

100011

BCD:

Bit 1  0  0  0  1  1
BCD 1  2  4  8  10 20

Ergebnis: 1 + 10 + 20 = 31. Bedeutet: 31. Kalendertag.

Wochentag

Bits

101

BCD:

Bit 1  0  1
BCD 1  2  4

Ergebnis: 1 + 4 = 5. Bedeutet: Freitag.

Monat

Bits:

10000

BCD:

Bit 1  0  0  0  0
BCD 1  2  4  8  10

Ergebnis: 1. Bedeutet: Januar.

Jahr

Bits:

10100100

BCD:

Bit 1  0  1  0  0  1  0  0
BCD 1  2  4  8  10 20 40 80

Ergebnis: 1 + 4 + 20 = 25. Bedeutet: 2025. Die Jahreszahl wird immer nur für das aktuelle Jahrhundert angegeben. Es werden also nur die letzten zwei Jahreszahlen von 00 - 99 angegeben.

Das Paritätsbit gilt für sämtliche vorgegangenen Datumsgruppen. In Summe haben wir 9 1er Bits erhalten. Als Paritätsbit haben wir 1 erhalten, also sind auch diese Daten korrekt.

Gesamtergebnis

Das Ergebnis dieser langwierigen Berechnung ergibt somit folgendes Datum:

Freitag 31.01.2025 14:26 Winterzeit

Optimierungspotential

Nachdem ich die Spezifikation des Time Codes gelesen hatte, wunderte ich mich sehr über die Wahl des BCD Systems. Vor allem, weil es durchaus Optimierungspotential gibt. Würde man statt BCD das “normale” Binärsystem nutzen, also 1 2 4 8 16 32 64 ... statt 1 2 4 8 10 20 40 80 ... ließe sich bei den Minuten, Stunde, Monat und Jahr insgesamt 4 Bit einsparen.

Wenn man jedoch bedenkt, dass das Signal nun schon seit über 50 Jahren unverändert gesendet wird, kann ich verstehen, dass solche Anpassungen weder gewollt noch notwendig sind. Ganz im Gegenteil finde ich es bemerkenswert, dass es so viel Zeit überdauert hat und nach wie vor relevant ist.

Meine Gedanken

Es ist erstaunlich, dass das DCF77 nun schon eine so lange Zeit in unveränderter Form ausgesendet wurde. Die Langlebigkeit des Radiosignals bedeutet auch, dass ich mir heute eine Funkuhr aus den 70er Jahren kaufen könnte und diese immer noch - und auch weiterhin - die korrekte Uhrzeit anzeigt.

Als jemand, der selbst schon viel Software entwickelt hat, kann ich mir gar nicht vorstellen, dass von mir geschriebener Code noch in 50 Jahren aktiv genutzt wird. Eine wirklich grandiose Leistung von den schlauen Köpfen hinter der Entwicklung des Time Codes.