Skip to the content
PCBKitNew board
4 layers100 × 80 mmHamref proto v0 1, the printed circuit board in 3D

Hamref proto v0 1

OH2LAK/HamRef1

Disciplined reference oscillator + NTP for ham radio station with uBlox LEA-M8S

Size
100 × 80 mm
Copper layers
4
Thickness
1.6 mm
Parts
109
Nets
60
Pads
349
Tracks, vias
952, 326
Pours
12
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
21 Sep 2026
Updated
3 Nov 2026

Overview

Hamref proto v0 1 is an open-source printed circuit board by OH2LAK, from the OH2LAK/HamRef repository on GitHub. It is a 4-layer board of 100 × 80 mm with 109 parts on 60 nets, routed with 952 tracks and 326 vias.

It is built around the 74AHCT1G125SE, 74LVC1G17Z and 74LVC1G125, with the LEA-M8S-0, AD5693RBRM and SI5351C-B-GM among its other parts. Its parts include 40 capacitors, 22 resistors, 11 connectors, 10 ICs and 2 diodes. It belongs with the radio and wireless boards and the RP2350 boards of this library.

Main components

9

README

README.md

HamREF

A small GNSS-disciplined 10 MHz frequency reference and precision time server for the amateur radio shack — built around the u-blox LEA-M8S GNSS module.

Status: early architecture / pre-prototype. Proto-1 schematic and PCB (v0.1) are generated and routed, not yet built or tested; a firmware proof of concept (PIO counter + disciplining loop, host-simulated, not yet run on hardware) is in firmware/. This README documents the design as currently planned so the repo has a real starting point; sections below are marked TODO where work hasn't started.

HamREF mockup

HamREF proto-1 PCB (3D view from KiCad)
Proto-1 bring-up board (v0.1): 4-layer, 100 × 80 mm (fits the Fischer AKG 105.26 case grooves), 3D view from KiCad. Design files in hardware/proto-v0.1/.

The proto-1 board has four coaxial connectors along the rear edge: SMA (GNSS antenna input), BNC REF OUT (10 MHz from the OCXO), BNC 1PPS OUT and BNC AUX OUT. AUX OUT outputs a programmable frequency (3.3 V CMOS) generated by the Si5351C synthesizer, which is clocked from the OCXO, so it is locked to the same reference as the 10 MHz output.

What this is

HamREF provides two things a well-equipped station needs and usually has to buy separately:

  • A 10 MHz reference output (BNC, 50 Ω) to lock transceivers, synthesizers, and test equipment, plus a programmable AUX output for other frequencies (e.g. 25 MHz, 27 MHz for satellite LNBs, 40 MHz for a Pluto SDR, or an arbitrary frequency).
  • A 1 PPS timing output which can be used to lock and synck devices to the world-standard one pulse per second.
  • A precision time source for the shack computer, disciplined by GNSS, accurate enough for FT8 and other digital modes.

Status (GNSS lock, satellite count, PPS accuracy, OCXO discipline state) is shown on a small monochrome OLED plus two multicolor status LEDs (GPSDO / NTP) on the front panel — color and blink/steady pattern indicate different states. A front-panel rotary encoder drives the menu; full parameter configuration is also available over USB (see Enclosure below).

Why not just use the GNSS module's own 10 MHz output?

The LEA-M8S can output a configurable timepulse from 0.25 Hz to 10 MHz directly, but that signal is a digitally synthesized pulse train (derived from the module's internal TCXO + fractional-N synthesizer), not a clean analog oscillator. At 10 MHz its jitter (the module's spec is 30 ns RMS / 60 ns 99% at 1 Hz) is significant relative to the 100 ns period, it can show small phase steps at each second boundary, and it provides no holdover if GNSS lock is lost.

