已回答假定已回答

模数芯片AD7490运用中遇到的问题

songtiandong 在 2015-9-29 詢問的問題
最後回覆由steven0419於2017-2-17提供

ADI工程师:

      您好!今天在使用模数芯片AD7490时发现,DOUT引脚始终没有输出,供电电压5V,基准电压2.5V,我都量过,没有问题!

     程序代码如下:

 

//IO操作函数 

#define SPI_CS    PEout(0) //CS

#define SPI_SCLK  PEout(1) //SCLK

#define SPI_DOUT  PEout(2) //DOUT

#define SPI_IN   PEin(3)  //DIN

 

 

/************************************************************
AD7490数据转换 
*************************************************************/
uint16_t ad7490_convert(uint16_t channel)
{
   uint8_t i, tmp;
   uint16_t config_data, get_data;
   get_data = 0;
//WRITE SEQ ADD3 ADD2 ADD1 ADD0 PM1 PM0 SHADOW WEAK/TRI RANGE CODING

config_data = 0x8310;  // 1000 0011 0001 0000
config_data = config_data|(channel<<10);

//CS下降沿启动上一次转化和配置下一次转换的通道
SPI_CS=1;
delay_us(2);
SPI_CS=0;
delay_us(1);
SPI_SCLK=1;
delay_us(1);
//配置下一次转换的通道
for (i=0; i<16; i++)
{
  if (i < 12)
  {
   if ((config_data&0x8000) == 0)
    SPI_DOUT=0;
   else
    SPI_DOUT=1;
  }
 
  config_data = config_data << 1;
  SPI_SCLK=0;
  delay_us(2);
    tmp = SPI_IN;
   if (tmp == 0)
    get_data &= 0xFFFE;
   else
    get_data |= 0x0001;
    get_data = get_data << 1;
 

  SPI_SCLK=1;
  delay_us(2);
}
SPI_CS=1;
delay_us(10);

return get_data&0x0FFF;

}

 

主程序如下:

main

{

while(1)

{

  LED0=!LED0;   //闪烁LED,提示系统正在运行.

  LED1=!LED1;   //闪烁LED,提示系统正在运行.

  delay_ms(1);

  aa= ad7490_convert(0x00);

  ComPortsToPC(aa);

}

}

1 (3).jpg

蓝色波形为时钟(16个脉冲),黄色波形就是DOUT引脚输出的,感觉不对啊,读回来的数据全为0XFFF.感觉像是芯片没工作!

     希望你们能够提供技术支持,谢谢了!

結果