搞好几天了,参考电压由TL431产生的2.5v,测1.0v就达到了满量程!
/**********************************************************************
名称:
功能:初始化程序
描述:参数依次为通道数(1,2),增益数(1,2,64,128),数据速率(10,80)
修改:
***********************************************************************/
void ADS_Init(u8 Gal,u8 Gain,u8 DatR)
{
DDRA=0XFE;
PDWN_L; //复位或者进行初始化时必须先拉低
switch(Gal) //通道数
{
case 1:A0_L; break;
case 2:A0_H; break;
}
switch(Gain) //4种增益倍数
{
case 1:GAIN1_L; GAIN0_L; break;
case 2:GAIN1_L; GAIN0_H; break;
case 64:GAIN1_H; GAIN0_L; break;
case 128:GAIN1_H; GAIN0_H; break;
}
switch(DatR) //两种数据速率
{
case 10:SPEED_L; break;
case 80:SPEED_H; break;
}
PDWN_H; //拉高准备工作
PDWN_L; //重新复位
delay_us(50);
PDWN_H;
SCLK_L;
ADS_Read(1); //复位后校准一下
ADS_Read(0); //先前不稳定的值读取掉
ADS_Read(0);
}
/**********************************************************************
名称:
功能:
描述:
修改:
***********************************************************************/
unsigned long ADS_Read(u8 Singl)
{
unsigned char i;
unsigned long Ads_ReadData=0;
while(DOUT);
for(i = 0; i < 24; i++)
{
Ads_ReadData<<=1;
SCLK_H;
#asm("nop")
#asm("nop")
#asm("nop")
#asm("nop")
SCLK_L;
if(DOUT)
{
Ads_ReadData |=0x01;
}
}
SCLK_H;
#asm("nop")
#asm("nop")
#asm("nop")
#asm("nop")
SCLK_L;
if(Singl) //在第26个时钟是否进行偏移校验
{
SCLK_H;
#asm("nop")
#asm("nop")
#asm("nop")
#asm("nop")
SCLK_L;
}
Ads_ReadData&=0x00ffffff;
return(Ads_ReadData);
}
|