HamREF instead uses the classic GPSDO approach: the LEA-M8S's single TIMEPULSE output is configured as 1PPS, and that one pulse-per-second reference is used by the MCU to discipline a separate free-running OCXO via a DAC-driven EFC loop with a long time constant. The 10 MHz output comes from the OCXO itself — far lower phase noise, plus holdover if satellite lock drops. The same 1PPS/NMEA data feeds the time service to the host computer.

Full rationale and the architecture decision log: docs/architecture-and-plan.md (in Finnish).

Enclosure

Fischer Elektronik AKG 105.26 (part AKG1052680ME) — an extruded aluminum mini case for 100 mm eurocards, 105 × 100.3 × 26 mm, natural anodized, with integrated cooling-fin channels. Front and rear panels are separate 2 mm cover plates.

The 26 mm case height (≈22 mm usable panel height) ruled out the originally planned 240x240 color TFT. An EC11-class rotary encoder does fit, though (body ≈11.7×12–13×4.5–8.5 mm, ø7 mm panel bushing — verified against the Farnell EC11 datasheet), so the front panel keeps a physical control after all:

PanelContents
Front0.91" 128x32 OLED (status), 2 multicolor LEDs (GPSDO, NTP), rotary encoder (menu/control)
RearSMA (GNSS antenna), BNC (1PPS OUT), BNC (REF OUT 10 MHz), BNC (AUX OUT, programmable), USB-C (host + 5V power)

The 22 mm limit also constrains component height on the PCB (OCXO included) — still an open item, see the architecture doc.

Architecture overview

HamREF architecture block diagram
Block diagram (editable source: HamREF-architecture.svg).

The GNSS module's 1PPS (TIMEPULSE) disciplines the OCXO through the MCU: the RP2350 measures the 10 MHz against the PPS with PIO and steers the EFC through the DAC. REF OUT (10 MHz) comes from the OCXO itself, 1PPS OUT from the GNSS TIMEPULSE, and AUX OUT is a programmable output (Si5351C clocked from the OCXO).

What is the USB-C port, in plain words? It is a normal USB-C connector (USB 2.0 only, no Power Delivery, so always 5 V) wired straight to the RP2350's own USB controller. One cable does two jobs: it powers the whole device and it carries data. The data side is a virtual serial port over USB (class CDC-ACM): the computer sees an ordinary serial port (COMx on Windows, /dev/ttyACM0 on Linux, /dev/cu.usbmodem… on macOS) and needs no special driver. Over that port the device sends the GNSS text sentences and PPS timing data to a small helper program on the computer, which feeds chrony; the computer can also send configuration commands back.

AcronymMeaning
GNSSGlobal Navigation Satellite System: GPS, Galileo, GLONASS, BeiDou
1PPS / PPSOne Pulse Per Second: a pulse aligned to the start of each UTC second
TIMEPULSEu-blox name for the LEA-M8S's programmable timing-pulse output (here set to 1PPS)
UARTUniversal Asynchronous Receiver/Transmitter: the simple serial link between LEA-M8S and RP2350
NMEAText sentences ($GPGGA, $GPRMC …) in which GNSS receivers report time, position and satellites
UBXu-blox's own binary protocol, used to configure the LEA-M8S
USB VBUSThe 5 V power line of a USB cable
CDC-ACMUSB Communications Device Class, Abstract Control Model: the standard way to make a USB device look like a serial port
PDUSB Power Delivery: negotiation of voltages above 5 V (not used here)
I2CTwo-wire bus used for the OLED, the DAC and the Si5351C
GPIOGeneral-purpose input/output pin (drives the status LEDs, reads the encoder)
PIOProgrammable I/O: the RP2350's small hardware state machines that count the 10 MHz and timestamp the PPS without CPU jitter
Si5351CSilicon Labs programmable clock generator (I2C); makes the AUX OUT frequency from the OCXO reference
OCXOOven-Controlled Crystal Oscillator: a crystal kept at constant temperature, the source of the 10 MHz
EFCElectronic Frequency Control: the analog voltage input that fine-tunes the OCXO's frequency
DACDigital-to-Analog Converter: turns the MCU's number into the EFC voltage
SHMShared Memory: one of chrony's reference-clock interfaces, where the host helper hands over the timestamps
chronyThe time-sync daemon on Linux/macOS that disciplines the computer's clock (an NTP implementation)
NTPNetwork Time Protocol

