BITX40 for digimodes (part 2) – operating on USB

Some time ago I started my BITX40 adventure. This “kit” sold for $59 by VU2ESE is an interesting platform for those who want to experiment with tranceiver modification, without necessarily risking their expensive equipment. As I am trying to make this transceiver fit for digimodes, one of the first priorities was to make it work on upper sideband (USB), as many digimodes require USB even under 10MHz.

I found many ideas on the internet how this could be accomplished even including hardware modifications. On the other hand software modifications were necessary as well, but these were not described. After some research I found that the solution might even be easier than I thought and only requires one parameter in the software changed. As I did not find a proper guide in the internet how this is accomplished, I will try to explain the process of updating the Raduino software for the BITX40 and how this can be modified for USB operation.

LSB and USB, what is the problem?
Some digimodes require the transceiver to operate on the upper sideband, but why? As sideband signals are transmitted without carrier, they only contain the modulated signal. In order to reconstruct the complete signal including the carrier and make it audible, the sideband signals are mixed with the signals from a beat frequency oscillator (BFO).

The way the sideband signals and the signal from the BFO are mixed defines the upper or lower sideband. For lower sideband the signals are subtracted from the BFO and for upper sideband added to the BFO signal. Therefore the upper and lower sideband are mirrored.

In some digital modes, especially those that use frequency shifting to modulate the information, communication therefore only works when both stations use the same sideband. Otherwise the other station receives a mirrored signal which cannot be demodulated. By convention most digital communication is performed in upper sideband.

Waterfall graph with JT65 Signal in USB (up) and LSB (down)

For the BITX40 the lower sideband is produced by subtracting the VFO frequency from the BFO frequency and the upper sideband is produced by subtracting the BFO frequency from the VFO frequency. But how is this done?

Arduino IDE and source code
In the newer versions of the BITX40 the transceiver is controlled by a Raduino (Arduino based microcontroller) board which also includes a software defined VFO. In order to make changes to the software (for Arduino called a Sketch), we need to install an Integrated Development Environment (or IDE). The required software can be downloaded from:

The next step is to download the “source code” Sketch containing the software that controls the Raduino board inside the BITX40. The Sketch can be found at: and is named “bitx40.ino”. The bitx40.ino Sketch depends on a library which has to be installed inside the Arduino IDE and can be found at:

The BITX40 Sketch and the “magic” parameter
When the bitx40.ino Sketch is opened in the Arduino IDE, we can see the various code lines that control the VFO and other functions in the transceiver such as the VFO-knob and the display.

If we look a little bit closer in the Sketch we will find a few variables that control the transceiver its state. One of them is called: “char isUSB = 0;”. By changing this parameter 0 to 1 a part of the Sketch will be activated that subtracts the BFO from the VFO frequency and thus lets the transceiver operate on USB.

The “magic” parameter

In order to reprogram the Raduino with the edited Sketch we have to make sure that the settings in the Arduino IDE “Tools” menu comply with the port and board we use. In most cases the port will be the USB cable and the board an “Arduino Nano” as the Raduino used in the BITX40 is based on that hardware architecture. Now we can try to compile and verify this changed Sketch and if everything is ok, upload it to the Raduino using a USB to USBmini cable.

Calibration and testing
After the new Sketch is uploaded to the Raduino it will restart and we will find that the display states that we are in upper sideband. We also see that the dial frequency in the display differs from the real frequency which we can hear. This is because we have to recalibrate the Raduino.

An easy method to recalibrate the Raduino is to tune in on an signal with a known frequency (such as a beacon) and find out what the dial offset to this frequency is. Once again we go to the Arduino IDE and the bitx40.ino Sketch we used to work on.

In the code we have to look for the part that sets the frequency, it looks like: “void setFrequency”. A few lines below we will see the case: “if(isUSB)”. After the if-statement we will find the code performed in USB-mode. It looks like: “si5351.set_freq((bfo_freq + f ) * 100ULL, SI5351_CLK2);”. In the part “(bfo_freq + f)” we just have to add or subtract the offset we found before in Hz. In my case this looks like: “si5351.set_freq((bfo_freq + f – 3000) * 100ULL, SI5351_CLK2);”.

The calibration parameter

Again compile and verify the code and if everything is ok, upload it to the Raduino and again check whether the dial frequency represents the real frequency that you are tuned in to. When yes, your BITX40 should be fit for upper sideband operation and further testing.

73 de OE6AVD (Alex)


Leave a Reply to Anonymous Cancel reply

Your email address will not be published. Required fields are marked *