Wednesday, 20 July 2011

DDS Function Generator







This is a new implementation of the AVR DDS signal generator v2.0, already published in scienceprog.com.  It is obvious that full credit for the original schematic and the firmware goes to its original creator. Presented here is a different PCB that is compact, single sided with only through-hole components for easy construction. 




● Parts list

Part
Value
R1
470 Ω ½W 5%
R2
10 ΚΩ ¼W 5%
R3
100 ΚΩ ¼W 1%
R4
20 ΚΩ ¼W 1%
R5
20 ΚΩ ¼W 1%
R6
10 ΚΩ ¼W 1%
R7
20 ΚΩ ¼W 1%
R8
10 ΚΩ ¼W 1%
R9
20 ΚΩ ¼W 1%
R10
10 ΚΩ ¼W 1%
R11
20 ΚΩ ¼W 1%
R12
10 ΚΩ ¼W 1%
R13
20 ΚΩ ¼W 1%
R14
10 ΚΩ ¼W 1%
R15
20 ΚΩ ¼W 1%
R16
10 ΚΩ ¼W 1%
R17
20 ΚΩ ¼W 1%
R18
10 ΚΩ ¼W 1%
R19
20 ΚΩ ¼W 1%
R20
100 Ω ¼W 5%
R21
100 ΚΩ ¼W 1%
R22
12 ΚΩ ¼W 1%
R23
150 Ω ¼W 5%
POT1
1 ΚΩ linear potentiometer
POT2
47 KΩ linear potentiometer
POT3
10 ΚΩ trimmer
C1
100 nF MKT/polyester
C2
100 nF MKT/polyester
C3
18 pF ceramic
C4
18 pF ceramic
Q1
16 MHz crystal
IC1
ATMEL ATMEGA16P
IC2
LM358N
BNC1 – BNC2
BNC female connector
S1 – S6
Push button
LCD Header
Female header 16 pin for LCD
LCD Module
HD44780-based 2×16 character LCD
ISP
Male header 2x3 for ISP
POWER
Female header 4-pin for power as follows :
PIN1 : +12V
PIN2 : -12V
PIN3 : GND
PIN4 : +5V
LED1
3 mm green led
ON/OFF
Miniature on/off switch




● Power supply

For powering up the function generator, a PC ATX power supply unit was used, where all voltages are already available (+12V, -12V, +5V). The wiring is shown in the following image, taken from scienceprog.com.



● PCB Making-of
for making of pcb video click here




Programming of the ATMEGA16 with usbtiny programmer 


The device firmware can be downloaded here :

● Changes in firmware

Because of the present LCD character orientation, which is different from the original implementation (180 degrees), the following changes in main.c were made :

Buttons LEFT and RIGHT were reversed :

#define LEFT 3//PORTD
#define RIGHT 1//PORTD

Buttons TOP and BOTTOM were reversed :

#define DOWN 4//PORTD
#define UP 0//PORTD

For the latest version of AVR-GCC compiler, the following changes should be made (according to Geoff comment on scienceprog.com) :

struct signal{
volatile uint8_t mode; //signal
volatile uint8_t fr1; //Frequency [0..7]
volatile uint8_t fr2; //Frequency [8..15]
volatile uint8_t fr3; //Frequency [16..31]
volatile uint32_t freq; //frequency value
volatile uint8_t flag; //if “0″generator is OFF, “1″ – ON
volatile uint32_t acc; //accumulator
volatile uint8_t ON;
volatile uint8_t HSfreq; //high speed frequency [1...4Mhz]
volatile uint32_t deltafreq; //frequency step value
}SG;

The ATMEGA16 fuses should be :

HIGH = 0×59
LOW = 0xCF

This is interpreted to the following options checked (all others unchecked) :

OCDEN
SPIEN
BOOTSZ1
BOOTSZ2
SUT1
SUT0
Testing 










0 comments:

Post a Comment

Note: only a member of this blog may post a comment.

adhitz

Twitter