Key hardware decisions so far:

ItemDecisionNotes
GNSS moduleu-blox LEA-M8SFixed — parts already on hand. Footprint and pinout are shared with LEA-M8T.
AntennaActive, externalAntenna supervisor + R_BIAS per u-blox HIM.
MCURP2350A on a ready-made Raspberry Pi Pico 2 boardReady-made board keeps HamREF easy to build as a kit. PIO blocks give deterministic 10 MHz counting and 1PPS timestamping without WiFi interrupt jitter; native USB (TinyUSB); UF2 firmware updates. No WiFi in v1. Raspberry Pi Pico 2 (micro-USB) remains a fallback.
Oscillator5 V OCXO, analog EFC (CTI OSC5A2B02 selected for the prototype)e.g. Trimble 65256 / IsoTemp 143-141 / CTI OC5SVC25 / Bliley NV47M1008 class part — physical height inside the 22 mm case is still open, see architecture doc.
EnclosureFischer Elektronik AKG 105.26 (AKG1052680ME)105 × 100.3 × 26 mm extruded aluminum, 100 mm eurocard.
Display0.91" 128x32 mono OLED, I2CSSD1306-class, 38 × 12 mm PCB (active area 22.4 × 5.6 mm) — fits the 22 mm panel height with margin; 0.96" 128x64 modules do not.
Front panelOLED + 2 multicolor LEDs (GPSDO, NTP) + rotary encoderEC11-class encoder confirmed to fit the 22 mm panel height. LED color/blink pattern encodes state (firmware TBD).
Rear panelSMA (GNSS antenna), BNC (1PPS OUT), BNC (REF OUT 10 MHz), BNC (AUX OUT, programmable), USB-C (host + 5V power)All connectors on the back; layout across the 105 mm width still to be confirmed at PCB stage.
Power + host linkUSB-CPowers the device (5V); CDC-ACM carries PPS/NMEA to a host-side helper feeding chrony (SHM/PPS refclock), and doubles as the configuration interface alongside the encoder/OLED menu.

See the architecture doc for the full reasoning, open questions, and the phased project plan.

Status / roadmap

  • Requirements and architecture defined
  • Enclosure selected (Fischer AKG 105.26) and display/panel layout locked to it
  • MCU selected (RP2350 / Pico 2)
  • Proto-PCB v0.1 (bring-up board, see architecture doc)
  • Breadboard proof of concept (PIO PPS capture + frequency counting, disciplining loop, USB time delivery)
  • KiCad schematic
  • PCB layout
  • Enclosure machining (panel cutouts)
  • Firmware proof of concept (PIO gate counter, disciplining loop, host simulation) - see firmware/
  • Firmware on real hardware (calibration, OLED/menu, GNSS configuration, host helper)
  • Calibration and verification against a reference

Repository structure

text
hardware/proto-v0.1/   KiCad project (schematic, PCB) for the proto-1 board
hardware/tools/        Python scripts that generate the schematic/PCB
firmware/              RP2350 firmware (Pico SDK) and host simulation
docs/                  Architecture notes, hardware plans, images

Building it yourself

Firmware: see firmware/README.md (Pico SDK, CMake, UF2). The disciplining loop can be tried without hardware with the host simulation described there. Hardware: open hardware/proto-v0.1/ in KiCad; the pre-order checklist is in docs/hardware/board-finishing-checklist.md. A bill of materials and bring-up guide will follow once the board is built.

Hardware reference documents

