Arduino DCF77 radio clock receiver – Signal


(This is part 2 in a small series on using DCF77 for accurate time keeping with an Arduino. You can find post #1 here and post #3 here)

Our DCF77 radio receiver picks up the DCF77 time signal from the low frequency transmitter located in Mainflingen near Frankfurt, Germany. The LF transmitter sends out Central European Time, CET or the Central European Summer Time, CEST. The DCF77 signal can be received in many parts of Europe.

Dcf range Arduino DCF77 radio clock receiver   Signal image

Range DCF77 radio tower

The 77.5 kHz carrier signal is generated from local atomic clocks, and the time and date is encoded on top of this signal. A power drop of 100 ms indicates a 0, A power drop of 200 ms indicates a 1. The DCF output returns just these pulses.

Name Meaning
0 M Start of minute, always 0.
1-14 Civil warning bits.
15 R Call bit, set during abnormal transmitter operation
16 A1 Summer time announcement.
Set during hour before change.
17-18 Z1,
01 when CEST is in effect.
10 when CET is in effect.
19 A2 Leap second announcement.
Set during hour before leap second.
20 S Start of encoded time, always 1.
21-27 Minutes
28 P1 parity checksum over minute bits 21–27
29-34 Hours
35 P2 parity checksum over hour bits 29–34
36-41 Day of month.01–31
42-44 Day of week
Monday=1, Sunday=7
45-49 Month number 01–12
50-57 Year within century 00–99
58 P3 parity checksum over date bits 36–57
(59) No bit transmitted during last second of each minute

Let us now look at the signal coming from the DCF77 receiver that we connected to the Arduino .
The code below samples the signal, and starts a new line every time the signal toggles from LOW to HIGH.

When I run this, I get output such as this:

screenshot 2 Arduino DCF77 radio clock receiver   Signal image

Output signal DCF77 receiver

We see pulses that are roughly 100 ms, and pulses that are roughly 200 m. This is what we expect. Note that we also see one pulse-to-pulse time that is clearly longer than 1s, indicating the end of a time sequence. Note that the axis drawn above underestimates the elapsed time slightly, because a single loop takes a bit longer than 10ms.

So, what is the exact timing of the pulses? Let’s try the following program:

Running this program give me the following output:

screenshot 2 misfire Arduino DCF77 radio clock receiver   Signal image

Pulse-to-pulse time and pulse lengths from the DCF77 receiver

Notice that while the DCF specification says that pulses should be either 100 or 200 ms, we notice pulse lengths that are approximately 30ms longer. This is likely due to the hardware of the decoder together will the pull up and capacitor electronics. We will account for this in the DCF77 library, to get optimal differentiation between long and short pulses. What is more worrying, is we alos also a pulse that is too short and too early to be a time bit. In our library we will try to reject these spikes, based on their time of arrival.

In the next post I will discuss the DCF library but for now, if you’re not bored yet, have look at this website that continuously displays the signal broadcasted by DCF77:

Next >>


  1. Excellent job!
    I have an Arduino UNO and the BN 641138 receiver, when I run both codes I get a small number of pulses and a small number of cycles. I can not see neither the 100 ms or 200 ms pulse. I believe that’s noise.Could you help me with this? Just so you know I am in Ravensburg, Germany so the location is not an issue.

    • Since the time code is transmitted in the longwave range by amplitude modulation, it can therefore be easily disturbed, resulting in erroneous peaks. A source or RF noise is indeed the PC, the level of noise may depend on the shielding by the case.

      I have been explained that noise may also creep up through the mains, either by picking up signal in the power lines or through the power supply. The latter I tried to minimize by using a by-pass capacitor. You could try using a bigger one and see if you AC power source works better. To minimize picking up signal, you can twist the cables going the DCF receiver

      Another thing you can try is buying a better antenna:

  2. Hello again,
    I changed the pull-resistor to 1K and used a 1.2-meter long twisted cable to get a decent reception. However, the signal is not as accurate as you depicted.

Leave a Reply

Required fields are marked *.