

OCXOBoard
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
274AHCT1G125SE
SOT-353-40℃~+125℃ 1 1 4.5V~5.5V 4.7ns@5V,50pF 40uA 74AHCT 8mA 8mA Schmitt trigger Tri-State Unidirectional SOT-353 Buffers, Drivers, Receivers, Transceivers ROHSDiodes IncorporatedBuffers, Drivers, Receivers, TransceiversL7805
TO-220ST0℃~+125℃@(Tj) 1 1.2A 20V 2V@(1A) 42uV 500uA 5V 73dB@(120Hz) Fixed Positive Short Circuit Protection TO-220ST Voltage Regulators - Linear, Low Drop Out (LDO) Regulators ROHSOSENVoltage Regulators - Linear, Low Drop Out (LDO) Regulators
README
README.mdpicoExtRef — 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

Repository layout and components
| Area | Role |
|---|---|
src/main.c | Boot, 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.c | UART RX (frame assembly + checksum), UBX decode, fills current_gps_data (NAV-CLOCK, TIM-TP, PVT, etc.). |
include/ubx_clean.h | Shared GPS/UBX structs and packet layout used by the parser. |
src/gpsdo_control.c, include/gpsdo_control.h | Finelock hysteresis, coarse/fine control outputs (u_ns), NAV-CLOCK bias handling, telemetry tr flags. |
src/gpsdo_tune.c, include/gpsdo_tune.h | Runtime tunables and USB one-line CLI (kp, fine_mode, gates, etc.). |
include/display.h | SSD1306 OLED over I2C (optional); live status text on the module. |
pico_gpsdo_web.py | Flask host app: reads Pico USB serial, parses {…} telemetry, serves charts, tune forms, log tail, optional series clear. |
pico.py | Developer 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)
- u-blox → UART0 → UBX frames →
current_gps_data(clkB,qErr,dac, fix, etc.). - Servo (when
mode servo): coarse onclkD_biaswhen bias steps; fine onqErr(P-only or edge mode) in finelock. - USB CDC → compact JSON lines for the host web UI and
printfdebugging.
Quick start
# 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 usageParts
24| Qty | Value | Footprint | References |
|---|---|---|---|
| 3 | R | Resistor_SMD:R_1210_3225Metric_Pad1.30x2.65mm_HandSolder | R2, R3, R4 |
| 2 | 0.1uf | Capacitor_SMD:C_1210_3225Metric_Pad1.33x2.70mm_HandSolder | C1, C4 |
| 2 | 1000uf | Capacitor_Tantalum_SMD:CP_EIA-7343-43_Kemet-X_Pad2.25x2.55mm_HandSolder | C2, C3 |
| 2 | C | Capacitor_SMD:C_1210_3225Metric_Pad1.33x2.70mm_HandSolder | C6, C7 |
| 2 | Fixed Vcont | Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mm | FixedVcont1, FixedVcont1 |
| 1 | 10MHz | gibbi_custom:SMA_EDGE_GIBBI | 10MHz1 |
| 1 | 1202 | Resistor_SMD:R_1210_3225Metric_Pad1.30x2.65mm_HandSolder | R5 |
| 1 | 1500 | Resistor_SMD:R_1210_3225Metric_Pad1.30x2.65mm_HandSolder | R1 |
| 1 | 225 | Capacitor_SMD:C_1210_3225Metric_Pad1.33x2.70mm_HandSolder | C5 |
| 1 | 3302 | Resistor_SMD:R_1210_3225Metric_Pad1.30x2.65mm_HandSolder | R6 |
| 1 | 5Vout | gibbi:Simple5V | J2 |
| 1 | 74AHCT1G125 | Package_TO_SOT_SMD:SOT-23-5_HandSoldering | U2 |
| 1 | C | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C8 |
| 1 | DC Connector | Connector_AMASS:AMASS_XT30PW-M_1x02_P2.50mm_Horizontal | J1 |
| 1 | L7805 | gibbi:TO-7805 | U1 |
| 1 | LED | Diode_SMD:D_1210_3225Metric_Pad1.42x2.65mm_HandSolder | D1 |
| 1 | Vcont | gibbi_custom:SMA_EDGE_GIBBI | Vcont1 |
| 1 | ~ | gibbi:MULTI_XO | OCXO1 |
More from gibbi/PicoGPSDO
1- 2 layers70 × 55 mm

Similar boards
- 2 layers50 × 110 mm

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 mm

- 2 layers199 × 57 mm

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 mm

- 2 layers40 × 18.5 mm

- 2 layers40.1 × 49.3 mm

Big Honking Button
wntrblm/Big_Honking_Button
A simple Eurorack sampler and performance module in a silly package.
54 parts60 - 2 layers68 × 100 mm

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 mm

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.