微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > 请问ADS7883的GND不连接能读出数据,连接后读取的数据全为0是什么原因?

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

时间:10-02 整理:3721RD 点击:

由于还没有设计电路板,就把芯片焊在转接板上,用面包板搭的电路试试写的程序。我照着手册上的图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 <msp430x26x.h>
#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("%d\n",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;
}

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

现在发现一个原因了,是1uf电容坏了,换一个就能正常用了照图25接的。只是测量低于1v电压时偏低0.3v。我再找找原因。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top