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)

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.

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?

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.


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,