On this page we look into how to generate a reference clock. The reference clock is generated by an oven controlled oscillator (OCXO), that is disciplined by a 1 pulse per second signal (1PPS). We refer to this unit by pulse-pre-second disciplined oscillator (PPSDO). The 1PPS signal is either generated by a Rubidium standard, or a GNSS receiver. The setup looks as following:

+---------+   1PPS    +-------+   15 MHz
| GNSS/Rb |---------->| PPSDO |-----------> reference clock
+---------+           +-------+

In the following, we will use a FEI FE-5680B rubidium oscillator, which is connected to a Lucent REF 0 PPSDO. There will two PCBs to connect to the Rb oscillator and generate fake GPS strings, so the PPSDO accepts the 1PPS signal.

The FEI FE-5680B rubidium oscillator

The FE-5680B is sometimes available for under 100 Euros. The FE-5680A (note the ‘A’ instead of ‘B’) version with 10 MHz output seems a bit more useful and is more common to be found. But it is not clean enough for the direct use. The configuration and the available reference outputs of the ‘B’ unit might vary, although they have the same part name. Some general information about the pin out can be found here. There was also some effort to hack the ‘B’ to provide additional output. Here, in contrast, we will just focus on the 1PPS output.

1PPS buffer

The board essentially contains a 74AC04 hex-inverter as 1PPS buffer and a DC filter. The latter is essential, since I plan to use step-down converters to supply the FE-5680B with 15 V and the 74AC04 with 5 V. The DC/DC converter are not part of this PCB.

        +-----+ 15 V  +---+
      | +-----+       +---+                     |
24 V -+                                         V
      | +-----+ 5 V   +---+               +-----------+
      +-|DC/DC|------>|LPF|               |  FE-5680B |
        +-----+       +---+               +-----------+
                +-------+                       |
                V                               |
          +------+                              |
1PPS <----|Buffer|<-----------------------------+

The first revision looks as following. Looks ok, besides some pins on the pin header are wrongly assigned. Nevertheless, this does not affect the operation as 1PPS buffer.


The Lucent KS-24361 REF 0 L101

This unit is a PPSDO which is normally used for telecommunication systems. The 1PPS signal is normally generated by REF 1 GPSDO. In addition to the 1PPS, the REF 0 expects this GPSDO to send Motorola Oncore messages. Here I am trying to repeat some previous results by Dan Watson which you might want to read first. I am using the same wiring for standalone operation. This is

Further details can be found on the time-nuts mailing list here and here.

Standalone operation with PC

+-----+  PPS   +---------+  CTS   +--------+
| GPS | -----> | USB-CTS | -----> | Python |
+-----+        +---------+        +--------+
  |                                   |
  |                                   | Oncore
  |                                   V
  |                              +----------+
  | PPS                          | USB-UART |
  |                              +----------+
  |                UART               |
  |         +-------------------------+
  |         |
  |         V
  |    +--------+  inv UART   +-------+
  +--->| 74AC04 | ----------> | REF 0 |
       +--------+             +-------+
            |                      ^
            |        inv PPS       |

For emulating a Oncore GPS, I wrote a Python script. It sends some required messages to the REF-0 unit, after catching a 1PPS signal on the CTS line. For this I am using a FTDI USB to UART cable with which I got a delay of 0.8 ms and a jitter of +/- 0.1 ms. The 1PPS signal with a pulse with of 100 ms is generated by a NS-RAW gps receiver. Both, UART and 1PPS signals, are inverted with a 74AC04 and send inserted in J5. After some minutes the NO GPS led should go off.

Standalone operation without PC

A PCB with an ATTiny841 will simulated the Oncore messages. The code and idea comes from Dan Watson. In contrast to him, I try to not installed inside, but to have the board connected to the Interface connector on the outside.


Some documentation for the commands can be found here. Connecting a EIA-422 cable to connector J8 gives access to SCPI terminal. We can enter the pForth mode with


where small letters can be omitted. Using ‘words’ in pForth mode to get a list of valid commands:

