AnsweredAssumed Answered

DDS AD9910 no work

Question asked by Hetan97 on Jun 8, 2016
Latest reply on Nov 16, 2016 by Hetan97

Hey people , I've been use AD9910 DDS for frequency's ramp but my code dosen't work, i don't know what is wrong , can anyone helps me ?

 

There is no change or signal in FILTERED OUT ....

 

Thanks

 

My code :

 

 

#include "mbed.h"

#include "stdio.h"

 

SPI DDS(p5, p6, p7); // mosi, miso, sclk

DigitalOut SPI_EN(p8); //Pino de enable da DDS.

DigitalOut IO_UPD(p9); //Pino de update da DDS.

DigitalOut RST(p10); //Pino de Reset da DDS.

Serial pc(USBTX, USBRX); // tx, rx

 

 

DigitalOut led1(LED1);

DigitalOut led2(LED2);

DigitalOut led3(LED3);

DigitalOut led4(LED4);

 

 

 

//**********************[Funções DDS]************************************

 

 

void DDS_WRITE(char regis_0, char dado_0) //Função para escrever um dado na DDS.

{

  

    SPI_EN = 0;          //Inicia a comunicação.

 

 

    wait(0.0001);       

    DDS.write(regis_0); //envia a parte alta do registrador de endereço para o DDS.

    wait(0.0001);

    DDS.write(dado_0); //envia a palavra de dado para o DDS.

  

     

    SPI_EN = 1;          //Encerra a comunicação.

 

 

}

 

 

void DDS_ATUALIZA(void)  //Função para atualizar os dados escritos nos registradores da DDS (toogle no pino IO_UPD).

{

    wait(0.0001);

    IO_UPD = 1;

    wait(0.0001);

    IO_UPD = 0;

  

}

 

 

//********************** [Programa Principal]****************

 

 

 

int main (void){

  

  RST=1;

  wait(0.0001);

  RST=0;

 

     

  DDS.format(8,0); //SPI no formato 8 bits em modo 0 (ver biblioteca).

  DDS.frequency(10000);

                 

  SPI_EN = 1; //Inicia com o enable da DDS em nível 1.

  IO_UPD = 0; //Inicia com o pino de update em nível 0.

 

  int DADOS_SPI; // Int para transformar o valor em inteiro

  char DADOS_PC[10]; // É NECESSÁRIO APENAS 10 CARACTERES PARA SETAR 32 BITS DA DDS

 

 

 

 

//*********************[ Pré carregamento dos registradores  ]**********************

 

 

  

  wait(0.1);

 

 

char CONF_CFR1[4]={0x00,0x00,0x00,0x00};

char CONF_CFR2[4]={0x20,0x08,0x40,0x00};

char CONF_CFR3[4]={0x7F,0x7F,0x00,0x00};

char CONF_IOUPT[[4]={0x00,0x00,0x00,0x00};

char CONF_RAM0[4]={0x66,0x66,0x66,0x66};

 

for(int j=0; j<=3; j++){ //Laço para gravar os valores do vetor CFR1 no Registrador 0x00 (DDS_REGIS[0])

 

  pc.printf(" %d \n",CONF_CFR1[j]);

  DDS_WRITE(0x00,CONF_CFR1[j]);

  }

  DDS_ATUALIZA();

 

  led1=1;

  wait(0.25);

 

for(int k=0; k<=3; k++){   //Laço para gravar os valores do vetor CFR2 no Registrador 0x01 (DDS_REGIS[1])

 

 

  DDS_WRITE(0x01,CONF_CFR2[k]);

  pc.printf(" %d \n",CONF_CFR2[k]); 

  }

  DDS_ATUALIZA();

  led2=1;

  wait(0.25);

 

for(int l=0; l<=3; l++){   //Laço para gravar os valores do vetor CFR3 no Registrador 0x02 (DDS_REGIS[2])

 

  pc.printf(" %d \n",CONF_CFR3[l]);

  DDS_WRITE(0x02,CONF_CFR3[l]);

     

  }

  DDS_ATUALIZA();

  led3=1;

  wait(0.25);

 

for(int m=0; m<=3; m++){   //Laço para gravar os valores do vetor FTW no Registrador 0x05 (DDS_REGIS[5])

 

  pc.printf(" %d \n",CONF_FTW[m]);

  DDS_WRITE(0x03,CONF_FTW[m]);

     

  }

  DDS_ATUALIZA();

  led4=1;

  wait(0.25);

 

for(int n=0; n<=3; n++){ //Laço para gravar os valores do vetor FTW no Registrador 0x05 (DDS_REGIS[5])

 

  pc.printf(" %d \n",CONF_RAM[n]);

  DDS_WRITE(0x04,CONF_IOUPT[n]);

 

  }

  DDS_ATUALIZA();

  led4=0;

  wait(0.25);

 

 

for(int o=0; o<=3; o++){ //Laço para gravar os valores do vetor RAM no Registrador 0x05 (DDS_REGIS[5])

 

  pc.printf(" %d \n",CONF_RAM0[o]);

  DDS_WRITE(0x0F,CONF_RAM0[o]);

     

  }

  DDS_ATUALIZA();

  led4=1;

  wait(0.25);

 

 

for(int o=0; o<=3; o++){ //Laço para gravar os valores do vetor RAM no Registrador 0x05 (DDS_REGIS[5])

 

  pc.printf(" %d \n",CONF_RAM[o]);

  DDS_WRITE(DDS_REGIS [12],CONF_RAM[o]);

     

  }

  DDS_ATUALIZA();

  led4=0;

  wait(0.25);

  led3=0;

  wait(0.25);

  led2=0;

  wait(0.25);

  led1=0;

  wait(0.25);

 

 

}

Outcomes