نمونه کد جهت راه اندازی ماژول سیگنال ژنراتور AD9850 با آردوینو: // DDS AD9850 Board und Arduino Uno
// Serielle Ansteuerung des DDS Board
// Fest-Frequenz-Ausgabe oder Frequenz-Sweep
//
// Matthias Busse Version 0.4 vom 30.11.2013
//Arduino Uno > AD9850 Board Anschlüsse
#define RST 11 // Arduino 11 > Board RST - Reset
#define FQ 10 // Arduino 10 > Board FQ - Frequenz Update
#define CLK 9 // Arduino 9 > Board CLK - Takt
#define DATA 8 // Arduino 8 > Board DATA - Daten
// Dann noch anschliessen
// Arduino 5V > Board VCC
// Arduino GND > Board GND
#define pulseHigh(pin) {digitalWrite(pin, 1); digitalWrite(pin, 0); }
void setup(){
AD9850_Init();
AD9850_Reset();
// Wenn nur eine feste Frequenz ausgegeben werden soll:
// AD9850_Frequenz(200000); // Frequenz in Hz einstellen
}
void loop(){
while(1) {
sweep(100000, 400000, 20, 1000); // wenn Frequenzen durchgesweept werden sollen
delay(1000);
}
}
void sweep(long int fstart, long int fstop, int nstep, int tms) {
// Die Frequenz linear durch sweepen
// ca. 2 ms pro Schritt werden mindestens benötigt.
//
// fstart: Startfrequenz
// fstop: Stopfrequenz
// nstep: Anzahl der Schritte
// tms: Sweepzeit in ms
//
// Matthias Busse Version 1.0 vom 27.11.2013
long int i, f, fdelta, tdelta;
unsigned long t1;
fdelta=(fstop-fstart)/(nstep-1);
tdelta=tms/(nstep-1);
for(i=0; i<nstep; i++) {
t1=millis();
f=fstart+(i*fdelta);
AD9850_Frequenz(f);
while((millis()-t1) < tdelta){}
}
}
void AD9850_Init(){
// Ausgänge definieren
// Matthias Busse Version 1.0 vom 27.11.2013
pinMode(RST, OUTPUT); // alles Ausgänge
pinMode(FQ, OUTPUT);
pinMode(CLK , OUTPUT);
pinMode(DATA, OUTPUT);
digitalWrite(RST, 0); // alles 0
digitalWrite(FQ, 0);
digitalWrite(CLK, 0);
digitalWrite(DATA, 0);
}
void AD9850_Reset(){
// DDS zurück setzen
// Matthias Busse Version 1.0 vom 27.11.2013
pulseHigh(RST); //Reset Signal
pulseHigh(CLK); //Clock Signal
pulseHigh(FQ); //Frequenz Update Signal
}
void AD9850_Frequenz(double frequenz){
// Die Frequenz übertragen und DDS starten
// Matthias Busse Version 1.0 vom 27.11.2013
long int y;
frequenz=frequenz/1000000*4294967295/125; //für ein 125 MHz Quarz
y=frequenz;
AD9850_SendData(y); // w4 - Frequenzdaten LSB übertragen
AD9850_SendData(y>>8); // w3
AD9850_SendData(y>>16); // w2
AD9850_SendData(y>>24); // w1 - Frequenzdaten MSB
AD9850_SendData(0x00); // w0 - 0x00 keine Phase
pulseHigh(FQ); // Die neue Frequenz ausgeben
}
void AD9850_SendData(unsigned char c) {
// 8 Bit Daten senden mit CLK Impuls
// Matthias Busse Version 1.0 vom 27.11.2013
int i;
for(i=0; i<8; i++) {
digitalWrite(DATA, (c>>i)&0x01);
pulseHigh(CLK);
}
}
[B][/B]