A clock generator (Si5351) controlled by an ATmega328p.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
finga 63b76aa3ef
ci/woodpecker/push/woodpecker Pipeline was successful Details
Update CI, nightly, cargo
4 months ago
board board: Add vias and raise KiCAD version 10 months ago
firmware Update CI, nightly, cargo 4 months ago
knob knob: Improve haptic of knob 10 months ago
.gitignore Generate a PWM signal for the display 2 years ago
.woodpecker.yml Update CI, nightly, cargo 4 months ago
README.md make: Set up release profile and update the readme 10 months ago


Clock Generator status-badge

The "Clock Generator" generates up to three different clock signals between 15kHz and 162MHz.

Though, the board is not limited to this, it is designed to also be usable for other applications.


The board is populated with an ATmega328p, an LCD and its backlight driver, a rotary encoder which is also a push button and is powered via mini USB. The TWI port of the ATmega interfaces the Si5351 which is also driven from VCC and GND, a pin breakout for all unused pins and some more VCC and GND pins as well as an ICSP header.

The general supply voltage behind the LDO regulator is 3.3V

Note that in the PCB layout the display and the rotary encoder are placed on the backside of the PCB.


The Atmega328p is programmable via the ICSP header and is the center piece of the board. All free pins can be used with J3 and the TWI with J4.


Breakout (J3)
Pin left ATmega328p ATmega328p Pin right
1 +3.3V +3.3V 2
3 PC1 PD2 4
5 PC2 PD3 6
7 PC3 PD4 8
9 PD0 PD6 10
11 PD1 PD7 12
13 GND GND 14
TWI (J4)
Pin Signal
1 +3.3V


The Si5351 is capable of generating three 8kHz to 160MHz clock signals.

Internally, the Si5351 consists out of two phase locked loops which feed three parallel and independently configurable clock synthesizers.


The DOGS102 graphic LCD module is controlled by SPI (Serial Peripheral Interface) and the RST (reset) and CD (control data/display data) pins. The contrast can be configured on the setup screen and its value is stored in the EEPROM (Electrically Erasable Programmable Read-Only Memory) of the ATmega.


To drive the backlight, the Timer/Counter0 from the ATmega are used to generate a PWM (Pulse Width Modulation) signal. This enables the backlight to be variably bright. The brightness can also be configured on the setup screen, and is stored inside the EEPROM.

Rotary Encoder

To control the Clock Generator a single rotary encoder which is also a push button is used.


Currently, there are two different implementations of the firmware. The older one which is written in C and is not finished, and the newer one which is in an early but functioning state and written in Rust.

Note that mostly due to the display, the supply voltage after the LDO regulator is 3.3V.

The Rust Firmware

To flash the firmware, connect the ICSP pins of the board to the programmer and inside the firmware/rust/ directory run cargo make --profile release all. This compiles the firmware with the release profile, burns the fuses, writes the default configuration values to the EEPROM and flashes the firmware.