DDS Sine Sweeper
It's about time for some hardware, so here is the DDS Sine Sweeper, a sine source which outputs a sine wave from 1Hz-40MHz. It's cheap and easy to build and all the plans and software are freely available.
From time to time I found myself needing a separate signal generator. In the back of my head I was thinking of just something simple but I also wanted to play about with DDS (Direct Digital Synthesis), a method of creating a waveform digitally. This allows precise control over the frequency from a microcontroller, allowing you to set the frequency and even jump to another very quickly. Although it does have drawbacks the simplicity was a winner for me.
Now comes the problem; DDS chips don't tend to come cheap, at least not with the specifications I wanted. That was until I stumbled across some cheap AD9850 modules on eBay, apparently they've been around for ages and I'd completely missed them. I've looked at the AD9850 before but at £16 (about $25) it seemed a little on the expensive side for what I wanted to be a cheap project for hackers and hobbyists. So at £8 for two I bought them from a reputable seller, waited less than a week and got to work.
I wanted it to be simple to build, using only basic skills I built the whole project on breadboard and used off the shelf cheap parts. Using a STM8S-Discovery, HD47780 LCD 2x16 module and some tactile switches that we're gathering dust, I built it on breadboard with jumper leads. The firmware is available as a hex file and can be flashed to the STM8S using the ST Visual Programmer.
I haven't completed it yet, I intend to add a variable output buffer to it (it's currently fixed at 1Vpp) and upload a PCB design as well. I've hit a bit of a limit both with the 2k RAM and the speed of the STM8S which have stopped some features dead in their tracks, but any input is welcome. I am wondering about using a STM32F4-Discovery, I've got one on my workbench and open source programming tools are available (Yagarto, OpenOCD and Eclipse). If I do I'll maintain it as a separate project to this.
Hope you find it useful.