This is a very minimalistic 20meter transceiver Digital Frequency Synthesizer with 0.96 or 1.3 inch 128x64 OLED Display for Ham-radio use.
This is a sketch to control a Silicon Labs Si5351a board produced by Floating Ground - SV1AFN Lab with an Arduino Nano, Uno, ProMini board or even a bare ATMega328 chip. The last option has not been verified. It uses a cheap no-name OLED with the above specs having a SSD1306 controller. Both sizes of display can be seen in the pics. The DFS has very minimalistic functions such as Frequency Change, Frequency Step Control, Sideband Select and predefined Frequency Limits to suit my needs.
The project has been built as a Digital Frequency Synthesiser to give full 20 meter Band coverage (14.000- 14350 MHz) to a monoband SSB QRP tranceiver, ILER20, that I had built in kit form 7 years ago. As the transceiver originally used a crystal VXO (Variable Crystal Oscillator) with limited capabilities to cover the full 350 KHz portion of the 20 meter Ham band, I decided to modify it with this project and gain access to FT-8 mode as well.
The sketch that inspired me, is the work of Antony Watts, M0IFA and I have amended it to cover my needs as a 20 meters ONLY DFS.
Schematics for using an Arduino Nano and a bare ATMega328P-PU MCU are attached together with pics of my project and the schematic of ILER20 (property of EA3GCY, Javier Solans) as well a table with frequency needs. As Si5351a has 3 outputs, CLK0 is used for L.O. frequency, CLK1 for USB or LSB crystal substitution and CLK2 for optionally producing a test frequency.
To compile the sketch without producing errors, you will need to have Oliver Kraus U8g2 very fine display library installed in your IDE, as well as Jason Mildrum's, NT7S, latest version of fabulous Si5351 library (Etherkit/Si5351Arduino) and copy Rotary.cpp, Rotary.h and Oled.h files from this repository here, inside the folder where "MY_SSB_TCVR_20-DFS_v1.2x.ino" file will reside. Please do that before verifying or uploading the sketch.
Reading the comments within the sketch will help you to become familiar with the program's parameters such as frequency limits, start frequency, crystal filter frequency and bandwidth as well as how to offset the Si5351a board's Crystal nominal frequency of 27.000000 MHz to the actual frequency value of your board (usually +/- 100 Hz to 500 Hz). You can check the accuracy of your produced Frequency square waveform (I have chosen 8.000000 MHz) by connecting one of the three outputs (CLK2) to a Frequency Counter and measure the deviation, or use a Shotwave Receiver in AM mode to zero beat the produced signal. The sketch has currently my board's Crystal CALIBRATION value. If you use the same type of Si5351a board, there should not be big variations.
The sketch is set to start DFS at 14.200 MHz (to match my taste) with a Frequency Step of 1KHz and Upper Sideband(USB) selected. Frequency Steps of 10 Hz, 100 Hz, 1KHz and 10 KHz are provided for covering a single Ham band with 350 KHz of bandwidth. The rotary encoder is a plain vanila stock type with a built-in push button for the step change. If you hold the button pushed for more than 1 second, you change from USB to LSB.
I have built my DFS on a piece of double-sided perforated board 6 x 4 cm, using an Arduino Pro mini operating at 5 vold that I happened to have available. As it does not have a USB port, I load the sketch through the ICSP port. You can use a FTDI USB port, but frankly I would recommend the use of an OEM Arduino Nano that has a built USB port for the not so experienced with Arduino world constructor. Remember there is a plethora of knowledge on how to do things with Arduino on the internet.