TI论坛
直播中

bigbangboom

9年用户 1400经验值
擅长:电源/新能源
私信 关注
[问答]

ADS7883的GND不连接能读出数据,连接后读取的数据全为0,为什么?


  • 由于还没有设计电路板,就把芯片焊在转接板上,用面包板搭的电路试试写的程序。我照着手册上的图26电路连接,不把FEF5040的GND与7883的GND连接在一起能读出数据,但是读出的数据明显偏小,并且VIN电压低于1.5V时读出的全是0。连接上不论VIN电压是多少以后读出的数据也全为0。测试得到在VIN在1.6-3.5V之间的偏小,3.5-4v读出的全是4095,0-1.5读出的是0。请问这是什么原因?是面包板引起的误差吗?
    代码如下:
    #include
    #include "stdio.h"
    #define CPU_F ((double)8000000)
    #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
    #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))

    #define DIN   (P2IN & 0x01)  /*端口定义*/
    #define SCLK_H   P2OUT |= BIT1
    #define SCLK_L   P2OUT &= ~BIT1
    #define CS_H     P2OUT |= BIT2
    #define CS_L     P2OUT &= ~BIT2

    signed int AD_Conv();

    void InitClock(void)
    {
      WDTCTL = WDTPW + WDTHOLD;
      BCSCTL1 &= ~XT2OFF;
      do
      {
        IFG1 &= ~OFIFG;
        for (int i=0; i<255; i++);
      }while(IFG1 & OFIFG);
      BCSCTL2 |= SELM_2 + DIVM_0 + SELS + DIVS_3;   //MCLK 8MHz  SMCLK 1MHz
    }

    void main( void )
    {  
      InitClock();
      P2DIR = 0x06;
      while(1)
      {
        printf("%dn",AD_Conv());
      }
    }

    signed int AD_Conv()
    {
      signed int AD_Value=0;
      CS_H;
      delay_us(1);
      CS_L;
      SCLK_L;delay_us(1);
      SCLK_H;delay_us(1);
      SCLK_L;delay_us(1);
      SCLK_H;delay_us(1);
      for(unsigned int i=0;i<12;i++)
      {   
       
        AD_Value = AD_Value << 1;
        if(DIN)
        {
          AD_Value =  AD_Value | 0x001;
        }   
        SCLK_L;
        delay_us(1);
        SCLK_H;
        delay_us(1);
      }  
      CS_H;
      delay_us(1);
      return AD_Value;
    }

回帖(2)

杨芳

2025-1-8 10:57:44
地线连接引起数据不同, 那就需要再特别注意一下这个地线. 我觉得问题应该在这个地方 (或者有关)
举报

淡淡的爱

2025-1-9 18:03:06
根据您的描述,这个问题可能是由以下几个原因引起的:

1. 面包板接触不良:面包板上的接触点可能存在氧化或污垢,导致接触不良。这可能会导致信号不稳定,从而影响数据读取。您可以尝试清洁面包板的接触点,或者更换一个新的面包板进行测试。

2. 电源不稳定:在您的代码中,您提到了VIN电压低于1.5V时读出的数据全为0。这可能是由于电源不稳定导致的。请确保您的电源供应稳定且在规定的范围内。

3. 地线连接问题:您提到不连接FEF5040的GND与7883的GND时能读出数据,但连接后数据全为0。这可能是因为地线连接不当导致的。请检查您的地线连接是否正确,确保所有地线连接在一起。

4. 代码问题:您的代码可能存在一些问题,导致数据读取不正确。请检查您的代码,确保您正确地初始化了ADS7883,并按照数据手册中的时序进行操作。

5. ADS7883芯片问题:如果以上原因都排除了,那么可能是ADS7883芯片本身存在问题。您可以尝试更换一个新的ADS7883芯片进行测试。

总之,您需要逐步排查以上可能的原因,找到问题所在并进行修复。希望这些建议能帮助您解决问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分