Design decisions are based on:

  • u-blox LEA-M8S Data Sheet (UBX-16010205)
  • u-blox LEA-M8S/M8T Hardware Integration Manual (UBX-15030060)
  • Fischer Elektronik AKG1052680ME data sheet (enclosure)
  • Raspberry Pi RP2350 datasheet and Waveshare RP2350-Plus schematic / STEP model (docs/datasheets/)

License

Not chosen yet (candidates: CERN-OHL-S for hardware, MIT or GPL for firmware, CC BY-SA for docs). Until a license is added, all rights are reserved.

Authors

Erik, OH2LAK Others will be too, when I find them and convince them this is a good project :)

Parts

109
QtyValueFootprintReferences
25100nFC_0402_1005MetricC10, C11, C13, C15, C16, C17, C19, C20, C24, C25, C26, C27, C28, C30, C31, C32 +9
810uF 10VC_0805_2012MetricC2, C3, C9, C21, C22, C23, C29, C35
64.7kR_0402_1005MetricR7, R8, R9, R10, R20, R21
5100kR_0402_1005MetricR1, R2, R3, R4, R6
310kR_0402_1005MetricR13, R17, R18
347R_0402_1005MetricR15, R16, R19
2100uF 10VCP_Radial_D6.3mm_P2.50mmC1, C5
210nFC_0402_1005MetricC12, C18
21uFC_0603_1608MetricC6, C7
2470kR_0402_1005MetricR11, R12
274AHCT1G125SOT-23-5U7, U10
274LVC1G17SOT-23-5U4, U6
2BLM18PG221SN1DL_0603_1608MetricFB1, FB2
11.1A holdFuse_1812_4532MetricF1
110R_0402_1005MetricR5
125MHzCrystal_SMD_3225-4Pin_3.2x2.5mmY1
133R_0402_1005MetricR14
1330R_0402_1005MetricR22
13V3TestPoint_Pad_D1.5mmTP4
13V3_GNSSTestPoint_Pad_D1.5mmTP3
14.7uFC_0603_1608MetricC14
15V_DACTestPoint_Pad_D1.5mmTP5
15V_EXTPinHeader_1x02_P2.54mm_VerticalJ1
15V_MAINTestPoint_Pad_D1.5mmTP1
15V_OCXOTestPoint_Pad_D1.5mmTP2
174LVC1G125SOT-23-5U8
1AD5693RMSOP-10_3x3mm_P0.5mmU5
1AUX_OUTTestPoint_Pad_D1.5mmTP12
1BNC 1PPS OUTBNC_TEConnectivity_1478035_HorizontalJ4
1BNC AUX OUTBNC_TEConnectivity_1478035_HorizontalJ5
1BNC REF OUTBNC_TEConnectivity_1478035_HorizontalJ3
1EFCTestPoint_Pad_D1.5mmTP10
1GNDTestPoint_Pad_D1.5mmTP6
1GNSS_RXDTestPoint_Pad_D1.5mmTP8
1GNSS_TXDTestPoint_Pad_D1.5mmTP7
1GP16_OCXO_FLTTestPoint_Pad_D1.5mmTP14
1J ENCODERPinHeader_1x04_P2.54mm_VerticalJ7
1J LEDS (2x WS2812B)PinHeader_1x03_P2.54mm_VerticalJ8
1J OLED 0.91in I2CPinHeader_1x04_P2.54mm_VerticalJ6
1J RESET GNSS (short=reset)PinHeader_1x02_P2.54mm_VerticalJ9
1J RUN (short=MCU reset)PinHeader_1x02_P2.54mm_VerticalJ10
1J SPARE GPIOPinHeader_1x07_P2.54mm_VerticalJ11
1JP1 PWR SELPinHeader_1x03_P2.54mm_VerticalJP1
1JP2 OCXO FORCE-ONPinHeader_1x02_P2.54mm_VerticalJP2
1JP3 1PPS SRC (1-2 GNSS, 2-3 MCU)PinHeader_1x03_P2.54mm_VerticalJP3
1LEA-M8S-0ublox_LEAU3
1LP5907-3.3SOT-23-5U2
1NTC 10kR_0603_1608MetricRT1
1OCXO_OUT_RAWTestPoint_Pad_D1.5mmTP11
1OSC5A2B02OCXO_OSC5A2B02_ESTX1
1PPS_GNSSTestPoint_Pad_D1.5mmTP9
1PPS_OUTTestPoint_Pad_D1.5mmTP13
1RP2350-PlusRP2350-Plus_CastellatedA1
1SMA ANTSMA_Amphenol_901-143_HorizontalJ2
1SMBJ5.0AD_SMBD1
1SS14D_SMAD2
1Si5351C-B-GMQFN-20-1EP_4x4mm_P0.5mm_EP2.6x2.6mmU9
1TPS2065CSOT-23-5U1

