De werking van het DCF77 signaal

DCF77: Deutschland, C als kenteken dat het een lange golf zender betreft, Frankfurt 77,5kHz.

DCF77 is een tijdsignaal dat op 77,5kHz als tijdsinformatie gecodeerd wordt uitgezonden.
Het zendvermogen van de lange golf zender is maarliefst 50kW met een bereik van ca.2000km rondom Mainflingen (25km van Frankfurt, Duitsland).
De uitzending van het signaal over de lange golf is zeer geschikt omdat de reikwijdte extreem groot is (bijna heel Europa), reflecties in de ionosfeer kunnen worden verwaarloosd en het signaal is ook in gebouwen nog goed te ontvangen.
Het heeft natuurlijk ook z'n nadelen, zo duurt het bijna een minuut om tijd en datum compleet over te zenden.
Het DCF77 signaal (en z'n draaggolf) wordt door de PTB (Physikalisch Technische Bundesanstalt) d.m.v. atoomklokken in een zendgebouw in Mainflingen opgewekt (de bediening is geplaatst in Brunswijk) met een afwijking minder dan 1 seconde in 300.000 jaar en vanaf daar uitgezonden.
De zender is, uitzonderingen zoals onweer in het gebied daargelaten, 24 uur per etmaal in bedrijf (sinds 31 augustus 1970).
Bij onderhoud wordt er overgeschakeld op reserve antennes.
De uitgezonden tijdsinformatie is de CET (Central European Time) en het uur extra zomertijd is ook toegevoegd in de zomer.


Relatief eenvoudige, goedkope ontvangers kunnen deze lange golf opvangen.
Horloges, wekkers en klokken die werken op het DCF77 signaal geven de exacte datum en tijd tot op de seconde weer.
Het protocol dat gebruikt wordt om de data te verzenden is vrij simpel, elke minuut wordt de volledige tijd en datum uitgezonden in 59 bits (van seconde 00 t/m 58).
Aan het begin van elke seconde wordt een bit uitgezonden door de 77,5kHz draaggolf voor even tot 25% te reduceren (-6dB) (een soort digitale Amplitude Modulatie).
Als het vermogen voor zo'n 100 mSec (0,1 sec) laag blijft dan is de uitgezonden bit een '0' en als het vermogen zo'n 200 mSec (0,2 sec) laag blijft dan is het een '1'.
Het 60e bit (seconde 59) wordt niet uitgezonden, dit wordt gebruikt als een markeringsteken om het begin van elke minuut te detecteren (en dus een nieuwe groep van 59 bits).


 

 

Bestelnr. 64 11 38
Conrad levert een kant en klare DCF77 ontvanger
Bestelnr. 53 60 08
Ook een losse DCF77 ferriet-sprietantenne is leverbaar

Bij de DCF77 projecten van deze website is de DCF77 module van Conrad (bestelnr. 64 11 38) gebruikt.
Let er op dat de DCF77 module (ontvanger) niet dicht bij een draaiende computer in de buurt staat want dat stoort op de ontvangst, dus ook een afstand van minimaal 1 meter van de PIC houden.
Ook TL's, lichtdimmers en magnetron kunnen flink op de DCF77 ontvangst storen, de antenne daar uit de buurt houden dus.
Het beste kan de complete DCF77 module buiten gehangen worden (zie foto's).

De beste remedie tegen storing is om de DCF77 module inclusief antenne in een kleine kunststof (geen metalen!) behuizing te bouwen en deze buiten te hangen.

Een afgeschermde kabel is niet per se nodig, maar zorg er wel voor dat er aan de zijde van de DCF77 module een serieweerstand van 100Ω en daarna een (tantaal) condensator van 4µ7 over de voeding wordt geplaatst (zie schema's van de DCF77 projecten).
De (onafgeschermde) kabel tussen de DCF77 module en de PIC is bij mij thuis 10 meter lang en werkt probleemloos.
Neem als het mogelijk is een 4-aderig kabel, voor de DCF77 module zijn er maar 3 nodig, maar in een ander project wordt er gebruik gemaakt van de vierde ader.

Er zijn twee uitgangen op de DCF77 module, de rechter is direct, de linker geïnverteerd.
De projecten van deze website gebruiken de directe uitgang aansluiting, links naast de +.
De vierde (blauwe) ader wordt in een ander project gebruikt.

PIC programma
DCF77 is vrij simpel.
Elke seconde (behalve seconde 59) komt er een pulsje binnen.
Voor een '0' duurt die puls 0,1 seconde en voor een '1' duurt het 0,2 seconden.

Dus:
Meet tot er een puls binnenkomt.
Dan een vertraging van 0,15 seconde.
Dan weer meten.
Is de puls alweer weg dan is er een '0' ontvangen en is de puls er nog dan is het een '1'.

Het programma in de PIC verwacht elke seconde een '0' of een '1', als er dus na een seconde niets is ontvangen, weet de PIC dat de aankomende seconde, seconde 00 van een nieuwe minuut moet zijn.
De waarde van de seconde zelf wordt niet uitgezonden, om een tijdsaanduiding met seconden te maken moet er in het PIC-programma een teller meelopen die bij elke ontvangst van een bit ook de seconden-teller verhoogt en deze op een tijdsaanduiding (LCD of LED-display) weergeven, en als er een seconde niets wordt ontvangen (seconde 59) moet ervoor worden gezorgd dat er één seconde na de 58e seconde, '59' op de tijdsaanduiding wordt gezet.
Bovendien moet met de daaropvolgende seconde de seconden-teller weer op 00 worden gezet.

Alle waarden worden sinds 1973 uitgezonden in BCD code, meer info over BCD.

Pariteitbits
Een programma kan gebruik maken van de drie uitgezonden DCF77 pariteitbits, dit is niet per se nodig, maar is wel aan te bevelen, de programma's van deze website maken er in ieder geval gebruik van.
Er is een pariteitbit voor de minuten, voor de uren en voor de datum.
DCF77 werkt met even parity, dat werkt als volgt:
De uren bijvoorbeeld bestaan uit 6 bits plus een pariteitbit (zie bitindeling in de minuut onderaan).
De bitjes die '1' zijn, worden opgeteld inclusief de pariteitbit, de uitkomst moet een even getal zijn.
Als er dus een bit verkeerd is ontvangen, een '0' is als '1', of een '1' als '0' ontvangen, dan is de uitkomst oneven.
Stel dat het 8 uur 's morgens is, de 6 bit uren bittrein is dan 00 1000 (= 08, BCD).
Omdat er dan maar 1 bit hoog is, is de pariteitbit van de uren die daar direct achter wordt uitgezonden ook een '1' om tot een even getal te komen.
Als de uitkomst nu oneven is (pariteitserror) moet de PIC ervoor zorgen dat de fout ontvangen tijd of datum niet op het LCD wordt geplaatst.
In plaats daarvan moet de PIC zelf de actuele tijd uit de vorige tijd berekenen en dát op het LCD zetten.

In het geval van een pariteitserror:
- Verhoog huidige minuut met 1
- Wordt minuut groter dan 59 dan minuut = 0 en tevens uur met 1 verhogen
- Wordt uur groter dan 23 dan uur = 0

Om dan ook de datum te verhogen heeft niet zoveel zin, het is echter wel van belang dat als er een pariteitserror is, dat de datum die minuut niet van de DCF77 module wordt overgenomen maar gewoon op de datum van de vorige minuut blijft staan.
De kans dat er precies om middernacht (00:00) een pariteitserror voorkomt is bijzonder klein en mocht het een keer gebeuren dan wordt de datum alsnog in de volgende minuut (om 00:01) goed gezet.
In de programma's van deze website wordt bovenstaande foutafhandeling uitgevoerd als er een pariteitserror in welke van de drie pariteitbits dan ook voorkomt.

In het begin heb ik een teller mee laten lopen en blijkt dat een pariteitserror gemiddeld 5 tot 10 keer per dag voorkomt.
Maar door de foutafhandeling heb ik bij me thuis hierdoor nooit meer last gehad van een verkeerde tijd.

 

Bit Naam Beschrijving Toelichting
0...14 - Gereserveerd Codering naar behoefte, bijvoorbeeld bedrijfsinformatie
15 R Zend antenne 0 = Standaard antenne / 1 = Reserve antenne
16 A1 Aankondigings bit 1 1 = Komend uur wisselt de wintertijd / zomertijd
17 Z1 Tijd Zone bit 1 0 = Winter / 1 = Zomer
18 Z2 Tijd Zone bit 2 0 = Zomer / 1 = Winter (tegenovergesteld aan Z1)
19 A2 Aankondigings bit 2 1 = Komend uur wordt een extra seconde ingevoegd (schrikkelseconde)
20 S Startbit Altijd 1, startbit gecodeerde tijdsinformatie
21...27   Minuten 7 bit, BCD, LSB eerst (00...59)
28 P1 Pariteits bit 1 Even pariteit voor alle ontvangen bits van de minuten
29...34   Uren 6 bit, BCD, LSB eerst (00...23)
35 P2 Pariteits bit 2 Even pariteit voor alle ontvangen bits van de uren
36...41   Dag v.d. maand 6 bit, BCD, LSB eerst (01...31)
42...44   Dag v.d. week 3 bit, BCD, LSB eerst (1 = maandag...7 = zondag)
45...49   Maand 5 bit, BCD, LSB eerst (01...12)
50...57   Jaar 8 bit, BCD, LSB eerst (00...99)
58 P3 Pariteits bit 3 Even pariteit voor alle ontvangen bits van de datum

A1: Aankondiging voor overgang naar zomertijd of terug, voor de duur van 1 uur voor de zomertijdswissel.
Dit kan o.a. worden gebruikt om analoge klokken een uur stil te zetten als de (analoge) klok een uur terug gezet moet worden.

A2: Aankondiging dat er het volgende uur een schrikkelseconde wordt toegevoegd, dit is om de zoveel jaar nodig om met de draaiing van de aarde in de pas te blijven.
Sinds 1972 wordt deze af en toe toegevoegd.
Seconde 60 wordt zonder bit uitzending ingevoegd (net als seconde 59).
Mogelijk is de schrikkelseconde van 1 januari 2006 voor het laatst toegevoegd.
Veel deskundigen willen de standaardtijd pas aanpassen als er een schrikkelminuut is, onder meer omdat tijdsaanpassingen lastig zijn voor beheerders van computernetwerken.

PIC project: Bouw zelf een digitale DCF77 klok met LCD en gong
PIC project: DCF77 klokthermostaat met PIC
www.ptb.de Controleer de DCF77 klok op de seconde nauwkeurig (Duitstalig)
www.dcf77.de (Duitstalig)