duart_debug        fp_u               es_ascii           print_l1
force_15_pass      force_15_fail      force_1pps_fail    sync_imm
efc_rep            pll_rep            loop_time          pr_hold_cause
gps_query          gps_change         pstat              disable_gps_cmds
pr_time_raim       pr_1pps            pr_gps_id          pr_gps_istate
pr_avg             pr_gps_cmds        clr_gps_debug      pr_gps_debug
master_reset       quiet_status       gps_query_all      init_gps
clr_avg            avg                q_gps_cable_dly    q_gps_php
q_eman             eman               leapsec            crash
print_clk_list     log_send           pr_pll             lock
pll_debug          pll_restart        pr_efc             efc_wr
force_ext_1pps     force_gps_1pps     gps_cable_dly      gps_ph
gps_php            gps_date           gps_time           print_bc
print_ext_msg      xdop_stat_rate     ext_msg_rate       print_vis
vis_stat_rate      stat_rate          print_stat         abr_stat
set_time           get_time           clk_synch          debug_psos
clear_nv           wr_eeprom          dmes_all           dmes_curv
dmes_spoo          dmes_scpi          dmes_root          dmes_pllp
dmes_klok          dmes_hmon          dmes_gpsm          dmessage
efc_write          pr_adc_avg         adc_read           s_rep
mem_rep            ps                 user               !iodev
dev_ctrl           dev_write          dev_read           dev_close
dev_open           dev_init           ident              mode
pause              get_v              wait_v             signal_v
request_x          send_x             delete_x           create_x
jam_x              priority           resume             suspend
delete             ver                spawn              ?^C
my_pid             root               watch              execute
0x                 number             unfence            fence
immediate          recurse            does>              pad
tib                count              word               type
expect             interpret          startup            words
forget             ]                  [                  [']
'                  state              base               hex
decimal            .s                 u.x                u.
.                  (.")               ."                 cr
spaces             space              emit               cos
sin                >>                 <<                 2*
2/                 2-                 2+                 1-
1+                 +!                 +                  -
*                  /                  */                 */mod
/mod               mod                ;                  :
literal            constant           create             variable
!                  @                  i                  j
k                  leave              +loop              loop
?do                do                 until              again
repeat             while              begin              endif
then               else               if                 depth
dup                swap               drop               2drop
cmove>             cmove              ?dup               0>
0=                 0<                 <                  >
=                  xor                not                and
or                 true               false              halt
abort              (                  2swap              2dup
allot              -rot               rot                c,
w,                 ,                  pick               fill
r>                 >r                 here               negate
c!                 c@                 w!                 w@
min                max                abs                over


The termination characters of the messages are important. A problem here is denoted as frame error when calling pr_gps_debug. In general there should be no error reported.

One can force the unit to lock on the external PPS signal with:

1 force_gps_1pps

Apparently, this still requires Onecore messages send on J5. After forcing to use the external 1PPS signal, we get this result after approximately 30 hours:

--------------------------- Primary Receiver Status ---------------------------
SYNCHRONIZATION ............................................. [ Outputs Valid ]
SmartClock Mode ___________________________   Reference Outputs _______________
>> Locked to GPS                              TFOM     3             FFOM     0
   Recovery                                   1PPS TI -30.0 ns relative to GPS
   Holdover                                   HOLD THR 1.000 us
   Power-up                                   Holdover Uncertainty ____________
                                              Predict  1.9 us/initial 24 hrs

ACQUISITION ................................................ [ GPS 1PPS Valid ]
Tracking: 0 ____   Not Tracking: 10 _______   Time ____________________________
                   PRN  El  Az  PRN  El  Az   GPS      02:01:41     01 Jan 1998
                   * 2  80  16   17  32   5   GPS 1PPS Invalid: not tracking
                   * 4  48  32   18  48   0   ANT DLY  0 ns
                   * 6  64   0                Position ________________________
                   * 8  90   0                MODE     Hold
                   *10  90   1
                   *12  90   2                LAT      N  23:18:06.080
                   *14  90   3                LON      E   8:59:34.784
                   *16  90   4                HGT                +2.56 m  (GPS)
                   *attempting to track
HEALTH MONITOR ......................................................... [ OK ]
Self Test: OK    Int Pwr: OK   Oven Pwr: OK   OCXO: OK   EFC: OK   GPS Rcv: OK