An Arduino based DDS-60 controller

A recent project has been the building of a digital VFO based around the DDS-60 kit and Arduino controller. It's a useful thing to have either as part of a homebrew transmitter or transceiver or as a piece of test equipment. It can generate RF from 1 to 60 MHz in 1 Hz steps with the stability of a crystal oscillator and can run as a QRSS beacon. It's nothing particularly original and it's not rocket science but it might be helpful for someone wanting to get started with DDS and microcontrollers. It's still a work in progress and I'll be happy if anyone wants to contribute ideas or discussion.

Use the links below or at the top right to navigate the pages.

Anonymous (not verified)

Sat, 08/04/2012 - 16:49

Why do you show a +12v supply to the Arduino? I assume the DDS60 needs it (I have the AD9850 which is +5v max). The Arduino, if I recall correctly, has a max input of +7v. What am I missing?

The RBBB board has a three terminal regulator so you can supply it with 12 volts. The Arduino chip itself only gets 5 volts.

I don't recall the regulator on the RBBB getting excessively hot but, now that you've mentioned this, I notice that the specs on the RBBB board say 5 to 12 volts. Given that "12 volt" power is usually more like 13.5 or so, I guess it would be a good idea to put a resistor in series with the power line into the RBBB. If a value was chosen to reduce the voltage a bit then it would help dissipate some power and keep the RBBB's regulator cooler.

The specifications here say 4v p-p into 50 ohms.

It's a while ago now but when I looked at it on an oscilloscope I seem to remember that the waveform looked a little distorted at that level.

If you keep it at, say, 2v p-p then if my math is correct that's about 10 mw of power into 50 ohms. If you can get 3v p-p then that's about 22 mw.

Anonymous (not verified)

Thu, 01/24/2013 - 22:09

You backlight voltage to pin 15 is 12v through a 560 ohm R.
This could easily drop to 5v. Was that the intent, and why not
Feed it 5v directly? My LCD backlight specs at 5v, and I may
feed it 5v directly as I have seen elsewhere.

The backlight on my display is an LED so it definitely needs a current limiting resistor. The 560 ohm gave me reasonable brightness at 12v. I'm no expert on LEDs but current is the important measurement, not voltage. They're basically a forward biased diode so the voltage across them is fairly constant. You control the brightness by varying the current.

I think I have seen circuits with the backlight connected directly to 5v as you describe. I can only assume in those cases that the display has a current limiting resistor built in. Maybe yours is like that but you'd want to be sure. You don't want to connect an LED directly to a voltage source.

It doesn't make sense to me to regulate the voltage to the backlight LED. If it is just going through a built in or external resistor then it doesn't need a precise voltage. The little regulator on the Arduino RBBB board is hot enough already so you wouldn't want to put more current through it unnecessarily.


You comments make good sense, and I agree. The light turned on in my head, THANK YOU! I will try a variable resistor from the Arduino's 12V to bias the backlight LED to "ON", like I have done with LEDs in another project I built. Many thanks!!

Your comments will send me back to the books to study diodes again. This is a hobby I learn so much from!


Dave (not verified)

Tue, 02/26/2013 - 17:54

Thanks for the sketch. I'm new to the Arduino and not a C programmer. I would never have made it without your work.

I couldn't get the buttons to work, and found that the internal pullups were not active. I tried adding external resistors and they worked. In the code to initialize the button ports I had to reverse the order of these lines, like this:
pinMode(_buttonPorts[i], INPUT); // set port as input
digitalWrite(_buttonPorts[i], HIGH); // enable pull-up resistor
When I first set the ports as inputs and then enabled the pullups, all was fine. Strange, I sez.

Thanks again for your efforts.

charles (not verified)

Thu, 10/03/2013 - 01:23

This an excellent VFO. Is there a code example that adds a button to retrieve a saved frequency from a memory address and send it to the DDS module? That is, showing where the additional lines of code should be added to the latest version?

Art (not verified)

Mon, 10/28/2013 - 08:52

