Wiki

Reso-nance numérique | Arts et cultures libres

Outils du site


Panneau latéral

materiel:ad9850:accueil

Ceci est une ancienne révision du document !


Table des matières

AD9850

Datasheet

Avec Arduino

Code Arduino

++++

/* 
 * USE TWO AD9850
 * Modified from http://nr8o.dhlpilotcentral.com/?p=83
 * 9850t http://www.analog.com/static/imported-files/data_sheets/AD9850.pdf
 */
 
 // 1st MODULE
 #define W_CLK 8       // Pin 8 - connect to AD9850 module word load clock pin (CLK)
 #define FQ_UD 9       // Pin 9 - connect to freq update pin (FQ)
 #define DATA 10       // Pin 10 - connect to serial data load pin (DATA)
 #define RESET 11      // Pin 11 - connect to reset pin (RST).
 
 // 2nd MODULE
 #define W_CLK2 4       // Pin 4 - connect to AD9850 module word load clock pin (CLK)
 #define FQ_UD2 5       // Pin 5 - connect to freq update pin (FQ)
 #define DATA2 6       // Pin 6 - connect to serial data load pin (DATA)
 #define RESET2 7      // Pin 7 - connect to reset pin (RST).
 
 #define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); }
 
 // transfers a byte, a bit at a time, LSB first to the 9850 via serial DATA line
void tfr_byte(byte data, int pin_clock, int pin_data)
{
  for (int i=0; i<8; i++, data>>=1) {
    digitalWrite(pin_data, data & 0x01);
    pulseHigh(pin_clock);   //after each bit sent, CLK is pulsed high
  }
}
 
 // frequency calc from datasheet page 8 = <sys clock> * <frequency tuning word>/2^32
void sendFrequency(double frequency, int pin_clock, int pin_fq, int pin_data) {
  int32_t freq = frequency * 4294967295/125000000;  // note 125 MHz clock on 9850
  for (int b=0; b<4; b++, freq>>=8) {
    tfr_byte(freq & 0xFF, pin_clock, pin_data);
  }
  tfr_byte(0x000, pin_clock, pin_data);   // Final control byte, all 0 for 9850 chip
  pulseHigh(pin_fq);  // Done!  Should see output
}
 
void setup() {
 // configure arduino data pins for output
  pinMode(FQ_UD, OUTPUT);
  pinMode(W_CLK, OUTPUT);
  pinMode(DATA, OUTPUT);
  pinMode(RESET, OUTPUT);
 
  pinMode(FQ_UD2, OUTPUT);
  pinMode(W_CLK2, OUTPUT);
  pinMode(DATA2, OUTPUT);
  pinMode(RESET2, OUTPUT);
 
  pulseHigh(RESET);
  pulseHigh(W_CLK);
  pulseHigh(FQ_UD);  // this pulse enables serial mode - Datasheet page 12 figure 10
 
  pulseHigh(RESET2);
  pulseHigh(W_CLK2);
  pulseHigh(FQ_UD2);  // this pulse enables serial mode - Datasheet page 12 figure 10
}
 
void loop() {
  sendFrequency(1320, W_CLK, FQ_UD, DATA);  // freq
  sendFrequency(440, W_CLK2, FQ_UD2, DATA2);  // freq
 
  while(1);
}
/home/resonancg/www/wiki/data/attic/materiel/ad9850/accueil.1424280074.txt.gz · Dernière modification: 2015/02/18 18:21 de resonance