Skip to the content
2 layers65 × 85 mmOCXOBoard, the printed circuit board in 3D

Hardware and Software for the PicoGPSDO

Size
65 × 85 mm
Copper layers
2
Thickness
1.6 mm
Parts
24
Nets
12
Pads
74
Tracks, vias
75, 74
Pours
3
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
3 Sep 2024
Updated
20 Apr 2026

Overview

OCXOBoard is an open-source printed circuit board by gibbi, from the gibbi/PicoGPSDO repository on GitHub. It is a 2-layer board of 65 × 85 mm with 24 parts on 12 nets, routed with 75 tracks and 74 vias.

It is built around the 74AHCT1G125SE and L7805. Its parts include 8 capacitors, 6 resistors, 2 ICs, 2 connectors and 1 diode.

Main components

2

README

README.md

picoExtRef — GPS-disciplined OCXO reference (Pico)

RP2040 firmware that steers an OCXO via PWM (“DAC”), reads u-blox GNSS time over UART (UBX), and closes a two-stage servo: coarse steering from NAV-CLOCK and fine steering from TIM-TP qErr. A small Flask dashboard on the host tails USB CDC for live plots and tuning.

Hardware upstream: this tree is based on gibbi/PicoGPSDO (schematics, KiCad, and notes under hardware/). Presentation context: European GNU Radio Days 2024 — talk on YouTube.


Web UI screenshot

GPSDO web dashboard

Repository layout and components

AreaRole
src/main.cBoot, PWM DAC / 26 MHz ref clock, main loop, JSON telemetry, USB CLI polling, fine-mode edge tracker integration, fractional DAC accumulation.
src/ubx.c, src/ubx_rx.cUART RX (frame assembly + checksum), UBX decode, fills current_gps_data (NAV-CLOCK, TIM-TP, PVT, etc.).
include/ubx_clean.hShared GPS/UBX structs and packet layout used by the parser.
src/gpsdo_control.c, include/gpsdo_control.hFinelock hysteresis, coarse/fine control outputs (u_ns), NAV-CLOCK bias handling, telemetry tr flags.
src/gpsdo_tune.c, include/gpsdo_tune.hRuntime tunables and USB one-line CLI (kp, fine_mode, gates, etc.).
include/display.hSSD1306 OLED over I2C (optional); live status text on the module.
pico_gpsdo_web.pyFlask host app: reads Pico USB serial, parses {…} telemetry, serves charts, tune forms, log tail, optional series clear.
pico.pyDeveloper entrypoint: clean / build / flash / webserver / lint (see script header for caveats on build/ paths).
CMakeLists.txt, boards/Pico SDK project, board hooks.
hardware/From PicoGPSDO: PCB and hardware documentation (see hardware/Readme.md).
tests/Small host-side tests (e.g. UBX RX framing).

Data flow (short)

  1. u-blox → UART0 → UBX frames → current_gps_data (clkB, qErr, dac, fix, etc.).
  2. Servo (when mode servo): coarse on clkD_bias when bias steps; fine on qErr (P-only or edge mode) in finelock.
  3. USB CDC → compact JSON lines for the host web UI and printf debugging.

Quick start

bash
# Firmware (needs Pico SDK in environment per Pico docs)
./pico.py build
./pico.py flash          # optional: ./pico.py flash --webserver

# Web dashboard only (USB serial to the Pico)
pip install -r requirements.txt
./pico.py webserver      # or: python3 pico_gpsdo_web.py … per pico.py usage

Parts

