September 24, 2019:
Revision: v1.1

Three-output Portable si5351a RF Test Oscillator

with Keypad and AM Capability

This started out to be a simple circuit to try out a few ideas but it slowly transformed over time  into an AM-capable RF generator with three simultaneous adjustable RF outputs in a compact portable USB-rechargable battery-powered package. 


Most si5351a oscillator designs I’ve seen are quite simple. Most feature just one or two oscillator outputs. Also, they almost all appear to use code derived from one or two software libraries.

There seem to be relatively few new or novel designs. I’d like to think my website bucks that trend, and this design is aimed at continuing that approach. My latest si5351a design might be called a signal generator by some. Really, I’d prefer to call it a test oscillator since, in the absence of multiple types of modulation and a variable output attenuator, it doesn’t really have all of the features of a true signal generator. For that, you'd have to look at my other designs such as my full-featured signal generator published in Silicon Chip magazine in June and July 2019.

Given this is more of a test oscillator, it does have a wide range of features which include:

Three (3) simultaneous oscillator outputsFull range tuning on any output!
Coverage from 5kHz to 290MHz Most designs stop around 150MHz or less
Selectable tuning steps from 1Hz to 1MHz Selected by pushing on the tuning encoder knob 
Selectable quadrature mode Few designs deliver selectable quadrature operation where two outputs can be set into phase quadrature (90o from about 3.5 – 290MHz  
Keypad and rotary encoder frequency tuningFlexible user tuning
Keypad selects output level and RF on/off   Most designs have a fixed output level
Unmodulated (CW) output or AM modulationYes, AM with the si5351a!
Portable battery-powered operationUSB port for recharging

A small OLED display shows the configuration simultaneously for all three oscillator outputs.You can see an example in the picture to the right. Each output (A, B or C) is shown with its frequency and output level.

The little box on the left edge shows the currently selected oscillator - The keypad or tuning knob will change this oscillator. All outputs continue to operate.

The filled square on the right hand edge of each line shows the output is on. If the box is not filled, then the output is off.

The signal generator is packaged in a compact 3D-printed enclosure along with a rechargeable 18650 Li-Ion cell and USB socket for charging to allow portable operation.

A Little Background

They say the road to Hell is paved with good intentions. This design began with an idea, my "good intention", to build a simple si5351a ‘test bed’. I wanted to try out some software ideas I had for this little chip as quickly and as easily as possible. With that as the starting point, some early success fuelled a few other ideas. Almost as quickly, those were implemented. In turn, they started to generate yet more ideas with a life of their own.

The real catalyst, however, came from another project. I’ve been designing a new antenna analyser. Previous antenna analyser designs here on my website are now a bit elderly and I wanted an updated version with a nice graphical display. I started with an AD9850 DDS oscillator but several problems with that approach led me to look at using the si5351a. Of course, harmonics from the si5351a’s square wave oscillator outputs are an obvious problem. The inherent 3rd and 5th (and higher) harmonics from its square wave outputs give rise to significant measurement problems with simple RF bridges. I managed to sort those issues out, and the resulting analyser with its compact colour LCD has turned out to be the basis of a useful test instrument. Work on that continues…

When I’d got most things working on the analyser, I wasn’t convinced that my si5351a software routines were optimised. I wrote the original si5351a code quite quickly over a couple of weekends several years ago. Despite its tiny size, it’s actually a relatively complicated little chip inside with a number of features which are not particularly described in the datasheet (although I have no real complaints), nor are they explained anywhere clearly enough for me. So, to better figure all this out, I decided to build my ‘test bed’.  “This won’t take long,” I thought to myself.

Yeah, right! Off down that well-travelled road I went.

Design Description

Because the si5351a is a 3.3V device, everything here is designed around that voltage. That led to the selection of a 3.3V compatible 128 x 64 pixel OLED display. The ATmega328 processor can run from that voltage too, albeit with clock speeds below its maximum of 20MHz. I planned to use the processor’s internal 8MHz RC clock anyway, so that was not a problem. The ATmega328 is found on most Arduino boards but almost all Arduinos run from 5V so I couldn’t built this off the Arduino hardware platform. Anyway, keeping to a supply voltage of 3.3V simplified everything and reduced the parts count.

I added a simple keypad for control but, during construction, I also added a rotary encoder. I thought it might be useful for some tests. As you will see from the schematic and the board photo, the resulting design is very simple.

Here is the schematic:

(Right-click with your mouse to see a full-size image)

The schematic probably looks more complex than is actually the case. The ATmega328 processor does the hard work, and it handles the keypad and encoder, and controls the I2C two-wire bus. The display and the si5351a share the I2C bus. Each has a different I2C address to allow the ATmega328 to selectively manage each device independently.

The power supply section is arguably more complex, circuit-wise, than the signal generator section. The heart of the power supply is, of course, the single Li-Ion 18650 cell. It was recycled from an old laptop battery. It’s claimed 2000mAH capacity allows the generator to be used nearly continuously for several days before needing to be recharged. The current required for this design is minimal, only about 30mA, so it’s certainly possible to use other smaller Li-Ion cells.

The battery drives a low cost 5V boost converter module which is, in turn, regulated back to 3.3V by a small 78L33 regulator. This approach extends the operating life of the generator and reduces the noise on the RF output. Another cheap module allows the battery to be recharged via a standard USB charger.

The picture below shows the final version of the prototype I built. There are very few parts to be seen. The only sections not shown here are the two modules for the 18650 Li-Ion battery and the battery itself. 

I’ve not bothered designing a PCB layout (Well, not yet...), but if there is sufficient interest, it would not take long to design. I would be tempted to design the PCB for edge-mounted SMA connectors rather than the BNC connectors I've used in the version described here. SMA connectors appear to be swiftly becoming a standard for ham test equipment. The small connectors and matching terminated and unterminated coax cables used with those connectors are available very cheaply from the usual Asian sources. Those thin cables and smaller connectors would have made this unit even easier to use on the test bench. However, to balance that, the BNC connectors I used here are easier to use in the field. Let me know what you think (My email address is on the main page of the website)

Incidentally, the notches that can be seen cut out in the corners and along the edge of the prototyping board were cut to clear the pillars in the printed case where the front and back case panels are screwed together.

Feature Creep - Stuff gets Added

As I tried out different ideas with this ‘test-bed’, the software began to take on a life of its own. A few extra pushbuttons initially were added along with a bit more code, then another pushbutton was added, and… Well, let’s just say that from a really simple initial idea, this design got a great deal more complex than was ever originally intended.

The original plan was to have a platform to allow me to directly enter a frequency from the keypad for just one output. Then I (logically) extended the software to allow it to handle a variety of frequency entry formats because I find it hard to recall a specific entry method months after I've designed the software. So I've allowed for a variety of approaches. Then I added some software to allow me to set any of the three outputs. Then... Well, look, it just kept growing!

Like this:

I began to test the frequency range of the Si5351a chip. I encountered some interesting problems so I added some software to get around them. Then, one day, as I went over that software, I realized I could quite easily get all three outputs operating simultaneously, so the software expanded again.

Since the chip also supports different output levels, I added the ability to set the output level of each output using the keypad, and to turn any output on and off. Those features looked useful. That led to experimenting with quadrature outputs. Another pushbutton and more software.

Despite all this, the hardware remained the same. It was only when I added the Li-Ion battery, also adding the two cheap Chinese modules for regulation and charging, did the overall complexity

Three-Output Signal Generator Applications

I’m sure there are doubts that applications actually exist where three signal generator outputs could be required simultaneously. Well, it's actually more common than you might imagine.

Here’s one example. I built a small receiver. Here is a much-simplified block diagram of that receiver:

I built all of the receiver except for the VFO and the BFO. These were to be connected to one of my Si5351a oscillator designs. To initially test this receiver, I set Output A of my new test-bed signal generator to the receiver test frequency (3.700 MHz) and connected that output to a wire located near the RF input of the receiver. Output B of the generator was then set to the BFO frequency (8.4501 MHz) to match the 8.45MHz IF amplifier/filter stage, and I connected that output to the second mixer. Output C was then set to 12.15MHz for the VFO frequency required (i.e. 3.70 + 8.45) and I connected that third output to the first mixer.

I was then able to confirm the operation of the receiver, make some minor alignment adjustments, and I was able to verify the exact VFO and BFO oscillator frequencies and levels required in the final receiver. Ordinarily, this would have required three separate signal generators if this new three-output test-bed signal generator had not been available.


As usual, I wrote the software for this design in Bascom-AVR, the Basic-like compiled language for the Atmel AVR processors. It’s really easy to use. Variable names are selected to reflect their function. I also find it quite easy to add comments into the source code as it is being written. These brief notes added to most lines of the software allow me to remind myself (and others) of what I am trying to do. I can go back to old Bascom software months, or even years, later without much difficulty should modifications or extra features be required. Or, more commonly, if someone asks me a question about some old software.

Bascom also seems to be a reasonably efficient compiler. Writing the software in assembler would naturally result in more compact code, but it would certainly be harder to write initially, and to maintain and extend later.
I have provided the compiled HEX code below as a free download. I can also provide the source code for those wanting to adapt the software for their own personal use. Just email me and confirm in your email to me that the source code will only be used for your own non-commercial use. (If you want it for a club project, let me know in your email, and we can sort that out quickly, almost certainly free of charge).

If you do decide you wish to make changes to the software, just remember that Bascom-AVR comes in two varieties. There is a ‘freeware’ version available, but it cannot generate output HEX-code files greater than 4k bytes. The software for this project exceeds that limit by a very substantial margin so the full (paid) version of Bascom-AVR is essential if you intend to make changes. It’s not particularly expensive, but it is something to bear in mind before you decide to undertake any further changes yourself.

Inside the Si5351a

If you just want to know how to build and use this signal generator, just jump over this section. On the other hand, if you are curious about how this chip really works, then read on.

The Si5351a is different to other digital clock generators and DDS oscillators I’ve used. Output frequencies are all generated from its 25MHz crystal, first by multiplying the crystal frequency up to the sub-GHz range using a phase locked loop (PLL), then divided the PLL’s VCO frequency down again using a programmable fractional ‘multisynth’ divider. Finally, this frequency can (optionally) be further divided with a conventional digital divider. These last dividers are only needed if output frequencies are less than 1MHz.

Here is a diagram, courtesy of Silicon Labs, showing the internal sections of a standard Si5351a chip.

At first glance, there don’t seem to be enough blocks to go around. In the standard version of this si5351a chip that almost everyone uses, the reference crystal oscillator section feeds two PLL multipliers (PLLA and PLLB). Either of these two PLLs is then able to feed any of the three PLL dividers (called Multisynth 0, 1 and 2). These each may then be connected to one of three digital dividers (R0, R1 and R2).

Ideally, you’d logically expect to have one PLL for each MSx/Rx combination but the chip only has two PLLs. In the standard chip, the three multisynths must be fed either from PLLA or PLLB. Spot the problem?
Look at it this way: To generate a frequency precisely on Output A (shown as CLK0 on the diagram above), we connect PLLA to MS0 which then connects directly to Output A, or goes via R0 if the required frequency is below 1MHz. For Output B (OUT1 on the diagram), we can use PLLB and MS1 and, optionally, R1. Finally, for the third output (Output C or OUT2 on the diagram), we can use….. Well, yes, we’ve just run out of PLLs. PLLA and PLLB are both already in use. That leaves the third output, at first glance, unable to be used. And, based on what I’ve seen of other designs, it appears that’s what most of the other designers believe too. It’s probably the reason why most si5351a oscillator designs you see only feature one or two usable outputs.

But, if you carefully read the datasheet and the application note (which has some errors, by the way), and then use the design tools available from the Silicon Labs website, and, finally, analyse all of this stuff with some maths, then you will discover three important things:

1. It’s possible for one PLL to drive more than one multisynth, even all three, if necessary.

2. It’s possible to achieve a full range of output frequencies from all three oscillators simultaneously.

3. As others have pointed out, it’s also possible to make the si5351a operate at much higher frequencies than those described in the datasheet. I’ve managed to reach just under 300MHz with most of the chips I use, and 316MHz with a couple of my chips.

So, in short, the software in this design allows Outputs A, B and C to each independently generate any frequency from 5kHz all the way up to 290MHz. Keyboard entry or rotary dial, your choice.

The key to achieving this lies in understanding the way the PLLs and the multisynths operate.

Inside the PLL and Multisynth Blocks

The PLL is responsible for multiplying the reference crystal frequency up into the 600 – 900MHz range. The subsequent MS divides this frequency down again to a lower frequency. The PLL multiplier and MS divider have similar structures in which the value of the fractional multiplier or divider respectively is represented by a fixed integer combined with a fractional value i.e. a+b/c where a, b and c are all integers.

The reference frequency (in my case, 25MHz) is multiplied up in frequency by one of the two PLLs. The frequency at the output of the multiplier = reference frequency * (a+b/c) where values of (a+b/c) are between (15+0/1048575) and (90+0/1048575) where b=0 to 1048575. If you do the calculations, each PLL’s output frequency can range between 600 – 900MHz. In practice, the chip can support a wider range than this.

Just to complicate matters still further, the numerical values loaded into the chip’s registers to generate the required frequencies are not these numbers i.e. a, b and c. Instead, the values loaded chop and scatter portions of the digital equivalents of a, b and c across a variety of different registers.

Next, the Multisynth (MS) divides the selected PLL frequency. The MS divide value = 4, 6, 8, or any value between (8+1/1048575) to (900+0/1). As noted earlier, this follows a similar “j+k/m” structure to that in the PLL. Finally, the additional optional divider stage (Rx) can divide the output frequency of this stage down still further by using preset integer values. This is required if you want output frequencies below 1MHz.

Let’s pause here for a moment. While it’s possible to program all of these values independently in a multiplier and divider to achieve any desired frequency within the range of the chip, more detailed analysis shows that a full range of output frequencies can actually be achieved by using a few less complex configurations. Specifically, if the output of the PLL is preset to, say, 875MHz, then the numerical adjustment range of the subsequent MS divider stage allows any output frequency to be generated from just less than 1MHz up to 109.375MHz with very fine Hz-level resolution. Phew! Things just got much simpler.

However, if a frequency higher than 109MHz is required, this approach is not satisfactory. We must swap the previous arrangement i.e. It is possible to fix the values programmed into the MS, locking it to a value of 4 or 6, for example, and then just vary the values programmed into the PLL. Then the output frequency of the MS stage can span from 100 to about 300MHz. Tuning resolution is not quite as good as the earlier arrangement, but it’s suitable for most applications and tests in that range.

My software is written around this two-step simplified approach. By locking one of the two PLLs to a fixed value from 600-900MHz, the subsequent one, two or three MS stages can be programmed to give three independent outputs from 1MHz to 109MHz, or as low as about 5kHz with the use of the additional divider stage (R0, R1 or R2 respectively). This leaves the second PLL free. Any of the MS blocks may then be set to 4 or 6, and then we can use the variable output of the second PLL to give outputs from 100 to 300MHz.

(For the experts following along here, yes, I do fully appreciate that there are performance benefits from the use of more complex calculations to determine the optimal parameter settings, but, frankly, the benefits appear minimal when weighed up against the additional software complexity necessary to determine these values)

There’s just one ‘gotcha’ with this approach. Since the second PLL is only able to generate frequencies accurately between 109 and 300MHz when coupled with one MS (since the associated MS divider stage must be fixed to divide by a value of either 4 or 6), only one output of the three may be set above 109MHz, the frequency where the oscillator operating mode changes. You can set two outputs above this frequency, but the maths and functionality means only the most recently programmed output will be correct.

One exception: If you operate the first two outputs in quadrature, both outputs will have the same accurate frequency, and the third output may be set, accurately, anywhere below 109MHz.

While I could have written the software to constrain one output to operation above 109MHz, it made more sense to allow the user to use the three oscillators as they see fit while keeping this limitation in mind.

Or, putting this another way:


As the photos show, I built my signal generator using prototyping board. These boards can be obtained for a few cents each from the usual sources in the depths of Southern China. The power supply modules were wired in separately inside the enclosure. The photo shows the layout fairly clearly. The simplicity of the design and the limited number of parts required led me to use this approach. I’ve not designed a PCB to date, but I can do so if there is sufficient demand.

I built this generator with BNC connectors. As a result, and because this generator is quite light, when I connect a typical set of BNC cables to it, it tends to move all over my bench because of those coax cables. All of the recent equipment coming out of China seems to be fitted with SMA connectors. Based on my experience with this signal generator, I can see the practical sense in doing that. SMA cables are much lighter. The shielding from the thinner coax remains acceptable so there’s no problem from that issue. As a result, more and more of my gear is using SMA connectors. And they are cheaper too.

The enclosure I built is 3D printed. I designed the enclosure using DesignSpark Mechanical, freeware available online. I find this 3D design software very easy to use, even for a relatively complex enclosure like this. The top helf of the case is shown below. (The featureless base that fits under this not shown here)

The enclosure is printed using PLA filament. The STL file for it is also available for download at the foot of this page. The top panel includes cutouts for the display, switches, rotary encoder and power LED. There’s also a cutout for the optional programming connector. (This hole is normally covered over by the front panel label)

Along the right-hand edge, cutouts for BNC sockets and the USB charger connector can be seen. The 18650 battery fits under the left-hand end of the cover. The overall shape and size makes it very comfortable to hold and use.

The available files also include the STL files for the pushbutton extender caps that allow the pushbuttons mounted on the prototype board  to be operated. These sit in the front panel and self-centre on top of each pushbutton. The files include two different pushbutton cap files because PCB-mounted pushbuttons are made at different heights.

Finally, I designed the front panel artwork in CorelDraw which I then printed onto plain paper with a colour printer. I cut out the various holes for switches, display and the rotary encoder with a sharp hobby knife, then covered the resulting print with clear self-adhesive plastic film. This was then glued into place on the front of the 3D printed top cover using spray adhesive.

The panel artwork file is also available from the download section below.

While the artwork requires holes to be cut out for the buttons, OLED display and rotary encoder, it is not necessary to cut them out for the programming socket or power LED. I cut out the cover in my case for the programming connector to allow me to further develop the software, but you may not wish to do this. In addition, the LED shines nicely through the artwork so a hole is not required for the LED. 

The tuning knob was also designed by me and printed on my 3D printer. It’s nothing elegant, but it’s cheap and effective.

Programming the ATmega328

I used my USBasp programmer to program the chip. It just plugs directly innto the 6-pin connector on the board and into the USB connector on my computer. I use one of several Windows-based applications available for programming AVR family chips with th USBasp programmer, typically either Khazama or Extreme Burner. The HEX file for the signal generator is available for download below.

If you need the source code for your own development of this software, please send me an email. Please confirm in the email that the software will only be for your personal non-commercial use. This is due to some parties copying and selling my software while also removing any mention of me as the original source of the software. The HEX code is available for downloading in the section at the bottom of this (long) webpage - for non-commercial use, of course.

Once the HEX code has been programmed into the memory of your ATmega328, the fuse bits of the device also need to be programmed. These configure such things as reset and clock options. These should be set, as follows:

        High:  0d9h    (1101 1001)
        Low:  0e2h     (1110 0010)
Extended:  0FFh     (1111 1111)
        Lock:  0FFh     (1111 1111)

IMPORTANT: If you program the ATmega328 in-circuit using the 6-pin connector shown in the schematic above then your programmer MUST be set to program with a supply rail of 3.3V. That's the maximum voltage of the Si5351a and OLED display which share the processor's supply rail. Alternatvely, you can program the ATmega328 externally via an adapter on your programmer using your programmer's usual 5V supply.


After turning the oscillator on with the sliding SPST power switch mounted on the left-hand side of the unit, there is a short delay while the processor starts and the display and Si5351a are both initialized. When this is completed, the green LED is turned on. It is mounted on the front panel in the hole located just above the tuning control. This power-up and initialisation process takes less than a second.

Both keypad and the rotary dial are always active. The tuning control will adjust the currently selected oscillator’s frequency in steps set by the step selection switch. That switch is integrated into the rotary encoder. The next step size is selected by briefly pressing down on the tuning knob. Each press allows selection of the next tuning step from a selection of 1, 10, and 100Hz, 1, 10 and 100kHz, 1MHz and 10MHz.

There are a further five basic functions that can be selected using the keypad:


To select a frequency for the currently selected oscillator, press Freq then the desired value. Up to nine digits can be entered (e.g. 123456789 which is 123.456789 MHz) with values between 2.5kHz and 300MHz. The decimal point key is marked DP. Values entered outside this range will be ignored and the generator will return the oscillator frequency to its current setting.

There are a number of ways the software will accept a frequency value entry from the keypad. Some examples include:


The signal generator always starts from power-up with oscillator 1 selected (Output A). To change the currently selected oscillator, press the Osc# key followed by 1, 2 or 3. Pressing 1 selects the first oscillator (Output A), 2 selects Output B, and 3 selects Output C. Other digits are ignored until a valid key value is detected. e.g.

Osc#    4   5   8   3

Digits 4, 5 and 8 are simply ignored. Nothing happens, and no change appears on the display. However, when the digit 3 is entered, the software recognizes this as first valid digit seen. The generator will then select Output C and indicate that new selection on the display.

Output Level

To change the output level of the currently selected oscillator, press the Level key followed by 1, 2, 3 or 4. Pressing 1 sets the output of the selected oscillator to 2mA, 2 sets the output to 4mA, 3 sets it to 6mA and 4 sets it to 8mA. (The output level is adjusted in the Si5351a by setting the output buffer current in software)

Other digits are ignored until a valid key value is detected.

Based on measurements made with my 100MHz bandwidth oscilloscope using a 20MHz or 50MHz output from the Si5351a connected to a 50 ohm load, the following output levels were observed:

RF Output Control

Pressing the RF key turns the output of the selected oscillator from on to off or from off to on depending on its current state.

Quadrature Mode

Pressing the Q key sets the second oscillator (Output B) to the same frequency as the first oscillator (Output A) and then offsets the phase of oscillator 2 (Output B) by 90o from Output A (i.e. Phase quadrature). A small letter ‘Q’ will appear on the display. Note: Quadrature operation is only possible in the si5351a at frequencies above 7MHz.

Adjusting the current oscillator frequency using the rotary encoder knob, for example, will now change both oscillator 1 (Output A) and oscillator 2 (Output B) at the same time, keeping the two outputs on the same frequency and in phase quadrature.

Pressing the Q key again will turn off the quadrature mode. Aside from the ‘Q’ symbol disappearing, there is not other immediate effect on output frequencies or phase shift. However, Oscillator 1 (Output A) and oscillator 2 (Output B) can now be adjusted separately again, and phase quadrature operation is no longer enabled.
Selecting the second oscillator (Output B) will now allow its frequency to be adjusted independently again, either via the Freq key or via the rotary encoder knob.

Quadrature mode is also turned off if the user turns off the output of either Oscillator 1 (Output A) or Oscillator 2 (Output B) with the RF key. Logically, if either output is turned off, phase quadrature mode is no longer operational.

AM Modulation

The test-bed signal generator produces (up to) three unmodulated ('CW') outputs. Once built, it turned out to be surprisingly easy to produce an amplitude modulated output signal without any extra components.

The spectrum of an AM signal consists of a carrier and two sidebands. Each sideband is equally offset on either side of the carrier by the required modulation frequency. For example, a 4MHz AM signal with 1kHz modulation is made up of a 4MHz carrier, one (upper) sideband located at 4.001MHz, and one (lower) sideband at 3.999 MHz. This diagram may help explain things.

For a perfect 100% modulated AM signal, the output level of each sideband will be one-half that of the carrier i.e. Each sideband will be 6 dB below the level of the carrier. The approach described here does not generate an AM signal with that level of precision. However, the AM signal produced is none-the-less a perfectly useful near-equivalent.

Here’s how to do it (easily):

Let’s say we want an AM signal on 4.0MHz. Begin by setting Output A to 4.0MHz and then set Output B to 4.001MHz. That's 1kHz above the frequency of Output A. Push a short length of hookup wire into each of these two output connectors and twist them together a little. Place this slightly twisted pair of wires near a shortwave receiver set to 4MHz. You will now hear a very nicely 1kHz modulated 4MHz signal.

For the purists out there, yes, this arrangement only generates the carrier plus one of the two sidebands required for a perfect ‘textbook’ AM signal. However, one sideband is enough to generate AM and make this work.

Of course, if you want the ‘textbook’ signal, set Output A to 4.0MHz, Output B to 4.001MHz, and Output C to 3.999MHz. That’s easily achieved with this signal generator. Three short lengths of wire will be needed this time. While there is little difference in the theoretical output signal, one thing you may notice is a slow changing modulation depth in the received AM signal when monitored on a receiver. This is due to a small phase difference between Output B and Output C. So, for testing, it's probably best to use the "single carrier +  single-sideband" version described earlier.

All told, I think this is a rather neat little feature. I’ve not seen this method described anywhere for the si5351a. It turns out, then, that the Si5351a chip is, potentially, a tiny AM transmitter in disguise!

I’ve not added a dedicated ‘AM’ button for this function, but if there is a demand, I’ll add it to the software and hardware.

Oh, it's also possible to produce 'two-tone' AM. I've not seen that in any regular signal generator, nor do I see any application. Despite that, here's an example for a 1kHz and a 400Hz pair of modulating tones.

Set Output A to the carrier frequency (e.g. 4.0MHz), Output B to 4.001MHz (4.0MHz + 1kHz AM modulation tone), and Output C to 3.9996 (i.e. 4.0MHz - 400Hz modulation tone). Use three wires, one per output, slightly twisted together, and you'll now you'll hear the two modulating tones (1kHz and 400Hz).

FM Modulation

You want to generate FM? Well, that’s a little more complicated. It’s possible to do it with the Si5351a with additional hardware. For now, you’re probably better off using my other signal generator design.

Final Comments

This test-bed signal source has turned out to be far more useful than I originally expected. It's most certainly been a 'test bed' for a number of ideas, and it’s also proven to be useful as a quick, basic signal source on my bench and in the field. The internal battery has proven to be extremely useful.

The battery seems to last for weeks, even months, before needing to be recharged, depending on use. This little signal generator draws very little current. To recharge it, just plug in a standard USB-type charger. The LEDs on the USB charger module fitted into the signal gnerator tell you when the charge is complete. Mine go from red (charging) to blue (Ready). I can see them clearly through the 3D printed case.

I’ve not included a battery meter. I've not needed it to date. Maybe that’s another feature to consider adding in future. Let me know.


arrowSoftware (includes ready-to-program HEX file):  Click here to download software

arrowFront panel artwork: FrontPanel

arrowEnclosure and Pushbuttons:  Industry-standard STL-format files  Click here to download

arrowKnob:   Industry-standard STL-format file  Click here to download the knob

arrowALL of the above downloads with one click: Click here to download all of these items

Want to go back to the main page? Click here to return directly.