The Arduino Nano. Si5351 and the Color TFT.

[Critical and Important Note: I am using Si5351 PLL Modules as supplied by Adafruit Industries and/or ones custom built for me based on the Adafruit design. In case you are wondering about the custom built modules some of my Si5351 Modules have a Blue LED that is lit when power is applied. Kind of cool Juliano Blue! Hans Summers sells a Si5351 kit at very competitive prices to the Adafruit board. Here is the caution: The boards from Hans use a different clock oscillator frequency for reasons of more accurate frequency generation at very low frequency divisions. He has notes on this in his git hub documentation. Thus using my sketches and Hans Summers Boards you may get slightly different frequency outputs. I am not sure what you change to fix this as what I was told to do I could not find the lines in the code to fix this. If you have the Summers board then contact him directly!]

The Sudden transceiver can almost (I did say almost) be seen, as a minimalist rig as there are only two devices in the IF Module – two NE602’s. Beyond that are four other modules comprised of a RF Amplifier/Band Pass Filter, An Audio Amplifier, a Microphone Amplifier and finally a second Band Pass Filter/Transmit linear amplifier chain. That is it!

But wait what takes it out of the minimalist class is the Arduino Nano that not only handles the command of the digital frequency generation of the LO and BFO signals but also performs command control and communications for a whole host of other functions and capabilities.



Here is what the three element (Nano, Si5351 and the Color TFT) brains of the Sudden Transceiver performs:


  • Generates the Local Oscillator and Beat Frequency Oscillator signals. There are four sets of signals that are generated inclusive of the Upper and Lower Sideband BFO Frequencies, the Main VFO (VFO A) and a Secondary independent VFO (VFO B). The code for the range of frequencies that can be covered includes all of the ham bands between 160 and 10 Meters. But for the Sudden 40 Meter Transceiver project the default start up frequency is 7.2 MHz. You can physically tune up or down the whole range of frequencies (a lot of cranking of the dial) but this is also an interesting experiment of the performance of the Band Pass Filter (BPF). It is pretty easy to tell where the signals drop off above and below the design frequency and so that gives you a clear indication of the BPF range. The LO is above the incoming signal frequency by the amount of the BFO frequency. Thus for 40M the LO is operating around 16 MHz and the internal code adjustment for frequency with operation on either USB or LSB is automatic. Thus the "dial" (for you analog guys) will always show the true transmit frequency on the Color TFT display.
  • There is an adjustable step tuning rate with a default of 100 Hz. The original uBitx had a step rate of 50 Hz and variable rate tuning which for me who suffers from FFS (Fat Finger Sybdrome) was totally incompatible. Other step rates include 1kHz, 10kHz, 100khz and even 10 Hz. The step tuning change can be accomplished either with a small momentary push button located below and to the left of the main tuning knob or by pushing in the main tuning knob to activate the internal momentary push button in the encoder assembly. Beacuse of my FFS when I use the knob, somehow I always seem to move the dial. The additional push button solves that problem. Just so you don't loose track of where you are, the display shows what is the step tuning rate.
  • Provides signals for displaying pertinent information.
  • Controls sequencing of actions such as enabling transmit.
  • Generates a timed 988 Hz pulsed tone that is used for tune-up.
  • Takes analog information such as signal levels and with appropriate mathematical manipulation can represent an S Meter Reading.


In the course of developing the software for this project we only used about 70% of the Arduino Nano’s programming capacity so we have some head room for added features.

Let us now tour our display. The top frequency readout is VFO A, which is not active at this time since Green Dot that would indicate it is in use is not lit. But you can see the Green Dot below the B which indicates it is the active VFO. The selection of either VFO A or VFO B is done with a simple panel mounted SPST switch.

Right below the A display along the left edge are the word USB LSB to indicate the sideband selection. Noteworthy is the Red Dot to the right of LSB which indicates its selection.

To the right of LSB in small print is the frequency 7185000 which is the VFO B setting and this small size $1 display only appears during transmit and its location is tied to VFO B. Were VFO A being used for transmitting, then the frequency 7210500 would appear there.

Along the right and side is 100Hz and my call sign There are selectable step rates including the default 100 Hz, but also 1 kHz, 10kHz, 100kHz and 10 Hz which are sequenced by depressing the encoder knob. My call is to remind me who I am.

In the lower third we have the S Meter and to, the right of “S9”, is the word TUNE. This only appears when you initiate the TUNE function which is a 10 second 988 Hz pulsed tone that is fed into the balanced modulator. The 988 Hz tone is a square wave that must be passed through a three stage RC filter.

