Post Go back to editing

AD9102 Output Signal

I’m using  AD9102, I write and read in all register but I haven't output signal.

What is the minimum registers configuration for generate a signal?

Can it work without calibration?

In attachment the schematic.

Regards.

Valentino

ad9102.pdf
Parents
  • Hello Valemea,

    I struggled with this as well. The documentation is appalling.

    Anyway, the secret of making it work is to understand that it is only the shadow registers that are updated when you write to the register set. We used a clock frequency of 167.772160 MHz to give a 10 Hz step resolution. This is the sequence I used to output a sine wave based on the built in DDS sine wave generator:

    Out_port(~ad9102_nTrigger, ad9102_nTrigger);          //Trigger is off

    Out_port(~sig_gen_reset,sig_gen_reset );       //reset is inactive

    usleep(100);  //I don't know how long it takes to come out of reset - not in data sheet

    sig_gen_control_701(SPICONFIG, 0x0);    //use 4 wire mode - seperate transmit and receive pins

    sig_gen_control_701(POWERCONFIG,0);    //set the power config

    sig_gen_control_701(CLOCKCONFIG,0);    //set the clock config

    sig_gen_control_701(DDS_TW32, 0);                    //we go for 1000 Hz, in 10 Hz steps = 100. 0 in upper word

    sig_gen_control_701(DDS_TW1, 100 <<8);   //1kHz, but in upper 8 bits of lower tuning word

    sig_gen_control_701(DAC_DGAIN, DAC_GAIN_x1 <<4);          //set the gain to 1. DAC_GAINx1 = 0400h

    sig_gen_control_701(DACDOF, 0);                              //No offset

    sig_gen_control_701(WAV_CONFIG, WAVE_DDS_SINE | WAVE_prestored);          //set the waveform to DDS SINE

    sig_gen_control_701(PAT_TYPE,0);        //repeat continuously

    sig_gen_control_701(RAMUPDATE,1);   //update all SPI registers --ABSOLUTELY CRUCIAL

    sig_gen_control_701(PAT_STATUS,1);      //start pattern

    Out_port(~ad9102_nTrigger, 0);          //Start Trigger

    After that you can change frequency with:

    sig_gen_control_701(DDS_TW32, freq_value >> 8);  //put bits [23..8] in upper tuning word

    sig_gen_control_701(DDS_TW1, (freq_value & 0xFF) << 8);   //put bits [7..0] upper 8 bits of lower tuning word

    sig_gen_control_701(RAMUPDATE,1);   //update all SPI registers --ABSOLUTELY CRUCIAL

    I hope this helps.

    Bart

Reply
  • Hello Valemea,

    I struggled with this as well. The documentation is appalling.

    Anyway, the secret of making it work is to understand that it is only the shadow registers that are updated when you write to the register set. We used a clock frequency of 167.772160 MHz to give a 10 Hz step resolution. This is the sequence I used to output a sine wave based on the built in DDS sine wave generator:

    Out_port(~ad9102_nTrigger, ad9102_nTrigger);          //Trigger is off

    Out_port(~sig_gen_reset,sig_gen_reset );       //reset is inactive

    usleep(100);  //I don't know how long it takes to come out of reset - not in data sheet

    sig_gen_control_701(SPICONFIG, 0x0);    //use 4 wire mode - seperate transmit and receive pins

    sig_gen_control_701(POWERCONFIG,0);    //set the power config

    sig_gen_control_701(CLOCKCONFIG,0);    //set the clock config

    sig_gen_control_701(DDS_TW32, 0);                    //we go for 1000 Hz, in 10 Hz steps = 100. 0 in upper word

    sig_gen_control_701(DDS_TW1, 100 <<8);   //1kHz, but in upper 8 bits of lower tuning word

    sig_gen_control_701(DAC_DGAIN, DAC_GAIN_x1 <<4);          //set the gain to 1. DAC_GAINx1 = 0400h

    sig_gen_control_701(DACDOF, 0);                              //No offset

    sig_gen_control_701(WAV_CONFIG, WAVE_DDS_SINE | WAVE_prestored);          //set the waveform to DDS SINE

    sig_gen_control_701(PAT_TYPE,0);        //repeat continuously

    sig_gen_control_701(RAMUPDATE,1);   //update all SPI registers --ABSOLUTELY CRUCIAL

    sig_gen_control_701(PAT_STATUS,1);      //start pattern

    Out_port(~ad9102_nTrigger, 0);          //Start Trigger

    After that you can change frequency with:

    sig_gen_control_701(DDS_TW32, freq_value >> 8);  //put bits [23..8] in upper tuning word

    sig_gen_control_701(DDS_TW1, (freq_value & 0xFF) << 8);   //put bits [7..0] upper 8 bits of lower tuning word

    sig_gen_control_701(RAMUPDATE,1);   //update all SPI registers --ABSOLUTELY CRUCIAL

    I hope this helps.

    Bart

Children
No Data