Being a DIY hamradio, I always needed a good signal generator for HF bands and an oscilloscope too. After long debates with my lovely wife, I got a pass for a Siglent oscilloscope but not the SigGen, hihi ! So, silently decided to build my own SigGen in small increments not willing to see my wife raising up her menace eyebrow ! Step by step I start developing a good schematic, PCB’s and proceed to “Get the job DONE !”

  • 5 inch Nextion capacitive touch display.

  • 1-30 Mhz output with 10 Hz resolution.

  • Sine wave signal only, better than 60dBc harmonics level.

  • Manual calibration with 120 points stored in display EEPROM

  • S9+60 to S1 output values.

  • 12V d.c power, but will have an extra Li-ion battery via buck boost and BMS to be portable if needed.

  • About 140 Euro total cost without quantify my work.

As usual, software will be open source on

Feel free to make a better device !

14 Mar. 2023 - test using Analog Devices HMC472A

S9+60dB carrier at the input;
Loop code to cycle 30dB dB for each divider;
Almost 120dB variable digital ATT;
A critical capacitor array not soldered yet;
Some shady solderings have to be reflow;
void happy(String(input)){
 Serial.println("I feel good !")
happy("It is working, it is working !!!!") ;


18 FEB. 2023 - test using PE4312

Magic smoke, it worth the effort.

After a quick chat with Psemi, it become clear that I did not properly read datasheet. Digital input cannot exceed 3.6 V for 5V Vcc ! Shame on me

First light, I successfully addressed PE4312 via MCP23008.

PE4312 is quite a nice one, apart some small insertion attenuation easy to compensate, the ATT is quite precise !

Again, Universe forces conspired to make a bigger mess than previous one !

15 Jan. 2023 - Constant S9+60 level, for all 1-30 Mhz range

Hello folks !

Ditched AGC auto level but opted for DAC via substractor OPAMP to control output voltage for a steady level. Also, with eye glasses I’ ve detected that AD603 out impedance is not 50 but 500 ohms, that only coz THD was way above normal and had to read datasheet once again. Stupid I know, but mistakes are making life greater ! Never had eye glasses in 48 years, but that time has come unfortunately !

Home made SigGen
SIG-130 RXPv1

As per Digital AGC article, I thought why not building a useful signal generator, precise and clean one ?
From your imagination to reality

For quite some time, I wanted to design and build a signal generator, HF only

Covering a 31.5 dB attenuation range in 0.5 dB steps, high linearity  from DC to 3.8 GHz. Only 30dB range will be used , to ease Arduino computation.


Digital RF attenuator

1 to 30 Mhz output

A simple not expensive AD9850 will be used. High level of harmonics above 35 Mhz will be filtered with a 9-11 poles low pass filter.

Multiple cascaded HMC472 attenuators

To get a good range between S1 and S9+60 and above, a well designed adjustable 120 dB attenuator is needed. For this purpose, 4 x HMC472 will be used.

AGC constant level output

While generating frequencies between 1 to 30 Mhz, the AD8950 output signal will vary as amplitude. To overcome this, I will be using a DAC combined with AD603 to produce a steady 50 mV R.M.S. output signal before ATT network.

Premium PCB design

To get the best from this design, a well PCB is needed. Shielding, ground impedance, VCC and signal isolation, there are many things involved to get a good DIY Lab Tool. I am confident I can overcome all above !

Arduino + Nextion = Love

Cannot build a valuable SigGen today without looking good also ! A high shielded Arduino and Nextion display will be used to drive this beast on, also will have to be as EMI isolated as humanly possible !

Arduino 4 x 6 bit addressing

How to ?
MCP23008-E/SS to the rescue I2C 8 bit GPIO extender
  • All 4 extenders on same bus with different addresses
  • No Latch enable pins, no bulky cables
  • Serialized execution, write all 6 bits ATT per ATT in parallel mode via I2C GPIO extenders
  • Only 4 Arduino pins used : GND, VDD , SCL and SDA
  • Nextion HMI display  connected to Arduino Nano via Software Serial.
  • AD8950 sine output will be filtered above 35 Mhz and level adjusted by DAC via AD603 with 4 corrections per Mhz to get a steady output voltage.
  • This steady 50 mV will be variable divided by a network of 4 x HMC472, 31.5 dB ATT each to get a minus 120 dB total ATT.
  • Arduino keypad  will set ATT with a 0.5 dB resolution, by using parallel 6 bits for each HMC472 using  i2c 8bit extenders . 
  • Strong shielding is required to get best results, also a Nextion touch screen will be used to minimize physical needed buttons .

Leave a Reply

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

The reCAPTCHA verification period has expired. Please reload the page.