I have a SPST switch that I call a MOX control which is nothing more than a switch that is connected in parallel to the PTT so you can manually operate (the) transmitter or MOX. I engage the MOX and then a momentary press of the Tune Push Button and you have a pulsed tone for tune up.

At the very bottom you have the VFO B readout. A and B operate independently so that you can transmit or receive on either VFO.

Later on will be a section on detailed schematics, LT Spice Simulations and the Arduino Sketches. You can download the information from this web site. I do not use GitHub; but the sketches are in Notepad in a text format. Open up an IDE and paste the into the sketch. In a file folder in the Arduino directory marked Sudden include the sketch and the supporting files -- four of them inclusive of si5351.h and .cpp and the Rotary.h and cpp. Under the Arduino directory in the folder libraries you will need additional libraries for the display. If this all seems a mystery to you, STOP and find out what you need to know.

There are some things that as a personal user you will want to change such as the Splash Screen and have your call sign on the display. I have reserved 7 spaces for the call sign such as W6JFR/7 (my former call sign which I had for 42 years). The seven spaces will easily accommodate calls such as GW4*** or KK6***. There is probably room for 8 spaces but that will make things tight. If you have a two letter call then you would leave three spaces in the code so that the print statement would be display.print("___N6QW"); or old call sign display.print("W6JFR/7"); .

The Arduino Sketch

The very first question that will be asked is how do I get the Color TFT?

The answer is and is my source : A $10 Bill will get you two*.

Color TFT Supplier

A Special Note about the Color TFT Supplier. Initially I had a link above that was from my latest buy of the Color TFT's from my long time supplier. I was alerted by a ham in the UK (who has his SPRAT and I am still waiting for mine) that the item originally linked has 11 pins while the older display which is in my rig has 8 Pins. The other issue some of the pins on the 11 pin version have different names. Well don't panic (like I initially did) as either the 11 Pin or 8 pin will work. Use the magic decoder ring below.


8 Pin Version 11 Pin Version
LED 3.3 VDC (Nano) Vcc 3.3 VDC (Nano)
Reset D8 RST D8
CS D10 CS D10
GND Gnd Pin GND Gnd Pin
Vcc Not Used All other Pins not used


We will start firstly with the intercomponent wiring of the Arduino, the Si5351 and the Color TFT display. There are eight pins on the 160X128 Color TFT display and one is not used, the one marked Vcc. The wiring interconnection is also contained within the sketch itself.

There are a total of five (05) switches used with four connected to the Arduino and the 5th is in parallel with the PTT on the microphone. Two of the switches (Step Rate and Tune) are momentary push buttons, The USB/LSB Select and the VFO- A/VFO-B Select are SPST miniature toggle switches.

In the last photo you can see how the 20 Meter version will appear on the display. Additionally the 20 Meter Sketch info is on the link below and the default frequency is 14.200 000 MHz. See if yo can spot a subtle difference bewteen the two display faces. There was a reason for this ... the same code can be used for other transceiver projects. Look close. BTW there are three splash screens upon boot up and these can be customized for your own messages. Just look for the sub-routine that addresses Splash Screens.

Wiring Listing for the Arduino




Arduino Pin Number


Connects to …






Encoder A



Encoder B



PTT to Ground through a 1N4148 Isolating Diode



To SPST switch to Ground VFO A or VFO B Select



Tone Pin ~ 988 Hz Square Wave



Pin High = 5V (Control other functions)



Reset Pin on the Color TFT Display



AO Pin on the Color TFT Display



CS Pin on the Color TFT Display



SDA Pin on the Color TFT Display






SCK Pin on the Color TFT Display



LED Pin on the Color TFT Display



Used internally to the Code NC



To SPST Switch to Ground USB/LSB Select



To Momentary Push Button to Ground = TUNE



To Momentary Push Button to Ground = Step Change



SDA to Si5351 PLL



SCL to Si5351 PLL



S Meter Source Input Voltage






To the Si5351 PLL



To the Si5351 PLL



Source voltage = 9 VDC from 3 terminal, 1-amp Regulator



To GND side of 9 VDC Regulator



To Ground Pin on the Encoder

There are three ground pins on the Arduino Nano.




Element Sketch Descriptor
1 Sudden Main Arduino Sketch (40 Meters)
2 Si5351.cpp
3 Si5351.h
4 Rotary.cpp
5 Rotary.h
6 Sudden 20 Meters Sketch

Construction Photos