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.

【原创】ADS7841测量电压范围的问题

Other Parts Discussed in Thread: ADS7841

    ADS7841,4通道,12bit,VCC与Vref都是+5v,按说0-5v对应输出为0-4095,但是我测得的是0-2.5v对应的0-4095?2.5v以上又重新开始对应新一轮0-4095?(0-2.5v对应0-4095;2.5v-5v对应0-4095)

    并且如果我只用通道0,其他通道悬置,其他通道上也会测得2v左右的电压,弄了好久没解决? 解决方案:俺来对照时序抓波形,才发现时钟移位的时候,少移了移位,导致测量的错误。

    程序如下:

#include<reg52.h>
#include<intrins.h>

#define VALID 0
#define INVALID 1

sbit CS=P0^01;	
sbit DCLK=P0^0;
sbit BUSY=P0^3;
sbit DIN=P0^2;
sbit DOUT=P0^4;	

unsigned int ADS7841_Read_Data(unsigned char Channel) //Channel=0:CH0;1:CH1;2:CH2;3:CH3;
{
    unsigned int ADCResult=0;
    unsigned char DataInput=0;
    unsigned char i,ADS7841_CHANNEL;
    switch (Channel)
    {
        case 0:ADS7841_CHANNEL=0x10;break;
        case 1:ADS7841_CHANNEL=0x50;break;
        case 2:ADS7841_CHANNEL=0x20;break;
        case 3:ADS7841_CHANNEL=0x60;break;
        default:ADS7841_CHANNEL=0x10;break;        
    }
    DataInput=0x80 | ADS7841_CHANNEL | 0x00 | 0x04 | 0x03;
  	//ADS7841_S|ADS7841_CHANNEL|ADS7841_MODE|ADS7841_    SGL_DIF|ADS7841_POWER_DOWN

    DCLK=0;
    DIN=0;
    CS=VALID;
    for(i=0; i<8; i++)
    {
    	DIN=DataInput&0x80;
    	DataInput=DataInput<<1;
    	DCLK=0;
    	_nop_();
    	DCLK=1;                       //模拟SPI串行接口 发送数据
    }
   	_nop_();
  	DCLK=0;
    while(BUSY)
    {
    	_nop_();
    	DCLK=1;
    	_nop_();
    	DCLK=0;
    }  /*当BUSY脚由高变为低时,则开始数据输出*/

    _nop_(); 
    for(i=0;i<12;i++)
    {
    	DCLK=1;
    	ADCResult=(ADCResult<<1)|DOUT;    //模拟SPI串行接 口 接收数据
    	DCLK=0;
    	_nop_();
    }
    for(i=0;i<4;i++)
    {
    	DCLK=1;
    	_nop_();
    	DCLK=0;
   		_nop_();
    }
    CS=INVALID;
    return ADCResult;
}