I am an Amateur Radio operator and I have become very interested in some of the “weak signal” digital modes especially during this period of very poor radio wave propagation. I use the protocols FT8 and JS8 both of which require software running on some kind of fairly recent desktop or laptop computer operating under Windows, Linux or MacOS. A Raspberry Pi 3B+ or better is a common solution for this.
Both FT8 and JS8 require the computer clocks to be synchronized to UTC within 2 seconds in order to successfully decode the packets that are received. JS8Call (for JS8) has the ability to adjust an internal offset to manually synchronize time but WSJT-X (for FT8) does not. If the host computer is connected to the Internet then it will normally synchronize time using the Network Time Protocol (NTP) so time sync is only a problem if you are “off the grid”.
Last summer (2019) I started putting together a portable radio station which would give me the opportunity to operate in some outdoor locations where the background noise is lower and also for possible use for emergency communications. My original intention was to use a Raspberry Pi 4B+ as the computer for this and to add a real time clock (RTC) module to it to be able to keep time with the required accuracy without Internet access.
This winter (2020) I added a DS3231 module to my Pi which works great however I realized after doing that that I would still like to be able to use my laptop (a 13” MacBook Pro) as the computer for this application as well. My MacBook appeared to keep time quite well without an Internet connection when it was operating or even sleeping but I really wanted to find out what the limitations were. I needed a good way to measure this and ultimately provide the ability to update a laptop’s internal clock if necessary.
In a previous project OpenPPS I created a rather exotic experimental system to keep time to within microseconds per day. It uses GPS when available to provide a time reference for a very stable crystal oscillator attached to an FPGA. That was overkill for this application and not really ready for field use anyway.
I like to use GPS as a time reference and in particular the u-blox M8 series of modules which are low cost and readily available. Add to that a Teensy LC microcontroller board and a DS3231 module and so this project, which I call “AboutTime”, began!
The first thing I decided to test was to see how good the DS3231 RTC modules are. The specs on these are a drift of less than 60 seconds per year however I knew from my past research that it is possible to adjust a parameter within the module to potentially improve this. I wanted to test this as well.
By the end of this project I realized that the PC application can be used standalone to sync the clock and an external time source is not essential.
There are three parts to this project which are:
- A cross platform PC application to adjust the host computer's time - AboutTimeClient.
- A time server using a Teensy LC microcontroller, a u-blox GPS and a DS3231 real time clock (RTC) - AboutTimeServer.
- An experiment using the Teensy 4.0 microcontroller in conjunction with a TCXO - Teensy4TCXO.
All of these are Open Source and are contained and documented in Github repositories: