Rethinking AVR DDS3 signal generator project

These things happen all the time. When you start a new project, but feel from the beginning that it’s not what you wanted. Usually they end up collecting dust. I think there is nothing shameful because it is better to fail than do nothing. There are thousands of examples where people, companies start new projects with enthusiasm but they never reach the day light. But without those efforts we wouldn’t see other great projects and products. Not all of them are made from first try. It’s been over a year since announcement of AVR DDS3 signal generator. As you have noticed there is no progress so far on it. And I am going to five up on it for a couple reasons. From the beginning I didn’t feel comfortable with it.

AVR DDS3 boards have arrived

Finally some update on AVR DDS3 signal generator. Circuit is practically done and PCBs are made. I decided to go with two microcontrollers on board to make it more functional. One microcontroller Atmega328P is gonna be dedicated to user interface and signal generator control. Second Atmega88 is gonna be used for signal generator only. This will give un-interruptable signal output while changing parameters or simply doing signal sweeps. Simple keypad should be convenient for entering frequency values and menu navigation.

Modeling of analog part for DDS3 signal generator

When building AVR DDS2 signal generator there were lots of discussions about signal conditioning in analog part of device. First argument was that LM358 wasn’t the best choice for this purpose. Another one pointed to sine wave that weren’t smooth enough. As you can see there are some dents on it. Other waveforms also are distorted especially when higher voltages are selected. This definitely asks for better analog part. Some people suggested to replace LM358 with OPA2134, but it seems to be quite expensive choice. In my opinion low noise general purpose op-amp can be great too. I’m gonna give a try to Texas Instruments TL074 low noise op-amp. It is low power, high slew rate (13V/us) IC – almost five times faster than LM358 and for same reasonable price.

AVR DDS signal generator V2.0

Finally second and improved AVR DDS signal generator is here. First AVR DDS V1.0 generator was only an attempt of running DDS algorithm without any amplitude control. This time I still wanted to keep things simple like minimum count of widely accessible components circuit, single sided PCB that comes together with good functionality. AVR DDS specification AVR DDS signal generator V2.0 is a firmware based DDS signal generator which uses slightly modified Jesper’s DDS algorithm adapted to AVR-GCC C program as in-line ASM. Signal generator has two outputs – one for DDS signal and another for high speed [1..8MHz] square signal – which may be used for reliving microcontrollers with wrong fuse settings or for other purposes as well. High speed (HS) signal is direct output from Atmega16 OC1A(PD5) pin. DDS output is used for all other signals that are generated via R2R resistor network and is adjusted via LM358N …

Continue reading

AVR-DDS signal generator in-line ASM explained

I have got a couple of questions (in fact not a first ones) for AVR DDS generator I have built: “that’s all the asm code that I don’t understand. Could you explain it? Is it possible to do it with inline asm (only in C)?” I decided to explain this part more deeply. Because it took some time for myself to figure this all out. First of all what wee have to do… it is to implement simple DDS algorithm. Read about it for example here: In few words Direct Digital Synthesis(DDS) is known as Numerically Controlled Oscillator. Simple rule: NCO-based DDS is a point(memory location)-skipping technique (and a constant interpolation of the stored signal) and runs at constant update(clock)-rate. As the DDS output frequency is increased, the number of samples per waveform cycles decreases. Practically speaking lets have some math. We have clock generator connected to MCU. In …

Continue reading