MSL radio time receiver code for Arduino


We had a bunch of eccentric clock ideas floating about. You can mostly blame Dingbat for that. I realised that MSL radio time receivers were cheap, and the obvious thing to do was to write Arduino code to decipher their output.

My receiver came from PV Electronics for the princely sum of 7. Similar receivers are also sold on eBay by yashu75.

And this is a demo using a LOLShield as a display:

Here are Arduino projects for the LolShield demo and a simple example which just displays the time via Serial

The MSLTime code is entirely interrupt-driven. It uses AVR interrupts on analogue pin 0, which is not used by the LOLShield.

Here's a description of the protocol. It takes one minute to send each time fix, squeezing two bits into each second by turning the carrier off for two possible 100mS chunks.

The edge-detecting scheme I used is easily thrown off by any spurious input. It has to get through a whole minute of good signal to get a fix, which means it needs a whole noise-free minute. If you're running it up for the first time, you may want to be patient enough to give it several goes before you decide it is broken.

It could be made more robust by sampling the input at (say) 100Hz, and ignoring any short pulses which disrupted the long pulses we want.

This code records all the transmitted bits and checks the checksums, for reliability. It does not decode all the information that's in the signal, just the time and date, but it would be easy to add decoding for the other fields if you needed it.

The Time library provides handy date manipulation functions and a real time clock. Time uses the MSF code periodically to sync itself, which means that the clock keeps running even when there is a break in reception.

If you use this for anything interesting, or you improve on it & want to share, I'd love to hear from you:

Home | Artefacts| Robots