BIX40 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)


BITX40 for digimodes (part 1) – intro

Since I started my HAM career last year, I was very interested in digital modes. I just love the interaction between the hardware and software as well as the “relaxedness” of the JT9/JT65 mode. Just decide what you are going to do and then wait for 1,5 minutes to see the response of the other station, or not.

Some time ago I heard about the BITX40, 40 meters QRP SSB “kit” as being an interesting experimental platform. As my beloved JT9/JT65 is a QRP mode and it works on SSB, I decided to purchase one of the kits. A few weeks later the package from India arrived and work on putting all parts together began.

I have put the boards in a rather large case in order to provide enough room inside the case for future experiments and added two leds, a green one for power on indication and a red one for TX indication. As digimodes are at 100% duty cycle and possibly overheat the board I calculated the space for two fans in case I have to cool the board during operations. For the PTT I decided to use two buttons, one pushbutton and a flipswitch. They are connected in parallel so I can decide if I want to keep the button pushed during transmission or just flip the switch and flip it back after the digital transmission finishes. In the future I might even look at an transistor switched PTT connected to an RS232 interface at the computer.

First testing revealed one major problem. JT9 and JT65 need the upper sideband to function properly and the BITX40 has natively only the lower sideband available. I have read about some mods which should enable the upper sideband as well, but did not have the time yet to try that. Although I was not able to test JT9, JT65 and WSPR, I was able to do some PSK31 and found out the the board does not heat up that much during transmission as I expected. There even might be no need for any fan at all!

Lets see where this little project is going and many thanks to DJ0GX for his reply on my CQ and the 589 RST.

73 de OE6AVD (Alex)

Hello World

Hello, I am Alex van Dulmen (OE6AVD) and live on the Austrian “countryside” approximately 25 kilometers south of Graz.

I got my license since March 2016. My station consists of a Yaesu FT-450D with a HyEndFed 3-band endfed wire hanging next to the balcony. Furthermore, I have a 2 m / 70cm Baofeng handheld for some local work.

On this blog I will post interesting projects or ham related things which I think are worth sharing.

I hope to talk to you soon.

73 de Alex