“Gimme Five” reloaded – A compact 5 band QRP SSB transceiver in SMD technology: VFO, LO, MCU etc.

As mentioned in the introductory article to this radio the digital components in this transceiver are pre-manufactured modules that have only been put together in a more or less sensible way. ;-). These modules are:

  • AD9850 as variable frequency oscillator (VFO), China made no-name board,
  • Si5351 as local oscillator (LO) produced by “Adafruit”,
  • Arduino Pro Mini w. ATMgea328p as Microcontroller Unit (uC, MCU), no-name
  • ST7735 colored LCD, no-name,
  • MCP4725 as digital-analog-converter to preset transmitter gain via MCU, “Sparkfun” clone from China, no-name

All units are able to run on 5V which made it easy to layout the schematic because only one 5V/1A voltage regulator had to bu used.

DK7IH Multiband QRP Transceiver for 5 Bands 2020 - Digital unit with VFO, LO, MCU, DAC and LCD (low res.)
DK7IH Multiband QRP Transceiver for 5 Bands 2020 – Digital unit with VFO, LO, MCU, DAC and LCD (low res.)

To watch a high resolution version (4.2MB!) of the wiring scheme, please click here!


a) The lines for ISP (MOSI, MISO, SCK, RESET and GND) have not been drawn but the location to the respective ports is mentioned in the table sited in the right top corner. Reset rquires 10kOhms to +5V and a 0.1uF cap to GND.

b) Certain clones of the MCP4725 DAC module will produce conflicts with the I²C/TWI-address of the Si5351 LO module. Original “Sparkfun” boards come with I²C/TWI-address  0x60, 0x61 or 0x62 (depending on literature/web resource you get this information from).

This address is set by the manufacturer AD inside the hardware on customer’s demand. On the other hand the Chinese made modules I am using have basic address 0xC0 which is the address of the Si5351 also. Thus this leads to conflicts on the I2C/TWI-Bus. One solution is to close a solder bridge to +VDD on the very tiny DAC-board which will set address to 0xC2.

c) For the 4(!) user switches (not 3 like in the photo above!) the pull-up resistor on PORT PC0 is set on. There are is a resistor (in the range between 560 Ohms and 2.2 kOhms) with each switch, that pulls voltage to GND when the respective key is pressed. This leads to a voltage drop at the analog input that will be detected by the ADC channel.

This voltage drop depends on the pull-up resistor and on some other factors so it must be determined for every controller setup individually. To solve this, in the respective functionthat returns the numeric value for the key pressed  there is a small commented code that you have to de-comment temporarily:

//Read keys via ADC0
int get_keys(void)
    int key_value[] = {39, 76, 103, 135};
    int t1;
 int adcval = get_adc(0);

    //TEST display of ADC value 
        lcd_putstring(0, 5, " ", 0, 0); 
        oled_putnumber(0, 5, adcval, -1, 0, 0); 
    for(t1 = 0; t1 < 4; t1++)
        if(adcval > key_value[t1] - 10 && adcval < key_value[t1] + 10)
            return t1 + 1;
    return 0;

Restart the software, press every key, put the indicated key value into the code (line 4) and re-comment the orange lines when fnished. Next re-upload the software to the controller.

d) Source code in C is available on my Github repository. Please note that even if an Arduino Pro Mini MCU board is used, the code is not designed for the Arduino “world”. It does not use functions of the Arduino environment and may not function with the Arduino bootloader.

To compile the C source and generate the HEX-File you need the GNU C Compiler either for Windows or Linux.

73 de Peter (DK7IH) and thanks for watching!


DX with QRP – It really works!

This afternoon I was sitting at my desk doing something in the computer. The QRP-transceiver was tuned to the 20 meter band (14249 kHz). Suddenly I heard ZL1SLO with a fair 58 report. The band was clear, no big pile-up, no “big guns”, so I gave him a call. And, beleive it or not, he answered to my call an gave me a 57/58 report. Not bad for 10 watts ouput power and a simple dipole. 😉

vy 73 de Peter