24
QtyValueFootprintReferences
3RResistor_SMD:R_1210_3225Metric_Pad1.30x2.65mm_HandSolderR2, R3, R4
20.1ufCapacitor_SMD:C_1210_3225Metric_Pad1.33x2.70mm_HandSolderC1, C4
21000ufCapacitor_Tantalum_SMD:CP_EIA-7343-43_Kemet-X_Pad2.25x2.55mm_HandSolderC2, C3
2CCapacitor_SMD:C_1210_3225Metric_Pad1.33x2.70mm_HandSolderC6, C7
2Fixed VcontJumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmFixedVcont1, FixedVcont1
110MHzgibbi_custom:SMA_EDGE_GIBBI10MHz1
11202Resistor_SMD:R_1210_3225Metric_Pad1.30x2.65mm_HandSolderR5
11500Resistor_SMD:R_1210_3225Metric_Pad1.30x2.65mm_HandSolderR1
1225Capacitor_SMD:C_1210_3225Metric_Pad1.33x2.70mm_HandSolderC5
13302Resistor_SMD:R_1210_3225Metric_Pad1.30x2.65mm_HandSolderR6
15Voutgibbi:Simple5VJ2
174AHCT1G125Package_TO_SOT_SMD:SOT-23-5_HandSolderingU2
1CCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC8
1DC ConnectorConnector_AMASS:AMASS_XT30PW-M_1x02_P2.50mm_HorizontalJ1
1L7805gibbi:TO-7805U1
1LEDDiode_SMD:D_1210_3225Metric_Pad1.42x2.65mm_HandSolderD1
1Vcontgibbi_custom:SMA_EDGE_GIBBIVcont1
1~gibbi:MULTI_XOOCXO1

More from gibbi/PicoGPSDO

1
  • 2 layers70 × 55 mmResamplerBoard, the printed circuit board in 3D

    ResamplerBoard

    gibbi/PicoGPSDO

    Hardware and Software for the PicoGPSDO

    23 parts23

Similar boards

  • 2 layers50 × 110 mmOgham merged v1.0, the printed circuit board in 3D

    Ogham merged v1.0

    keeos-io/ogham

    Ogham — a dual-voice bytebeat synthesizer for Eurorack. Firmware (MIT) and hardware (CC BY-SA 4.0).

    109 parts3
  • 4 layers165.1 × 76.2 mmLED Badge, the printed circuit board in 3D

    LED Badge

    mjbella/LED_Badge

    RGB LED Badge Prototype

    400 parts1
  • 2 layers199 × 57 mmSplitflap backplane, the printed circuit board in 3D

    Splitflap backplane

    dennis9819/split-flap-controller

    Sourcecode and Schematics for the controller of my split-flap display

    21 partsAGPL-3.0
  • 4 layers241.2 × 327.2 mmCyclic, the printed circuit board in 3D

    Cyclic

    tpcarlson/synth-diy

    Mostly Eurorack projects

    439 parts107
  • 2 layers40 × 18.5 mmOpendrain, the printed circuit board in 3D

    Opendrain

    darthcloud/BlueRetroHW

    Kicad for BlueRetro project

    78 parts61
  • 2 layers40.1 × 49.3 mmBig Honking Button, the printed circuit board in 3D

    Big Honking Button

    wntrblm/Big_Honking_Button

    A simple Eurorack sampler and performance module in a silly package.

    54 parts60
  • 2 layers68 × 100 mmKeyboard featherwing, the printed circuit board in 3D

    Keyboard featherwing

    arturo182/keyboard_featherwing_hw

    The Keyboard FeatherWing is an easy way to add a handheld Qwerty keyboard and a 2.6” color display (+ more) to your project! It fits well in your hands and is great for typing with your thumbs, early 2000s-style.

    58 parts43
  • 2 layers53 × 53 mmKeypad, the printed circuit board in 3D

    Keypad

    realworldpixel/home-assistant-keypad

    A 9-key macro keypad for Home Assistant, running ESPHome. Every key is RGB backlit, and comes in two variants: one that sits on a desk and one that mounts on a wall, with magnets or screws.

    36 parts29

Questions

How big is the OCXOBoard PCB?

It measures 65 × 85 mm and has 2 copper layers, 1.6 mm thick.

What parts does the OCXOBoard use?

24 parts, built around the 74AHCT1G125SE and L7805. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the OCXOBoard KiCad files?

From the gibbi/PicoGPSDO repository on GitHub, at the commit this page was made from: the board is hardware/OCXOBoard/OCXOBoard.kicad_pcb and its schematic hardware/OCXOBoard/OCXOBoard.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the OCXOBoard design in my own project?

Its repository states no licence, so its author keeps all rights: ask gibbi before reusing the design.