Home    Master Clock   LCD Master Clock    Kenley Weather

Section   Top  DCF77 Scope   DCF77 Reception  DCF77 Signal Monitor    DCF77 Live Signal Console

 

 

 

DCF77 Signal Generator

Arduino DCF77 signal generator

above basic circuit using Udo Klein's DCF77 generator code

 

 

About

As DCF77 clocks are fully automatic there is no manual setting of time and date so any special functions built into your clocks e.g. Summer/Winter Time changes are difficult to test in real word conditions.

Udo Klein the designer of the DCF77 library used to decode the DCF77 signal in this clock has also designed a DCF77 radio code generator for the Arduino.

 Dummy radio time and date code in the DCF77 format is transmitted to the DCF77 receiver via a very weak DCF77 signal. This overrides the real DCF77 signal so your clock on test is set to whatever time and date you set.

 

 

Setup

To use the generator download Udo's code and program the Uno via the serial port.

Once the board is programmed connect a 1K resistor to pin 3 and a small loop of wire to the Gnd pin.

 

Loop the wire once around the DCF77 aerial of the device you are testing.

Load up a terminal program or just open the serial monitor from the Arduino interface.

Set the baud rate to 115200 and hit enter.

You should see the following on the serial monitor

running
output on pin D3


To set target time use one of the following formats

simple mode:
sYY.MM.DD hh:mm.ss

extended mode:
x:YY.MM.DD hh:mm.ss w sbtl

current time setup (YY.MM.DD hh:mm.ss w sbtl)
w = weekday, s = summertime, b = backup antenna, t = timzone change scheduled, l = leap second scheduled
09.01.01 00:52:03 4 8001

 

This gives you basic instruction of how to set the time and date on the Uno ready to be set as the time and date on your device.

As an example to test my calendar clock stepping from 30th June to the 1st July I send this command "x16.07.01 06:30:00 1 1000" to set the date and time to 1st July 2016 06:30:00. My clock is set for GMT so when it decodes it will be set to 05:30. On all months bar January on the first of the month the calendar is set to correct at 06:00hrs rather than midnight (due to noise of the clock movement).

Remember once you send the command to your DCF77 generator the clock start at the time you set so by the time your clock decodes it it will be several minutes later. This is why I set it to 05:30 not 06:00 hrs.

This give my calendar clock time to decode the signal ready to step the time and date on at 06:00hrs.

 

 

Here is another example

To trigger a leap second for GMT (for CET take an hour off)

Send

x15.01.01 00:45:00 1 0001
 

Outputs

running
output on pin D3
current time setup (YY.MM.DD hh:mm.ss w sbtl)
w = weekday, s = summertime, b = backup antenna, t = timzone change scheduled, l = leap second scheduled
15.01.01 00:45:00 1 232001


To set target time use one of the following formats

simple mode:
sYY.MM.DD hh:mm.ss

extended mode:
x:YY.MM.DD hh:mm.ss w sbtl

current time setup (YY.MM.DD hh:mm.ss w sbtl)
w = weekday, s = summertime, b = backup antenna, t = timzone change scheduled, l = leap second scheduled
15.01.01 00:45:00 1 232001

This actually set my clock (set to GMT) once decoded to 23:45 31st December 2015 plus a few minutes for decoding time.

I used this on my Master Clock to check the injected leap second was detected and passed onto my 1 second slave clocks.

 

 

Further examples

x15.01.01 00:45:00 1 0001 = 23:52:00 31/12/2015 gmt+0 triggers a leap second


x14.03.30 01:50:00 1 0010 = 00:45:00 30/03/14 gmt+0 trigger clock +1 hour


x14.10.26 02:50:00 1 1000 = 02:45:00 26/10/14 gmt+1 trigger clocks go back


x21.03.01 05:20:00 1 1000 = 21.03.01 05:20:00 1 49000 after 28 Feb no leap year trigger at 06:00hrs


x16.02.28 06:20:00 1 1000 = 05:20 28 feb 2016 a leap year step to 29


x16.03.01 06:30:00 1 1000 = 05:30 01 March 2016 leap year step from 29 to 01


x16.07.01 06:30:00 1 1000 = 05:30 01 Jul 2016 step from 30 to 01


x14.03.30 23:30:00 1 0000 = 22:30 30 Mar 2014


x14.03.30 01:30:00 1 0000 = 00:30 30 Mar 2014


x14.03.30 13:30:00 1 0000 = 12:30 30 Mar 2014