AnsweredAssumed Answered

AD9910 , How can load data and playback it using Arduino Uno

Question asked by mohamed.sayed on Apr 9, 2018
Latest reply on Jul 5, 2018 by Natsu_Dragneel

HI everybody....

I try to operate ram mode  mode without evaluation board but i failed.i tried  by SPI protocol using Arduino uno "micro-controller" to Operate RAM mode.

 -Fsystemclk = 1GHz

 - Start frequency = 250 MHz...............................0000000000..............10 bits

 - End frequency = 350 MHz................................11 11101000..............10 bits

 - frequency step = 0.1 MHz

 -rate =40ns.........................................................0000 0000 0000 1010..............16 bits

my program in steps :

1- CFR1......... {0x80,0x00,0x00,0x00} ram enable=1   to make the profile0 to be Ram-profile not single tone-profile         

2-CFR2.........default {0x00,0x40,0x08,0x20}

3-CFR3........ {0x1D,0x3f,0x41,0x32}......1GSbps

4-RAM Profile registers.........{0x00,0x00,0x0a,0xfa,0x00,0x00,0x00,0x21} Write the desired start ,end and rate                                                               addresses like above adresses from 250MHz to 350MHz (0000000000 to 11 1110                                                              1000) and the rate (0000 0000 0000 1010).

5-MASTREST

6-CS.....LOW

7- write the CFR1 data from the arduino to the ad9910

8-Apply the profile pins to select the Ram-profile0........digitalWrite(prof0,LOW);
                                                                                       digitalWrite(prof1,LOW);
                                                                                       digitalWrite(prof2,LOW);

9-write the Ram-profile0 data from the arduino to the ad9910

10-update 

11- write the CFR2 data from the arduino to the ad9910

12-update 

13-write the CFR3 data from the arduino to the ad9910

14-update 

15-CFR1......ram enable=0 to Write the data to the 0x16 RAM

16-update

17- Write the data to the 0x16 Ram like this.............tx_byte(0x16);
                                                                                  for(f=0;f<1000;f++)
                                                                                   {
                                                                                    value = (unsigned long)(round((x*pow(2,32))/1000));....FTW eq.
                                                                                    x=x+0.1;........x=250MHz +0.1 Step
                                                                                    tx_byte(value);......take first byte & transfer it
                                                                                    tx_byte(value>>8);......take second byte & transfer it
                                                                                    tx_byte(value>>16);......take third  byte & transfer it
                                                                                    tx_byte(value>>24);......take the fourth  byte & transfer it

                                                                                    }

 

18-update

19- CFR1......ram enable=1 to Operate the play-back mode

20-update

21-CS.....HIGH

////////////////////////////////////////////////////////////////////////////CODE/////////////////////////////////////////////////////////////////////////////////////////

#define prof0 0 
#define prof1 1
#define prof2 2
#define MASTREST 5
#define upd 6
#define CS 10

#include <SPI.h>

unsigned char cfr1[]={0x80,0x00,0x00,0x00};                       //Step_1
unsigned char cfr2[]={0x00,0x40,0x08,0x20};                       //Step_2
unsigned char cfr3[]={0x1D,0x3f,0x41,0x32};                        //Step_3
unsigned char profile0ram[]={0x00,0x00,0x0a,0xfa,0x00,0x00,0x00,0x21};                     //Step_4


void setup()
{
unsigned int k,m,f;
unsigned long value;
float x=250;
SPI.begin();
pinMode(MASTREST,OUTPUT);
pinMode(upd,OUTPUT);
pinMode(CS,OUTPUT);
pinMode(prof0,OUTPUT);
pinMode(prof1,OUTPUT);
pinMode(prof2,OUTPUT);


digitalWrite(MASTREST,HIGH);                                                             //Step_5
digitalWrite(MASTREST,LOW);                                                              

 

digitalWrite(CS,LOW);                                                                             //Step_6

 


tx_byte(0x00);                                                                                       //Step_7
for(m=0;m<4;m++)
tx_byte(cfr1[m]);

 

 

digitalWrite(prof0,LOW);                                                                       //Step_8
digitalWrite(prof1,LOW);
digitalWrite(prof2,LOW);

 

tx_byte(0x0e);                                                                                      //Step_9
for(m=0;m<8;m++)
tx_byte(profile0ram[m]);


digitalWrite(upd,HIGH);                                                                       //Step_10
digitalWrite(upd,LOW);

 


tx_byte(0x01);                                                                                     //Step_11
for(m=0;m<4;m++)
tx_byte(cfr2[m]);

 

digitalWrite(upd,HIGH);                                                                      //Step_12
digitalWrite(upd,LOW);

 

tx_byte(0x02);                                                                                    //Step_13
for(m=0;m<4;m++)
tx_byte(cfr3[m]);

 

digitalWrite(upd,HIGH);                                                                    //Step_14
digitalWrite(upd,LOW);

 

cfr1[m]=0x00;                                                                                    //Step_15
tx_byte(0x00);
for(m=0;m<4;m++)
tx_byte(cfr1[m]);

 

digitalWrite(upd,HIGH);                                                                      //Step_16
digitalWrite(upd,LOW);

 

tx_byte(0x16);                                                                                     //Step_17
for(f=0;f<1000;f++)
{
value = (unsigned long)(round((x*pow(2,32))/1000));
x=x+0.1;
tx_byte(value);
tx_byte(value>>8);
tx_byte(value>>16);
tx_byte(value>>24);

 

} 
digitalWrite(upd,HIGH);                                                                              //Step_18
digitalWrite(upd,LOW);

cfr1[m]=0x80;                                                                                              //Step_19
tx_byte(0x00);
for(m=0;m<4;m++)
tx_byte(cfr1[m]);

 

digitalWrite(upd,HIGH);                                                                               //Step_20
digitalWrite(upd,LOW);

 

 

digitalWrite(CS,HIGH);                                                                               //Step_21
}

 

 

void tx_byte(unsigned char tx_dat)                                      // Function for transfer data from Arduino to AD9910
{
SPI.transfer(tx_dat);
}

 

 

void loop()
{

 

}

                                                                                        

Please ,can you help me in my project.....thank you ^_^

 

Attachments

Outcomes