SI5351 Signal Generator

As I alluded to in my March bench report, I’ve been working on packaging up my old SI5351 VFO that sat on a breadboard for two years into a functional signal generator for the bench. That project is now essentially complete, though there are a couple of planned improvements in the works.


The heart of this project is a Silicon Labs Si5351 clock-generator IC, on a little interface module from Adafruit.  With an I2C interface, it can output square-wave signals at roughly 6dBm anywhere from 8Khz to 160 MHz. This nifty little chip has been around for a few years, and has been used in many a homebrew radio rig, including the work of N6QW, N2CQR, M0XPD, and other. Jason NT7S was essentially in building some of the earlier Arduino-friendly libraries for controlling the Si5351. With such a wide frequency range and the confidence that comes from XTAL-derived, PLL frequency generation, this little chip has breathed life into rigs both new and old.

With the hardest part of building a SigGen (actually producing the darn frequency) neatly packed away in silicon, what remains for a builder is to wrap the thing in packaging to promote ease of use and flexibility. That’s where the fun of this project lay. The parts list ended up like so:

The project box and the LCD display were the most expensive parts of this build by a wide margin, although both would be available for quite a bit less with a longer lead time from oversees.

The SigGen has 4 different software modes:

  • VFO – The primary output frequency matched the displayed frequency. Frequency steps are 10kHz, 1kHz, 100Hz, and 10Hz.
  • Test – Same as VFO, but steps are 10MHz, 5 MHz, 1 MHz, 500kHz, 100kHz, 10kHz, 1kHz, 100Hz, 10Hz, and 1Hz.
  • Polyakov – Primary output frequency is half of the displayed frequency, for experimenting with half-frequency-driven mixers. Step size is the same as VFO mode.
  • BFO – Adjusts the secondary output frequency, for using the SigGen to drive a Superhet directly. Steps are the same as in Test mode.

The SigGen’s three pushbuttons (one built into the rotary encoder and two next to the LCD screen) do essentially the same thing in each mode:

  • Encoder: Changes the frequency step size, per the step options above.
  • Mode: Changes through the software modes, per above.
  • Band: Advances to the next highest Amateur band frequency, to aid with band-changes especially in VFO mode. For example, if the current frequency is 5.72MHz, pressing the Band button sets the frequency to 7.0Mhz, the bottom of the 40m band.

There are still a couple improvements I’d like to make, namely replacing the cheapo detent-based rotary encoder with a nice smooth continuous one, which can be had for about $10 on eBay – using a detent-based encoder as a VFO is a pain in the patoot. I’d also like to implement a sweep functionality to sweep through various filters, but that would require a bit more UI work as well.

This gadget has been complete on my bench for a month of so, and has already been useful in working on my variable-bandwidth superhet… but that’s a story for another post.

Hear you on the air!



QST Forty-9er with DDS VfO

(Since this was originally posted, this transceiver has also gained a laser-cut faceplate.)

Long story short, I’ve got a new transceiver!

Back in March, QST magazine published an article about modding a cheap Forty-9er kit from eBay to incorporate a digital VFO. The original Forty-9er was a kit from the NorCal QRP club, a 40m transceiver designed to run on a 9V battery, hence the name. It, like many other kits, is based around an NE602 and an LM386. In the last couple years, cheap kits bearing the same name have been appearing on eBay, which bear only a scant resemblance to the original. The biggest difference is that where the original kit had a VXO attached to the NE602 mixer, the eBay kits are designed to be rock-bound to a single frequency. Perhaps this was the motivator for the QST article, to restore some frequency coverage to these fixed-frequency kits.

ebay 40-9er.jpg
The Forty-9er kits from eBay – not a huge number of parts, but not a tiny kit either.

The process of using a digital VFO with an NE602 architecture is simple enough. Specifically, an AD9850 breakout board is used to provide the signal, and a small BJT amplifier increases the power output from the DDS chip. The oscillator power is adjusted to show about 300mV P-P in-situ. After the article was published, one of the authors, K2ZIA produced a limited run of kit boards, which include the amplifier and sockets for both the AD9850 board and an Arduino Nano to control the DDS over i2c.

The K2ZIA kit board, with attached Arduino Nano and AD9850 board. Image credit: K2ZIA

I purchased the breakout board, AD9850, Forty-9er kit, Arduino Nano, and a rotary encoder from a fellow ham, Justin AJ2Q, who had gathered the pieces but was focusing on other pursuits and wanted to pass the project on. Final assembly was pretty straightforward; there are a couple of mods that need to be made to the Forty-9er (specifically, replacing the oscillator crystal with an input for the VFO, and swapping the crystal input bandpass filter for a much-wider two-element bandpass filter), and connection made so that the Arduino can detect when the key is down and shift frequency. AJ2Q had already done most of this, so only some final tweaks and cleaning up some soldering were necessary.

The original Arduino code was designed to make use of a 16×2 LCD display to display the current frequency, as well as licensing information according to the 40m band plan. Since I’ve already been playing with an LCD display on another ongoing project, and since I wanted this to be a simple and durable bit of kit, I wrote a bit of code that instead flashes the current frequency in morse code on a panel-mounted LED. The display is triggered by the press of a button. The number of digits to display is configurable. I’ve found that just displaying the three kilohertz digits is plenty (I don’t need to be reminded I’m on the 7 MHz band every time, and I don’t need precision better than KHz for simple operating). As always, you can see the code on Github.

The internals of the transceiver. The two green perf-boards are an experimental audio filter to be documented later. The 40-9er board is bottom-left, the K2ZIA board is bottom right, and the small black board on the upper right is the rotary encoder mounted to the front panel.


