GPSDO & 10 MHz Disciplined Frequency Reference



  • GPS or external 10 MHz disciplined frequency reference

  • Typically better than .1 ppb, .00000001 accuracy and stability

  • Web Interface

  • Provides 2 configurable user outputs, typically 10/25/100 MHz and master clock for HF transceiver or SDR

  • Common SDR and HF transceiver Frequency presets

  •  Connections

    • SMA: GNSS Antenna or External 10 MHz reference
    • SMA:10 MHz standard ouput
    • SMA:User Selectable output  2 kHz to 160 MHz
    • 2.1mm power barrel connector
  • recommended supply 7-14VDC  @ ~100 mA

  • Four-layer,  through-hole plated, silk-screen printed PCBs

  • Optional plastic holder

Example Web Interface



These early versions of this Reference that board I've sent out are definitely alpha prototypes. While I think that the hardware itself is capable of working decently, as always, the firmware and user interface is a never-ending task.  Make sure you have loaded recent .bin code as this will (hopefully) give you better performance.

Be sure to power this board from an adequate power supply. It will not run properly on USB power alone. The design requires a 4V reference which is supplied by the external supply.  Although the CPU can operate from the USB connection these circuits cannot.

Initially you will have to provide an access point locally with the SSID:password I've sent. I also suggest that you arrange to have the Arduino IDE installed locally to make it easy to connect with a serial port (though PuTTY or similar will work) and especially so that you can reconfigure the IoT33 with local SSID:password  settings. See 'Uploading New Firmware' below.

Please see This Interface Document to access and configure a Reference to your local situation.

The 'page refresh' selection at the bottom of the main web page may be helpful. One reason for this is that the Lock Detect may not be properly indicated and disciplining, either by GPS external 10 MHz input may appear to not to be working when in fact it is. PLL loop bandwidth is low and it takes time for lock to be achieved. Perhaps future code releases will improve this.  When using GNSS referencing it may take >10 minutes for adequate, quality satellite connections exist, perhaps particularly after the unit has changed location (not sure about this). There is no data storage apart from what the GNSS module provides so all the necessary data needs to be rebuilt at restart. Until there is good satellite data lock may not be achievable.  Using the Ext10 MHz lock should be available immediately.

The board need not be mounted but I have designed a 3D printed plastic holder that helps protect it and also allows the addition of some foam padding above and below the crystal oscillator area to reduce the tuning by room drafts. This is somewhat subtle and probably not necessary for many uses but does help performance. It is an adjunct to the thermal island the crystal and TCXO temperature sensor already sit on. A proper Freq v Temp tuning curve still needs to be implemented to further improve non-disciplined mode. This could actually be done with a self-calibration algorithm but doesn't seem to important since most operation will be GNSS or Ext10 referenced.

Upon first use of the board I suggest using the Serial Monitor in the Arduino IDE to localize the unit. This means using the serial interface to setup local SSID:PASSWORD so that web access is available.  The 'dacnom' setting from the Status & Utiity page should then be used in XO mode to place the free-running frequency as close as possible to correct, e.g. 1ppm or setting should be possible, though less accuracy should also work.

If 'Autopromote' is the default startup condition, unselect it se,lect 'TCXO'  and save the state with 'A' from the serial terminal, then restart. This should get you connected to your WiFi Internet connection in TCXO mode.  Go to the Utility page and use the 'dacnom' field to find a setting that puts either the Clock1 or User Clock output selected as close to correct as you can. Doing this makes it easier for the PLL to quickly acquire GNSS or Ext10 lock once those signals are present.  Once again save this value with 'A' from the terminal window.

If you are going to use GNSS mode, attach a antenna or other GNSS RF source.  Wait  a few minutes for the GNSS module to acquire some satellites (it does a cold start every time since there's no battery or supercapacitor backup) nad select 'GNSSDO'. The Status&Utility page, once should show a list of acquired satellites. Normally you might see 30-40 satellites from GPS, Galileo, Beidou systems reported. At this point switching to 'GNSS'  should produce lock, though it may require a page refresh to see it correctly reported.

If you are using a local 10 MHz standard of  ~+10 dBm  instead of GNSS connect it to the same SMA connector as for GNSSDO and select 'Ext10' after setting the 'dacnom' as above.  No waiting should be required and perhaps after refreshing the page you should see an indication of 'Locked' on the Status&Utility page as well as on the home page.

Charge Pump Current and PFD divide numbers can be adjusted to improve the trade off between PLL bandwidth, lock acquisition and spectral purity and saved to the power-on state.  This area of FW needs additional work as does the method for determining satellite 'quality'.

There are still many improvements that need to be made so a little patience and experimenting may be required to achieve desired results. You may also come across great ideas for improvement, if so please pass them along.

If there are any questions, please ask and I will try to post any answers that might be relevant to others on this site. Also, please let me know of enhancements and changes that would makie it better.

Uploading New Firmware

From time to time I may be able to provide new firmware for this device.  To upload this to your Reference Board see the

Firmware Upload Instruction

Here is an in-progress file that should allow user adjustment of some of the settings, particularly SSID:Password to meet your local needs.

RF02.2rc2.ino.bin   Newest. improved?




To setup the device for first use, see the following document:

Device Setup

Schematic and PCB Description

It's not particularly complicated or interesting but here's a schematic


Approximate cost  (for quantity 5)

much lower in even moderate volume.

Raw PCBs


pre-ordered IoT,GNSS..


Components, assembly in China


 One Time Costs independent of qty. e.g. stencil, fixturing, ext parts, shipping from China


per board cost   in  qty. = 5


Final Assembly and Test 3 hours

Shipping to US


Shipping to Europe


per-board cost might be reduced  by using Chinese GNSS (-$16)  changing  CPU (-$16)  with  Web server (-$4) , and of course by increasing volume.

Donations Accepted, see HW menu/home page