This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

tlv2545的数据SDO端输出都是高电平

我参考电压和供电电压都是3.3V,AIN+接2V,AIN-接地,CS线和SLK接STM32端口,电路图和datasheet给的是一样的,对照时序图写的程序,但是我SDO端输出的全部是高电平。不知道是时序还是有问题还是芯片有问题呢

UINT16 AD_Read_Data(void){
 int i;
 UINT16 data = 0x0000;
       
        SCLK_High;
        CS_High;
        SCLK_Low;
        SCLK_High;
        CS_Low;
        delay_5us(2);//延迟10us

 for(i=0;i<12;i++)
 {
           SCLK_Low;
           data <<= 1;
           data = data|SDO;
           SCLK_High;
 }
              
        for(i=0;i<5;i++){
          SCLK_Low;
          SCLK_High;
        }
       
        delay_5us(2);//延迟10us
 
        CS_High;
        data&=0x0fff; 
 return data;
}

  • 1.判定程序对不对最简单的方法是用示波器测试CS, SCLK,FS,SDO的波形,然后与datasheet提供的波形做比较,符合时序要求即可。(建议您用波形对照,因为TI在ADC控制上,是没有程序参考的)

    2. 关于芯片方面,市面上的ADC芯片假货并不多,如果不放心,可以在TI网站上申请:

    申请网站: www.ti.com.cn/.../buy.tsp

    申请方法:www.ti.com.cn/.../gencontent.tsp

  • 我用示波器比对过了,时序图和datasheet的差不多,但是还是出不来波形,您有没有碰到这样的情况呢,我最近又申请了两片,换个新的试试再说吧,谢了先~~

  • 调出来了,还是程序的问题,换了一种思维。

    UINT16 AD_Read_Data(void){

    int i=0;

    UINT16 data = 0x0000;

           CS_High;

           for(i=0;i<20;i++)

           {

             SCLK_High;

             if(i>7)

               {

                 CS_Low;

                 data <<= 1;

                 if(SDO&0x01)

                 data|=0x01;

               }

             SCLK_Low;

           }

           CS_High;

           data&=0x0fff;

           return data;

    }

    这个可以用~~~给后面的人吧,避免也出现我这样的情况。

  • 调出来了,还是程序的问题,换了一种思维。

    UINT16 AD_Read_Data(void){

    int i=0;

    UINT16 data = 0x0000;

           CS_High;

           for(i=0;i<20;i++)

           {

             SCLK_High;

             if(i>7)

               {

                 CS_Low;

                 data <<= 1;

                 if(SDO&0x01)

                 data|=0x01;

               }

             SCLK_Low;

           }

           CS_High;

           data&=0x0fff;

           return data;

    }

    这个可以用~~~给后面的人吧,避免也出现我这样的情况。