AD9913 profiles configuration

Hello,

I can see  in my design strange behavior linked to the profiles configuration on AD9913.The component configuration is:

16MHz input multiplied by 15 = 240MHz, switching mode, serial configuration (SPI 200kbps)

The issue is:

I configure profiles 0,1,2 following steps below:

RESET DDS

Config of profile 0

IOupdate

RD check

Config of profile 1

IOupdate

RD check profile 1

Config of profile 2

IOupdate

RD check profile 2

I systematically read profile0 configuration in profile 1 and 2 registers even if:

- I program profiles 0, 1, 2 with different values

- OR I just program profile 0

I have not checked content of other profiles.

RD check is done on oscilloscope, adresses are correct. I program successfully CFR1 and CFR2.

MANY THANKS for feedback....

  • 0
    •  Analog Employees 
    on Jun 28, 2016 5:27 PM

    Hi Frederic,

    Try checking if you are using a different wordlength when you are trying to read the profiles. The profiles are 48 bits while other registers are 32 bit.

    Best Regards

    Louijie

  • Hi Louijie,

    I respect 48 bits wordlenght for profile registers...

    Below are results of another test, source code + result

    All is checked on oscilloscope

    same types of signals program successfully CFR1 and CFR2

    => Profile 1 and profile 2 are not writtable, there content is modified by writing in profile0. Once profile1 is configured, same value appears in Profile1 and Profile 2

    RESET_DDS;

       /********************************/

       READBACK_PROFILE1; // OK => Sent 0x8a, received 0x00 0x00 0x00 0x00 0x00 0x00
       READBACK_PROFILE2; // OK => Sent 0x8b, received 0x00 0x00 0x00 0x00 0x00 0x00
       READBACK_PROFILE0; // OK => Sent 0x89, received 0x00 0x00 0x00 0x00 0x00 0x00

        /********************************/

     

        buffer[0] = (uint16)PROFILE1_ADDR;

        for(i=0;i<6;i++)buffer[i+1]= (uint16)DDS_Profile[5-i];

        spiTransmitData(spiREG2,&DDS_COMFormat,7,&buffer[0]); // OK => Sent 0x0a 0x00 0x00 0x01 0x02 0x03 0x04

        UPDATE_DDS;

        READBACK_PROFILE1;                                                         // NOK => Sent 0x8a, received 0x00 0x00 0x00 0x00 0x00 0x00

        buffer[0] = (uint16)PROFILE2_ADDR;

        for(i=0;i<6;i++)buffer[i+1]= (uint16)DDS_Profile[11-i];

        spiTransmitData(spiREG2,&DDS_COMFormat,7,&buffer[0]); // OK => Sent 0x0b 0x00 0x00 0x05 0x06 0x07 0x08

        UPDATE_DDS;

        READBACK_PROFILE2;                                                          // NOK => Sent 0x8b, received 0x00 0x00 0x00 0x00 0x00 0x00

        buffer[0] = (uint16)PROFILE0_ADDR;

        for(i=0;i<6;i++)buffer[i+1]= (uint16)DDS_Profile[17-i];

        spiTransmitData(spiREG2,&DDS_COMFormat,7,&buffer[0]); // OK => Sent 0x09 0x00 0x00 0x09 0x0a 0x0b 0x0c

        UPDATE_DDS;

        READBACK_PROFILE0;                                                          // OK => Sent 0x89, received 0x00 0x00 0x09 0x0a 0x0b 0x0c

        /*****************************/

     

        READBACK_PROFILE1;  // NOK => Sent 0x8a, received 0x00 0x00 0x09 0x0a 0x0b 0x0c
        READBACK_PROFILE2; // NOK => Sent 0x8b, received 0x00 0x00 0x09 0x0a 0x0b 0x0c
        READBACK_PROFILE0 // OK => Sent 0x89, received 0x00 0x00 0x09 0x0a 0x0b 0x0c

     

        /**************************************************/

  • 0
    •  Analog Employees 
    on Jun 29, 2016 4:29 PM

    Be aware that writing/reading profile registers requires that you set the profile pins (PS0-PS2) to the desired register. For example, to write/read registers associated with profile 2 requires PS2/PS1PS0 = 0/1/0.

  • 0
    •  Analog Employees 
    on Aug 2, 2018 3:30 PM
    This question has been assumed as answered either offline via email or with a multi-part answer. This question has now been closed out. If you have an inquiry related to this topic please post a new question in the applicable product forum.

    Thank you,
    EZ Admin