A place to exchange information about parts and kits supplied by http://kitsandparts.com
You are not logged in.
The AD9834 frequency output is as accurate as out 100 MHz reference clock.
If we set the DDS for an output of 12 MHz and the reference clock is 200 Hz high, then out 12 MHz output will actually be 12,000,024 Hz.
To compensate for this error, all we need to do is rewrite the FreqHex: table at the end of the source code at http://w8diz.com/qq-fc-project/ATmega88PA/ATmega88.asm.
I wrote a web program that calculates the new table values based on using the 100 MHz clock and measuring the DDS output freq when set for 10 MHz.
Go to http://w8diz.com/qq-fc-project/ATmega88PA/calc-9834.php to view the program.
Power up the DDS, which defaults to 10 MHz and measure the actual frequency output.
Enter the measured frequency (in Hz) into the field labeled "Enter measured frequency (Hz):" and click on "submit".
Cut and paste (replace) the new FreqHex: table into the source code and recompile the code.
Upload the resulting HEX file to the DDS target device and the result is a calibrated DDS output.
The only error from now on is a result of temperature changes to the 100 MHz clock which will result in some drift.
Another way to do it would be to store the calibration factor in eeprom on the processor. If the eeprom was never programmed (all ones) then the program would use the default value. A function would be required to allow for adjusting the calibration factor. This would be done by setting the DDS to output at a known frequency such as 10.00000000 MHZ to zero beat against WWV. In this mode adjusting the dial (encoder) would change the calibration factor NOT the desired DDS frequency, but it would still change the tuning word. When the output was EXACTLY 10.0000000 MHZ you would press the dial button and the new calibration factor would be saved to eeprom.
I'm going to use my 'DIZ DDS' as the vfo and keyer for a QRSS transmitter. As such I need a step up in frequency accuracy/drift. I have added a Bliley NV26R891 100.0MHz OCXO to drive the ASD9834. The Bliley Oscillator has a frequency control pin which requires 0 to 5V (regulated!) on it to set the Frequency. I put a 10K trimpot acoss the 5V line in the DDS and apply the wiper voltage to the Bliley, and bring it onto exactly 100.0MHz and the job is done! My accuracy/drift is now within + or - 5 parts in 100MHz - about half a Hertz in 10MHz. The Oscillator and oven heater on the Bliley work on 12 Volts so it doesn't overtax the onboard 5V regulator.
Another use for the DDS would be to GPSDO the Bliley and use the DDS as a standard frequency Generator. It could just about rival a Rubidium Standard, set up like that.