D-SPiRiT – Direct digital Synthesis PRojecT

Always wanting an RF Signal Generator that would be able to provide a decent RF Signal, with minimal (zero) drift, the availability of the DDS Module on eBay presented a good opportunity. However, a DDS chip such as the AD9850 would need to be controlled by  a microcontroller (uC). With opportunities come challenges and one of them was the choice of the uC, this was the easy one. Microchip had always been a favourite with my friend Charudatt (VU2UPX) who had been using them successfully for several years.

The next challenge was to learn PIC  programming; which in itself seemed daunting. However, there are several good tutorials, forums and a lot of helpful folk out there on the internet who provided ideas and sample code that became the building blocks of the project. I chose to work with BASIC (Proton IDE) since I knew BASIC and was too lazy to relearn C.


  • – Stable frequency signal: 1Mhz to 55Mhz (approx)
  • – Step Size: 1Hz, 10Hz, 100Hz; 1KHz, 10KHz, 100KHz; 1MHz, 10MHz
  • – User defined memory: 15 Channels (U00 to U14)
  • – WARC Bands: 10 Channels
  • – Configuration: Default Startup Frequency, IF Offset, Clock Calibration

D-SPiRiT_v1.1 (Courtesy – VU2UPX)D_SPiRiT_Locked

The DDS Module
The VFO is based around the inexpensive DDS module available on eBay. There seems to be no problems with the DDS module based on the limited testing that I could undertake.

The Veroboard
I decided to build this on a veroboard and make a prototype before trying it out on a proper PCB. This was made as a set of modules (LCD, Switches, Rotary Encoder, DDS Module. This took several hours of soldering and some quality testing to ensure that there were no solder bridges and wrong connections.


A modular approach

A modular approach

The microcontroller
The PIC16F1847 was suggested by VU2UPX and it is an excellent choice. I was able to cram a lot of features (with code usage about 70% and 21% of variable bytes). I tried a modular approach here too, with some code reuse that I had learnt (Cohesion and Coupling). However, I did not try parameter passing and trying to write a library of common modules and that I think will be my next task for another project. The hex file is available here (D_SPiRiT). Rename the file to .hex

A test of the frequency vs the output signal was carried out at a friend’s QTH (M0GDE) who patiently called out the readings and made notes. We were able to use the Perseus and 60Mhz oscilloscope to provide us the readings.

Points to Note
The DDS module prefers to run on 3v3, and the voltage regulator get quite warm (hot!!)
A finger on the crystal changes the frequency and it does run warm, maybe it’s the voltage


Part 1 – Introduction

Part 2 – Video 2


Tagged with: , , , , ,
Posted in Amateur Radio

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: