home
Zicht op Andijk
Hoofd
pagina
DCF77
Ontvanger
Si RF
Module
Useless
Machine
AIS
Ontvanger
GPS
Ontvanger
Uniden
69 XLT
Metaal
Detector

DCF77 ontvanger


Sommige dingen zijn gewoon leuk om te doen. Om een beetje te kunnen oefenen met makkelijke signalen kocht ik ooit bij Conrad een DCF77 ontvangertje.
Deze ontvanger staat afgesteld op 77 Khz en dat is de frequentie waarop vanuit Duitsland de atoomklok tijd wordt uitgezonden.
De ouderen onder ons kennen nog wel op de radio de 6 piepjes voor het hele uur en bij de zesde piep was het precies 0 seconden.
Als je dan op de zesde piep je horloge gelijk zette dan was je tijd precies goed. Over dat signaal hebben we het hier.
Vroeger heel bijzonder en handig om je klok gelijk te zetten, tegenwoordig wat achterhaald door de moderne electronica.
Afijn, dit ontvangertje vertaalt de pulsjes naar nullen en enen en daarmee kan je zelf een klok aansturen.
Dat moduultje lag al heel lang in de kast en opeens kwam ik hem tegen. Eens kijken of ik met een Arduino daar wat mee kan doen.

Eerst maar eens kijken wat er uit komt. Moduultje aangesloten en aan de scoop gehangen:

Elke seconde een puls. Een puls van 100ms is een 0 en een puls van 200 ms is een 1. Op het hele uur is er even geen puls.
Hierboven op de analyser. Begint met 200ms puls, gevolgd door vier 100 ms pulsen en een gat van 2 seconden.
Door elke seconde een lange of korte puls uit te zenden heb je dus een 60 bit bericht. Daar kan een hele berg info in verstopt worden volgens Wikipedia.

bit (seconde) naam doel opmerkingen
0 M minuutmarkering altijd 0
1-14   gereserveerd wordt sinds eind 2006 onder meer gebruikt voor meteorologische informatie
15 R reserveantenne 1 indien reserveantenne in gebruik is
16 A1 vooraankondiging van omschakeling zomer/wintertijd 1 gedurende een uur voorafgaand aan de omschakeling
17 Z1 zomertijd 1 tijdens zomertijd
18 Z2 wintertijd 1 tijdens wintertijd
19 A2 vooraankondiging van schrikkelseconde 1 gedurende een uur voorafgaand aan het invoegen van een schrikkelseconde
20 S start van tijdsbericht altijd 1
21-27   minuten BCD
28 P1 controlebit over bit 21-27 even pariteit
29-34   uren BCD, van 0 tot en met 23
35 P2 controlebit over bit 29-34 even pariteit
36-41   dagnummer binnen de maand BCD
42-44   weekdag 1=maandag, 2=dinsdag, ... 7=zondag
45-49   maandnummer BCD
50-57   jaartal laatste twee cijfers, BCD
58 P3 controlebit over bit 36-57 even pariteit
(59)   ontbrekende puls om opeenvolgende codeblokken te kunnen onderscheiden

De module heb ik vervolgens aan een Arduino gehangen en begon wat software te maken. De aanpak wat ik deed was eigenlijk net als bij OOK/ASK signalen.
Wachten op een puls. Bij DCF is dat op de seconde. Deze puls triggert een interrupt op de Arduino en wordt een teller gestart die de pulsebreedte meet.
Meten we 200ms dan hebben we een 1, meten we 100ms dan hebben we een 0. Voor de rest is het storing.
Uitzondering als we tussen de pulsen 2 seconden meten want dan hebben we met seconde 58 te maken en een volgende minuut wordt bijna gestart.
Als de puls meer dan 10% afwijkt van 100ms of 200ms dan is er een storing en een meetfout.
Het is allemaal wat storingsgevoelig tussen mijn electronica en met een gelukje van een hele minuut zonder foutjes kan de berekening plaatsvinden.
Ik ontdekte als je de module op 3,3 volt aansluit op de Arduino dat er een heel schoon signaal uitkomt die heel goed te decoderen is.


Na een avondje knutselen, vooral de BCD codering moest ik even induiken, heb ik een stukje code gemaakt die de tijd laat zien.
Als de bitstream vertaalt is dan wordt er een tijd verstuurd naar de serieel poort. Meer is het niet.
Er is geen parity controle e ingebouwd. Ik zou ook niet weten wat ik er meer mee moet doen dus het moduultje gaat weer in de kast.

Hieronder de code voor de liefhebbers.

 
Webdesign door mezelf en alle content is auteursrechtelijk beschermd.