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.

ADS1247数据读数问题 急!!!

Other Parts Discussed in Thread: ADS1247, ADS1220

我现在测试的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输入,现在串口打印的数据总是不对