I agree that this design makes an excellent VFO! I have built several (single band) versions of this and have settled on this as my 'standard' VFO. One caution to anyone who wants to work on / modify Ross' code - the Arduino compiler vs 1.0 works fine but following versions do not produce executable code (for me). I have been too lazy to try to figure out why, so I just keep a copy of vs 1.0 on hand for when I have to re-compile. Many thanks to Ross for the fine work! OBTW I laid out a PCB for the design with an Ebay module but it uses a 'dork' board for the processor - so its probably not useful to many others.

I built the VFO as a signal generator 2 years ago. I couldn't locate the same encoder so I ended up having to change a little of the code to count properly. Occasionally, the encoder would double increment or not at all over one 360 degree rotation.

Yesterday I decide to attack my code change, noticed I had overlooked how the interrupt was fired (CHANGE) and determined I needed it to fire on a rising edge. After reprogramming the chip, I found a totally unpredictable unit. I searched and searched for a loose connection to no avail. While the IDE was open, I inadvertently clicked on the link to this page, saw the comment about the buttons, checked mine and sure enough - not pulled up. This was a surprise as my unit has worked flawlessly since I built it (not counting the glitches from the encoder).

I did the pinMode order change, and found not only was the unit working again, but my encoder changes worked correctly.

I'm not sure I would have looked for the buttons to have been floating had I not serendipitously got here.

The question is why was the order reversal necessary? I believe I used Arduino 1.00 initially and now am using 1.52b.
What goes on internally as the code compiles is not my forté, but I wouldn't think it should change the order of a user's code.


What about working with display type like this?

RS = 12
E = 13
D7 = 7
D6 = 6
D5 = 5
D4 = 4

mine is not working with

LiquidCrystal lcd(A0, A1, A2, A3, A4, A5);


Anonymous (not verified)

Thu, 02/26/2015 - 06:41

In reply to by Gelvis (not verified)

instead of 'LiquidCrystal lcd(A0, A1, A2, A3, A4, A5);', use
LiquidCrystal lcd(14, 15, 16, 17, 18, 19);

Bob N9KR (not verified)

Tue, 11/24/2015 - 12:10

Hi Ross. Just an update on my experiments with this great code and a Mega2560. I needed more pins than the Mega328 provides for some switching control functions in my shack. Built up a Mega2560 & AD9850 version that works well for me but had to make some hacked up code changes (mostly due to direct port manipulation pin changes between the 2 boards…).
If anyone’s interested, building & demo videos are here-- and here—
The 2nd video has links to a fritzing diagram & my hacked up code in the comments section.
Disclaimer: I’m not a programmer and my code hacks are trial & error & definitely not professional, but worked for my setup.
73, Bob N9KR

Rich Carstensen (not verified)

Sat, 12/12/2015 - 16:31

I'm sad to report after talking with Bob, N9KR, that when I load Versions 1.31 and 1.4 off this Web site they don't work! If I load the software into the Arduino Editor and select the 328 and put one program at a time in, they show Errors! Of coarse I don't have anything attached to the port! Just straight Upload of software off this web Site into the Editor with no Arduino Board attached! Is this normal? Thanks!

Rich W8VK

WB6LA (not verified)

Fri, 02/10/2017 - 05:58

You mention use of this VFO as a QRSS beacon. Are harmonics somewhere suppressed such that no low-pass filter(s) are needed? I
mean, if the beacon is set for 7.1 MHz do we need to block 14.2 and 21.3 MHz, etc? It would be way cool to avoid having to wind the
toroids for so many filters. Cheers,

alicebrant (not verified)

Thu, 07/26/2018 - 07:52

I extremely influenced on your written work with help with assignment . Your post is nearly nothing anyway everything is extraordinarily open and amazingly clear justification of subject. It contains truly information; your site is inconceivably useful. A debt of gratitude is in order for sharing; I'm needing forward to extra posts. Allude purchase expositions composing administration to get impeccable written work thoughts.