The full schematic of the original Forty-9er as well as the necessary mods can be found on Farruk K2ZIA’s website. The only additional hardware changes I made were to wire an LED and a 1k resistor between Arduino pin 14 and ground for the LED, and an SPST button between Arduino pin 4 and ground to trigger the frequency display. Like the original code, depressing the encoder changes the tuning rate, though I modified the possible step values to be only 1000Hz, 100Hz, and 10Hz, in that order. 1KHz is useful for zooming around the band, 100 Hz is useful for tuning a specific signal, and the 10Hz step is mostly for resolving SSB/DSB/AM signals cleanly.

On the rear of the radio are the BNC antenna jack and the power pole power input. (Useful tidbit – a pair of connected 30A powerpoles fit neatly in the cut-out for a VGA connector!) I’ve yet to fashion a front-panel, so the connections on the Forty-9er board for a key and headphones are directly accessible.


I’ve had the rig out to the park a handful of times now, and it sounds good! Like my other direct-conversion NE602-LM386 experiments, the audio quality is great, but broad as barge, so selectivity suffers. The sidetone is clean, at around 700Hz, from the Forty-9er’s little BJT oscillator. I enjoy being able to tune up into the phone portion of the band and listen to SSB QSOs and nets and such, which provide a good sketch of current propagation conditions. Being able to quickly switch between tuning steps is helpful, as I tune around and try to find someone sending CW slow enough for me to keep up.

The top of the rig. Not fancy, but functional.

The only major limitation of the rig is that, with only a single-resonator input bandpass filter, out-of-band signals can get into the radio and cause interference. Specifically, World Harvest Radio WHRI, who maintain and 500KW (no that’s not a typo) transmitter in South Carolina, is often audible everywhere on the dial, which is distracting at best. A stiffer bandpass filter will be necessary soon. I’ve also been experimenting with a peaked audio filter to help with reception of CW, but that’s still experimental.

The unit puts out about 3 Watts, which proved to be enough to make my first CW contact and, over the weekend, my second. The gentleman on the other end this time was Gary N4PIR, who was running 5W on his FT-817 into a trapped vertical. I think a little afterburner would be helpful on my end, as we were definitely fighting QSB. But that’s a later project.

Hear you on the air!


Antenna Analyzer, Part 1

Today, I received a package in the mail from a fellow ham who was getting rid of some gear. Specifically, he’d put together most of the parts to put an Arduino-controlled VFO on one of the cheapie Chinese Forty-9er kits, like Farrukh Zia did in a QST earlier this year (his kit is available online.) The package I received had the Zia board, an Arduino Nano, an AD9850 DDS module, a rotary encoder, and the Forty-9er kit itself, already assembled. I do want to someone assemble the kit as described in QST, but for the moment, what I’d really like to make is an antenna analyzer.

The scope of what constitutes an “antenna analyzer” is wide – from my rinky dink setup at the bottom end to 4-figure solutions at the high end. Really, what I’ve put together is andirectional coupler with 50-ohm terminations. The fancier analyzers will tell you not only the actual impedance of the antenna (or anything else on the output port), but also the magnitude (and in some cases the sign) of the reactive component of the impedance. Neat stuff! For my purposes, a simple Arduino-driven device that measures relative SWR will be good enough for my purposes. (Dan, KB6NU, has a helpful write-up of some of the mid-range options.)

I’ve been looking at K6BEZ’s plans for an Arduino-based analyzer for a long time – really, the key piece I thought I was missing was the AD9850 – and this seemed like a good time to give it a try.

I had an SWR Bridge Kit from KitsAndParts lying around, and I thought this would be a good time to put it to good use. The kit is simple directional coupler, with a couple diodes and capacitors in each line to hold a peak DC level. The coupler is meant to drive a pair analog meter movements.

To adapt this coupler for use, I first simply attached each output to the Arduino’s analog inputs. This went quite poorly – the charge building up on the capacitors on each side of the coupler has no where to go, and so rather than giving an instantaneous peak voltage, the analog readings just kept creeping up and up. A 68K resistor from each output to ground (facilitated by a small breadboard) solved that issue.

The main issue now is one of scale. The AD9850 Module itself puts out a little less than a milliWatt at most, deceasing with higher frequency outputs. The K2ZIA module has a little two-transistor cascade amplifier to help compensate for this, but that only pumps the output up to 14 or 15 dBm at 1 MHz, with decreasing returns at higher frequencies. Given that the directional coupler has a “single turn” (1 wire) pickup through the center of each toroid, and each toroid has 12 turns, we can surmise that less than 1% of the energy going into the coupler is being diverted to measurement functions. with the rest passing through to the antenna.

This low amount of coupling would normally be desirable, but this time, that means -5 dBm presented to the FWD measurement port, which just isn’t enough power to overcome the forward voltage of 1n5711 diodes in the coupler. (I measured mine to have a voltage drop of 0.323V. That’s which a $50 multimeter, so take it with a grain of salt, but that’s the order of magnitude.)

To temporarily overcome this, I hooked up my little BS170 board from the Si5351-Amplifier to the output of the K2ZIA board’s amplifier, which gives me about 4W output at 1 MHz (and decreasing above that). This gave me enough power to test the coupler (and the K6BEZ software), and both seem to be working fine. I’d like not to build another 5W amplifier just to use as an antenna analyzer, though, so once a shipment of 1n5711’s arrives from eBay, I’m thinking of just replicating K6BEZ’s detector circuit, using a resistive bridge and op-amps.

Hear you on the air!