打印

ads1248转换结果总是不对?急求助

[复制链接]
3563|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xingyeanhe|  楼主 | 2012-10-9 11:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用的是内部电压参考,2.048V,当输入悬空或接地时。转换结果是
0x000109左右,而且基本上高12~16位不变,低位变化幅度也不大,貌似正常,但是输入一个零点几伏电压之后,结果就变化成0xFDDBXX  左右,高位字节也基本不变,但是转换的结果与实际不匹配,大于不知道是为什么。

下面是代码,求解答。

#include"ADS1248.h"
uchar idata channel_0[3];
uchar idata channel_1[3];
uchar idata channel_2[3];
uchar idata channel_3[3];
uchar idata channel_4[3];
void w_ads(uchar x,uchar y) //x寄存器地址,y寄存器内容
{
    uchar i,RXBUF;
    RXBUF = 128;
for(i = 8;i;i--)
{
    adsclk = 1;
    delay_us(2);
    adsdin = (x&RXBUF)?1:0;
    delay_us(2);
    RXBUF = RXBUF>>1;
    adsclk = 0;
    delay_us(2);
}
for(i = 8;i;i--)
{
    adsclk = 1;
    delay_us(2);
    adsdin = 0;
    delay_us(2);
    adsclk = 0;
    delay_us(2);
}
RXBUF = 128;
for(i=8;i;i--)
{
    adsclk = 1;
    delay_us(2);
    adsdin = (y&RXBUF)?1:0;
    delay_us(2);
    RXBUF = RXBUF>>1;
    adsclk = 0;
    delay_us(2);
}
}
void start_ad()
{
uchar channel[3];
uchar i,RXBUF;
    RXBUF = 128;
for(i = 8;i;i--)
{
    adsclk = 1;
    delay_us(2);
    adsdin = (0x06&RXBUF)?1:0;
    delay_us(2);
    RXBUF = RXBUF>>1;
    adsclk = 0;
    delay_us(2);
}
delay_ms(20);
//-----------选择通道,配置寄存器----------
w_ads(MUX0,29);    //burnout current source off  (default)
w_ads(VBIAS,0);   // Bias voltage not enabled (default)
w_ads(MUX1,0x30); // Internal oscillator in use,Internal reference is always on,Normal operation (default)
w_ads(SYS0,2);    // gain of the PGA = 1(default),output data rate of the ADC = 20SPS
w_ads(OFC0,0);    //--------------------------------------------------------
w_ads(OFC1,0);    // register value of 000000h provides no offset correction
w_ads(OFC2,0);    //--------------------------------------------------------
w_ads(FSC0,0);    //--------------------------------------------------------
w_ads(FSC1,0);    // normalized to 1.0 at code 400000h
w_ads(FSC2,0x40); //------------------------------------------------------
w_ads(IDAC0,0);      //DOUT/DRDY pin functions only as Data Out (default)
w_ads(IDAC1,0xCC);//DISCONNNECTED (default)
w_ads(GPIOCFG,0); //The pin is used as an analog input (default)
w_ads(GPIODIR,0); //The GPIO is an output (default)
//-------------start-------------
adstart = 1;
delay_us(1);
adstart = 0;
// delay_ms(60);
    while(adsrdy);
rdata_ads(channel_0);
}
void rdata_ads(uchar channeldata[3])
{
    uchar i,j,BUF;
BUF = 128;
//------写读命令------
for(i=8;i;i--)
{
    adsclk = 1;
    delay_us(2);
    adsdin = (0x12&BUF)?1:0;
    delay_us(2);
    BUF = BUF>>1;
    adsclk = 0;
    delay_us(1);  
}
//-------读出---------
for(i=8;i;i--)
{
    adsclk = 1;
    delay_us(2);
    j = adsdout?1:0;
    delay_us(2);
    channeldata[0] = channeldata[0]<<1;
    channeldata[0] = channeldata[0]|j;
    adsclk = 0;
    delay_us(2);
}
for(i=8;i;i--)
{
    adsclk = 1;
    delay_us(2);
    j = adsdout?1:0;
    delay_us(2);
    channeldata[1] = channeldata[1]<<1;
    channeldata[1] = channeldata[1]|j;
    adsclk = 0;
    delay_us(2);
}
for(i=8;i;i--)
{
    adsclk = 1;
    delay_us(2);
    j = adsdout?1:0;
    delay_us(2);
    channeldata[2] = channeldata[2]<<1;
    channeldata[2] = channeldata[2]|j;
    adsclk = 0;
    delay_us(2);
}
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

2

帖子

0

粉丝