Questions

How big is the Hamref proto v0 1 PCB?

It measures 100 × 80 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Hamref proto v0 1 use?

109 parts, built around the 74AHCT1G125SE, 74LVC1G17Z, 74LVC1G125 and LEA-M8S-0. 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 Hamref proto v0 1 KiCad files?

From the OH2LAK/HamRef repository on GitHub, at the commit this page was made from: the board is hardware/proto-v0.1/hamref_proto_v0_1.kicad_pcb and its schematic hardware/proto-v0.1/clock.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Hamref proto v0 1 design in my own project?

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

Similar boards

  • 4 layers285 × 160 mmPcb a power, the printed circuit board in 3D

    Pcb a power

    meshsat/meshsat-fieldkit

    MeshSat field kit hardware: the V1 kits as built, the V2 carrier PCB set for the Peli 1450 and the compact pocket-sized node (KiCad and OpenSCAD sources, generators, release files, build guides).

    137 parts4CERN-OHL-S-2.0
  • 2 layers191.3 × 164 mmXYmatics E64, the printed circuit board in 3D

    XYmatics E64

    XyrusB2010/XYmatics-E64

    A 5-axis Klipper mainboard, powered by a Raspberry Pi Compute Module and STM32F407

    282 parts
  • 2 layers233.4 × 280 mmCft board0, the printed circuit board in 3D

    Cft board0

    alexiosc/cft

    The CFT homebrew minicomputer

    299 parts6GPL-3.0
  • 2 layers200 × 115 mmMusicbrain busboard v2, the printed circuit board in 3D

    Musicbrain busboard v2

    MarkWestbroek/MusicBrain

    A central brain running on teensy or a lighter MCU to process any control signals (MIDI, CV, our own) into the same but adding logic, ADSRs, DCOs, CV matrices etc. to it

    94 partsMIT
  • 4 layers180 × 170 mmHw openmower yardforce, the printed circuit board in 3D

    Hw openmower yardforce

    xtech/hw-openmower-yardforce

    This repository contains the design files for a custom mainboard specifically designed for converting YardForce mowers to OpenMower

    293 parts12CC-BY-4.0
  • 2 layers40 × 50 mmSsus, the printed circuit board in 3D

    Ssus

    ldab/dude-dirty-usb-disconnect

    DUDE, Dirty USB Disconnect. ESP32-S3 host powered, managed 2x USB Hub

    46 parts1WTFPL
  • 4 layers40 × 80 mmUSB pasthrough, the printed circuit board in 3D

    USB pasthrough

    beattie/stm32f723-USB-demo

    A hardware and firmware demonstration platform based on the STM32F723VET6, a Cortex-M7 with an embedded USB HS PHY.

    100 parts
  • 4 layers90 × 130 mmAdventure board, the printed circuit board in 3D

    Adventure board

    picorubykaigi/adventure-board-pcb

    PicoRubyKaigi 2026 の オリジナルRP2350 基板「Adventure Board」の設計データ(KiCad 9)

    362 partsCERN-OHL-P-2.0