[time-nuts] Measure GPSDO stability with minimum resources?

Jim Harman j99harman at gmail.com
Wed Oct 5 17:37:16 EDT 2016

On Wed, Oct 5, 2016 at 1:37 PM, Bob Stewart <bob at evoria.net> wrote:

> For my GPSDO, I need to calculate the OCXO aging for holdover projection
> purposes as well as get some figure of merit for the recent past of the
> OCXO stability.

Do you have a serial port or some way of generating a logging stream?

If so, one low-overhead way to track the aging is to compute an average DAC
value and periodically "print" the result to the serial port. I have found
that a 3-hour average works well for observing aging. Each second you
simply add the current DAC value to a Long and after 3 hours divide by
10800, print the result, reset the total, and repeat. It is helpful to also
include the current time. This could be extracted from the GPS NMEA data
 or simply be seconds since startup. If you separate the values with a Tab
and end each set of values with a newline, you can capture the data with an
attached PC, copy/paste to Excel, and analyze it there. The trend line
feature in Excel's chart will compute and display a least square fit to the

If you don't want to keep the monitor connected full time and you have some
extra RAM or preferably EEPROM, you can store historic average values in a
circular buffer and print one of the values every second. 288 bytes will
store 18 days worth of 16 bit 3-hour averages.

My system, based on the one posted here by Lars Walenius some time
ago,collects 144 sets of 5-minute averages (12 hours worth) and another 144
sets of 3-hour averages. It spits out one line of logging data each second.
The first part of each line has the current data, and the second part has
either one of the 5-minute sets or one of the 3-hour sets. So 5 minutes
worth of logging data has 300 lines, showing current data plus 5-minute
averages for the past 12 hours and 3-hour averages for the past 18 days.

All this, including the GPSDO code, fits comfortably in a 32u4-based
Arduino Micro, which has 32K of program memory, 2.5K of RAM, and 1K of


--Jim Harman

More information about the time-nuts mailing list