This is a refresh of an old project I did and posted elsewhere quite sometime back. I am publishing it again so that I can point to it for an upcoming project if needed. That project requires a square wave and thought I would see how well this works before borrowing a friend's function generator. Since I only need a relatively low frequency square wave, it might also be possible to just use the microcontroller itself. In any case, here is my AD9850 Frequency Generator BoosterPack for Texas Instruments development boards. It was one of the first PCBs I designed, and I cringe a bit when looking at it now, but it is functional.
The inexpensive AD9850 board was obtained off eBay and is especially useful with the Texas Instruments LaunchPad that has an integrated LCD. it can generate both sine and square waves. The project use an encoder with a pushbutton to adjust frequency and adjustment coarseness. In the photo below it is generating a 7000 Hz signal which is displayed on the oscilloscope.
The schematic is simple:
The encoder is a Bourns 652-PEC12R-4225F-S24. The capacitance shown in the schematic is supposed to reduce bounce and in practice it works OK. All the parts are through hole as seen in the photograph below:
The PCB is too tight and is poorly labelled. Those are among the things I would change if updating the design.
While it should work with most LaunchPads I had the FR6989 in mind as I developed it - in particular I wanted to use the integrated LCD display. Accordingly, I was careful not to obscure the display or the reset button. The software was developed with Energia V17. Here is a photo of what it looks like in operation:
The output from the AD9850 comes out the jumpers attached to the 90 degree male header pins marked with arrow A. The dark jumper wire is GND and the sine wave is coming out of the lighter wire on the right. Adjustments are made with the encoder knob marked by arrow B. Turning it adjusts the frequency up and down and the current value is output on the LCD as shown by the arrow C. The range is from zero to 32 MHz. Since fine adjustment is desired, as well as rapid adjustment, the push button on the encoder is used to change the coarseness of the adjustment. The magnitude is indicated by the battery indicator on the LCD as shown by arrow D. For example, in the photo three battery bars are showing which indicates that each adjustment/click of the encoder will change the output by 1000 Hz. When the encoder is pushed down it will cycle through in this case to 100 Hz adjustment (with two bars showing), 10 Hz (one bar), 1 Hz (no bars), and then up to 1 MHz (six bars), and so on. In practice, it adjusts pretty quickly with good resolution.
Another enhancement might be to have the software scroll the output value since as is it won't display full resolution due to the 6 digit screen. The Energia sketch can be found here.