Universal VFO based on the Si5351




Downloads:  Hex file for the 16F1825 click for 25MHz version or 27MHz version. For control board schematic click here and for the Si5351 board click here .

Please scroll down for Arduino version!

This VFO is based on the popular Si5351. It consists of two parts: the controller board and the Si5351 board. Both designed by Joris (KTH rf-Design).

For available PCB’s please contact Joris (KTH rf-Design) at  kthkit [at] xs4all [dot] nl

The control board has a PIC 16F1825 on board and uses the popular OLED SSD1306 display.
Because there are two versions of the Si5351 with different I2C addresses and there are different boards as well, I made two versions of the software, for 25MHz and 27 MHz x-tal frequency. The KTH-Si5351 board is using the Mouser Si5351 and a x-tal of 27 MHz, the Adafruit board is using a 25 MHz x-tal. The software accepts both versions of the Si5351.

There are 3 clock outputs available having the following outputs:
CLK0:   Tx Output frequency from 1 – 125 MHz (same frequency as on the display).
CLK1:    First Rx LO calculated from CLK0 + or – CLK2.
  Rx IF frequency.  For instance 9 or 10.7 MHz. Every frequency is possible.

Si5351 board

The two push buttons are for Calibration and selecting (and tune) the IF frequency.
The toggle switch is for selecting RIT. With this function you can tune the Rx frequency separate from the Tx frequency.

Below you see a test setup.

Si5351 VFO test setup

Si5351 VFO test setup (PIC version)


– Output of 3 different frequencies (Tx, Rx, BFO/LO) on CLK0-CLK2
– Select and tune BFO/LO to any IF frequency
– Rx frequency based on Tx +/- BFO/LO
– Calibration function (see below)
– RIT function (only the Rx frequency is tuned with 100 Hz step size)
– Push the calibration button
– The frequency will be set to the X-tal frequency
– Measure the frequency at CLK0
– Tune to the measured frequency and push again the calibration button
– Calibration is ready.

Note:  If calibration will not succeed: You can reset the calibration by pressing the Calibration button twice without tuning. Then try again to calibrate.


Arduino version available!

Because of the popularity of the Arduino, I rewrite the PIC software for using an Arduino-Nano.
The software has the same functionality as the PIC version. The Arduino version is partly based on the original MultiFeaturedVFO software of Jason Mildrum, NT7S and Przemek Sadowski, SQ9NJE.
You find the settings (x-tal frequency and I2C address) for the used Si5351 board in the VFO_si5351.h file.


  • Because the newest version of Jason’s Si5351 is not compatible with my sketch,  I’m using the 2015 version of the Si5351 library and renamed the source files to RWE_si5351).
    For that reason you can download this updated library from here.  (This zip file also includes the Rotary library).
  • If the resolution of your OLED display is not OK, please change it in the Adafruit_SSD1306.h file.

For downloading the Arduino sketch click here.  For the schematic click here.

Tx on CLK0

Tx on CLK0

IF / BFO on CLK2

IF / BFO on CLK2

Calibration X-tal frequency

Calibration X-tal frequency