My design goal was to end up with a standalone box that had DC power in, RF out, a tuning knob, an LCD display, a few push buttons to control various functions and still have a few I/O lines left over. These extra lines would be available for transmit / receive switching, RIT or whatever.
Arduino controller board
I used an Arduino Duemilanove for my first experiment with the DDS-60. It worked well but it's a bit of a squeeze mounting it in a small box along with the other components and it contains more circuitry than is really needed in a production device. With more searching around I discovered the The Really Bare Bones Board or RBBB from Modern Device. It's Duemilanove compatible and at $12.50 makes a great general purpose controller for various projects. It does not have a built-in USB interface like the Duemilanove so you also need a USB BUB board. The good news is if you have multiple RBBB projects then you only need one USB BUB board since you only plug it in and use it when transfering firmware from your computer to the controller.
If you prefer a more do it yourself approach, an alternative is to not use any Arduino board at all. Several vendors sell ATmega328 chips preprogrammed with the Arduino bootloader. You could easily put that plus a few components directly on your own board. You'd still need something like the USB Bub board for loading the firmware into the chip. The RBBB just makes it all rather simple. If you get bored with the DDS-60 you can use the RBBB for your next robotics project.
Liquid Crystal Display
16 character x 2 line LCD displays are available at low cost. Most are pin compatible with the Hitachi HD44780. These have a parallel data interface and require a minimum of six I/O lines to drive. The Arduino project has a standard code library to drive the HD44780.
I bought a nice display with a blue backlight for $8.50 on eBay on eBay. The seller seems to have a continuing supply of them and other interesting stuff.
The rotary encoder is the tuning knob. It turns continuously in either direction and tells the controller what it's doing. These come in various types. I'm no expert on these but basically optical is more precise and more expensive than mechanical. An important specification is the pulses per revolution or PPR. This is the number of discrete steps you get when turning the knob. After playing with my old Kenwood TS430S I figured that I wanted 64 PPR. Mouser sell an optical 64 PPR encoder for $17. I used this in my first version but then kicked myself when I realized that a cheaper device will work just fine. See here for an explanation of how the incremental or quadrature types work. If the controller is able to detect every rising or falling edge on both A and B switches then it is notified four times for every one of the PPR pulses. I missed that fact earlier. An inexpensive 16 PPR encoder will provide the desired 64 steps per revolution. My second version uses a $2.80 mechanical encoder from Mouser made by Bourns with a part number of 3315C-111-016.
The encoder is connected to the two interupt inputs on the Arduino rather than polled like the push buttons. This ensures that the controller doesn't miss any pulses even when the encoder is turned quickly.
Three push buttons are used for various functions. These are inexpensive momentary switches from Radio Shack.
The following are the Arduino pin assignments. D0 and D1 are hard wired in the Arduino. The encoder must use D2 and D3 since only they can be used with interupts. The others can be changed if it simplifies board layout or wiring and the software is correspondingly changed.
|D0||Serial / USB receive|
|D1||Serial / USB transmit|
|D2||Rotary encoder pin A|
|D3||Rotary encoder pin B|
|D8||Push button 1|
|D9||Push button 2|
|D10||Push button 3|
Note that D14 to D19 are labeled A0 to A5 on the Arduino board and documentation because they can be used for analog inputs. They can however also be used as general digital I/O pins and addressed as D14 to D19 with the standard I/O functions.