|
|
|
Address |
SIG |
J10 J9 J8 A0 A1 A2 |
|
31 (0x1F) |
00 |
000 |
|
33 (0x21) |
01 |
100 |
|
35 (0x23) |
02 |
010 |
|
37 (0x25) |
03 |
110 |
|
39 (0x27) |
04 |
001 |
|
41 (0x29) |
05 |
101 |
|
43 (0x2B) |
06 |
011 |
|
45 (0x2D) |
07 |
111 |
Note. There may be conflicts with certain LCD I2C address such as 39 (0x27). I only used the first four of the above SIG settings.
Sample Code:
#include <sig7seg-i2c.h>
Sig7segi2c sig0;
Sig7segi2c sig1;
Sig7segi2c sig2;
Sig7segi2c sig3;
void setup(void)
{
delay(2000); // Wait for
12v to be fully power up and stabilized
sig0.begin(0x00);
sig0.clear();
delay(20);
sig1.begin(0x01);
sig1.clear();
delay(20);
sig2.begin(0x02);
sig2.clear();
delay(20);
sig3.begin(0x03);
sig3.clear();
delay(20);
}
void SetSig(byte digit0, byte digit1, byte
digit2, byte digit3)
{
sig0.write(digit0);
delay(20);
sig1.write(digit1);
delay(20);
sig2.write(digit2);
delay(20);
sig3.write(digit3);
}
The routines do all of the necessary conversions.

OK, before I wire up everything, I need to ask myself, “What’s this WWVB signal look like?” Well, it’s not bits on and off like one might expect. This is 1960s US cold war technology. There’s no forward error correction and no parity. Also, the data does not fit any common baud rate.
When I finally got the tiny radio PCB mounted on a proto board and a scope hooked up to it, I was confused. The signal kept switching on and then off again. I thought the board was defective. I then slowed the wave length of the scope down to 1 second per division. That’s when I noticed a pattern emerging. The data is transmitted via 1 second pulses with the width of each pulse indicating a different value.

WWVB Signal
The WWVB 60 kHz carrier, which has a normal effective radiated power (ERP) of 70 kW, is reduced in power at the start of each second by 17 dB (to 1.4 kW ERP). It is restored to full power some time during the second. The duration of the reduced power encodes one of three symbols:

Each minute, seven markers are transmitted in a regular pattern which allows the receiver to identify the beginning of the minute and thus the correct framing of the data bits. The other 53 seconds provide data bits which encode the current time, date, and related information. The beginning of a minute time data block can be identified by to two markers in succession. These are the end of one data block (59) and the beginning of the next (00).

By Denelson83. - Own work, CC BY-SA 3.0, commons.wikimedia.org/w/index.php?curid=3667565
The Atomic Clock Receiver module takes the incoming signal and shapes or creates square wave pulses. The receiver has available output data pins for either a positive pulse or an inverted negative pulse.
Note. The month and day needs to be converted from day of year to mm and dd. Date and time are UTC. The current time for the particular time zone must be calculated. The parameters for the calculations include time zone, DST, leap year, etc.
I downloaded the github.com/phanrahan/Arduino/blob/master/wwvb/wwvb.ino code to derive what I developed. There’s still a bug in that once in a great while, the Arduino code will display an erroneous time. This is likely due to RF noise and misinterpreting the data. It takes about two minutes to correct itself.
It’s on with the build
The clock case and frame are of a fairly simple construction. The digits are held onto a frame made of 1½ inch aluminum angle stock brazed at the mitered corners. I constructed the center (:) colon by gluing two small pieces of white painted aluminum to a black metal box-like bracket, which is the same height as the digits. The outer cabinet is 4 pieces of birch plywood mitered at the corners held together with biscuits. The front class frame which holds the glass is held on with decorative screws and is removable.

The metal clock frame is floating and is held in the cabinet by 8 screws through rubber grommets, hopefully quieting the noise made by the flipping segments.
I cut a decorative window mat out of some picture framing matting material to cover the edges between the 4 numeric segments and the colon. The little thing in the center in between the colon dots is an indicator LED that shows the radio is receiving a WWBV signal. This will blink on and off every second indicating each bit of data.
The controller:

From top to bottom:
Installed Sig7Seg-i2c Controller

The back of the clock with power, antenna
and LCD control box connectors
Top Button Menu Select - Bottom Button Item Select
| Code | Binary | Description | Type |
| 0 | 00 | Standard Time | S |
| 1 | 01 | DST Ends Tonight | E |
| 2 | 10 | DST Begins Tonight | B |
| 3 | 11 | DST in Effect | D |
The control box is also used to access the configuration menus. These include:
|
|
|
S January 15th 2020 - my 70th Birthday