微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > ADS1247数据读数问题 急!

ADS1247数据读数问题 急!

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

我现在测试的ADS1247写入数据寄存器的数据读出验证是正确的,但是配置的1mA电流无法在AIN0输出,采集的数据寄存器中的数据也不正常,数据位0xFF8000-0X000000。请问以上是什么原因造成的?

下面是我对寄存器的配置

ADS1247_CS_CLR();
ADS1247_RESET_SET()

ADS1247_Delays(20);
WriteByteADS1247(Reset);//0x06
ADS1247_Delays(1000);//6ms

WriteByteADS1247(WReg|Reg_MUX0);
WriteByteADS1247(0x00);
WriteByteADS1247(ADS1247_MUX0);//0x01

WriteByteADS1247(WReg|Reg_VBias);
WriteByteADS1247(0x00);
WriteByteADS1247(ADS1247_VBias);//0x00

WriteByteADS1247(WReg|Reg_MUX1);
WriteByteADS1247(0x00);
WriteByteADS1247(ADS1247_MUX1);//0x00

WriteByteADS1247(WReg|Reg_SYS0);
WriteByteADS1247(0x00);
WriteByteADS1247(ADS1247_SYS0);//0x00

WriteByteADS1247(WReg|Reg_IDAC0);
WriteByteADS1247(0x00);
WriteByteADS1247(ADS1247_IDAC0);//0x06

WriteByteADS1247(WReg|Reg_IDAC1);
WriteByteADS1247(0x00);
WriteByteADS1247(ADS1247_IDAC1);//0x0f

WriteByteADS1247(RReg|Reg_IDAC1);
WriteByteADS1247(0x00);
k = ReadByteADS1247();//这里读出的数据是0x0f验证写入寄存器的数据正常

WriteByteADS1247(0x12);
// ADS1247_CS_SET();
ADS1247_START_SET();

下面是读数据

while(ADS1247_DOut_Get());
WriteByteADS1247(0x12);
temp24 = ReadDWordADS1247();

读出的数据就是0xff8000或者0x000000,请问配置有问题吗?问题出在那里?

我的邮箱是zhcj66@163.com

你说一你向IDAC1寄存器写的值是多少,

这个寄存器的,5:4两位控制电流源1连在哪个引脚,(没在你的代码中看到你向这个寄存器里写了什么值)

1:0两位控制电流源2连在哪个引脚,

并且7:6各3:2四个位不能为11B。否则为不连接,如下是datasheet中的说明。

11xx = Disconnected (default)

#define ADS1247_MUX0 0x01 //AIN0(+)-AIN1(-)
#define ADS1247_VBias 0x00 
#define ADS1247_MUX1 0x33 
#define ADS1247_SYS0 0x00
#define ADS1247_IDAC0 0x06
#define ADS1247_IDAC1 0x03

这是向寄存器写入的数值,我把ADS1247_IDAC1的值由0x0f改为0x03但是 AIN0还是没有输出电流,ADS1247_IDAC0读出的值是0x86这正常吗?

请看到后恢复我邮箱zhcj66@163.com

我的电路设计是这样的,AIN0做为输入的+,并提供1mA的恒流输出,经过一个采样电阻到AIN1 -输入,然后AIN1和REF+相连再连接一个680欧姆电阻 到REF-并接地。

void WriteByteADS1247(unsigned char x)//8BIT
{
unsigned char ii;

// ADS1247_SCLK_SET();
for (ii=0; ii<8; ii++)
{
ADS1247_SCLK_SET();
ADS1247_Delays(20);//120us
if(x & 0x80) { ADS1247_DIN_SET(); }
else { ADS1247_DIN_CLR(); }
ADS1247_Delays(20);//120us
ADS1247_SCLK_CLR();
ADS1247_Delays(20);
x <<=1;
}
}

unsigned char ReadByteADS1247(void)//8BIT
{
unsigned char ii;
unsigned char x ;

while(ADS1247_DOut_Get());
// ADS1247_SCLK_SET();
for (ii = 0,x=0 ; ii < 8 ; ii++)
{
ADS1247_SCLK_SET();
ADS1247_Delays(20);//120us
ADS1247_SCLK_CLR();
x<<=1;
if(ADS1247_DOut_Get())
x |= 0x01;
ADS1247_Delays(20);//120us
}
return x;
}

ADS1247_MUX1   改为0x38有了1mA电流了 可以输出数据还是0x000000请问这是为什么?还有那个寄存器没有设置对?

MUX1的VREFCON1:0 2位为00时关闭DCA恒流,为01,10,11都可以为开启恒流源。

MUX1的REFSELT1:0  2位为11选择板载REF0参考,我的这个电流必须选择这个,因为是外部对680欧姆电阻的参考,

现在最后的问题是读出数据直为0x000000,用分析仪看波形,DOUT一直为低没有变化

最后终于搞定问题了,原因是在设置完寄存器没有把DIN拉高。失望的是读数很不稳定,这个芯片稳定性这么差劲啊,一下是在AIN0和AIN1之间加热100欧姆电阻的读数

00665937
00673872
00673872
00773641
00773641
00721777
00695246
00695246
00690786
00690786
00619666
00619666
00621013
00674729
00674729
00717541
00717322
00670949
00816640
00816640
00717035
00717035
00723601
00715256
00715256
00710330
00710330
00648029
00648029
00755079
00739753
00739753
00832588
00832588
00691711
00695894
00695894
00812467
00812467
00710817
00769206
00769206
00721107
00721107
00792355
00787084
00668456
00791424
00791424
00691433
00691433
00703423
00819747
00819747
00764668
00764668
00701222
00701222
00808829
00734642
00734642
00829598
00829598
00817035
00817035
00696086
00696086
00768079
00829219
00829219
00778576
00778576
00733358
00733358
00741886
00737640
00738923
00874947
00874947
00732403
00675916
00675916
00755477
00755477
00746087
00746087
00708517
00807510
00807510
00754675
00754675
00770150
00739007
00739007
00734771
00730907
00730907
00671873

void WriteByteADS1247(unsigned char x)//8BIT
{
unsigned char ii;

for (ii=0; ii<8; ii++)
{
ADS1247_SCLK_SET();
ADS1247_Delays(20);
if(x & 0x80) { ADS1247_DIN_SET(); }
else { ADS1247_DIN_CLR(); }
ADS1247_Delays(20);
ADS1247_SCLK_CLR();
ADS1247_Delays(20);
x <<=1;
}
ADS1247_DIN_SET();//必须设为高,否则读数时会出错
}

您好,感谢您的分享。

这颗芯片,稳定性不差的,只是您没有按照正确的时序操作。

所以,还是建议按照datasheet的时序来操作。

谢谢

  最近一直在搞ADS1220。软件模拟做对了一次。我寄存器配置配置的和读出一致。配置输出时0.25mA测量热电阻的电流。后来怎么做都没做好。一直在纠结这个事。楼主发我一份学习一下。看看你的时序配置。我的邮箱372542262@qq.com

 

可以帮忙看下代码吗?我做的是电流采样的,单端AIN0输入,现在串口打印的数据总是不对

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

网站地图

Top