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.

[参考译文] ADS1231:ADS1231只返回0x800000

Guru**** 2386600 points
Other Parts Discussed in Thread: ADS1231
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/772962/ads1231-ads1231-only-return-0x800000

器件型号:ADS1231

您好!

我不明白发生了什么错误。 当数据线就绪时、我读取的是24位、但该值始终相同:0x800000。

我启用 AVDD 电压、等待2秒以确保电压正常、并在测量和测量之间等待15秒、因为更新时间已过。

为什么要获得该值?

这是我的代码:

void ads1231_on ()

   DO_PIN_AVDD    = 1;    //启用 AVDD
   DO _PIN_ADS_PDWN = 0;

   _DELAY_ms (2000);
   
   Do _PIN_ADS_PDWN = 1; //启用 ADS1231
   Do _PIN_ADS_CLOCK = 0;


void ads1231_off ()

   DO_PIN_AVDD    = 0;   
   DO _PIN_ADS_PDWN = 0;


int24_t ads1231_read ()

   int24_t data     = 0;
   int24_t tmp      = 0;
   int8_t bit_shift;
   
   //等待 IC 准备就绪
   while (((DI_PIN_ADS_DATA)==1){};
   _DELAY_us (100);

   //读取数据
   for (bit_shift=23;bit_shift >=0;bit_shift--)
   {  
       DO _PIN_ADS_CLOCK = 1;
       _DELAY_ns (200);
       
       tmp = DI_PIN_ADS_DATA;
       tmp =(tmp << bit_shift);
       data |= tmp;  

       
       Do _PIN_ADS_CLOCK = 0;
       _DELAY_ns (200);

   }
 
   //发送最终时钟信号结束发送
   DO _PIN_ADS_CLOCK = 1;
   _DELAY_ns (200);
   Do _PIN_ADS_CLOCK = 0;
   _DELAY_ns (200);

   返回数据;


void main (void)

   Setup(); //设置 IO
   
   int24_t value1;
   int24_t 值2;
   int24_t 值3;
   int24_t 值4;
   int24_t 值5;
   int24_t 值6;
   int24_t 值7;

   ads1231_on ();

   while (1)
   {
       
       Value1 = ads1231_read();
           _DELAY_us (15);

       value2 = ads1231_read();
           _DELAY_us (15);

       Value3 = ads1231_read();
           _DELAY_us (15);

       Value4 = ads1231_read();
           _DELAY_us (15);

       value5 = ads1231_read();
           _DELAY_us (15);

       value6 = ads1231_read();
           _DELAY_us (15);

       value7 = ads1231_read();
   _DELAY_us (15);


   }


谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Daniel、您好!

    您好像在使用控制器为 ADS1231供电-很有趣! 您能否提供显示其余 ADS1231连接的原理图?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Daniel、您好!

    只是一些一般性意见。 首先、在为 AVDD 电源供电并将 PDWN 引脚置为高电平后、我建议您在初始等待周期后再次对 PDWN 引脚进行脉冲、以确保 ADS1231已正确复位并启动。

    其次、我建议您在读取之间等待超过15us。 您应该监控 DOUT/ DRDY 引脚上是否有从高电平到低电平的转换。 这表明 ADS1231已经完成转换、并且新的转换结果已准备好从器件中读取。 根据速度引脚设置、ADS1231将以100ms (10sps)或12.5ms (80sps)的频率进行转换。 因此、我怀疑在您开始初始读取时会有新数据可用。

    因此、在对 PDWN 引脚进行脉冲之后、请等待至少4个转换周期完成、然后再尝试首次从 ADS1231读取。

    此外、确保 CLKIN 引脚连接低电平、为 ADS1231提供有效电压基准、并且输入处于 PGA 的输入范围内。 0x800000为负满量程。

    此致、
    Bob B
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Daniel、您好!

    我没有听到您的反馈,因此我假设您能够解决您的问题。 如果不是、只需在下面发布回复(如果该线程由于超时而锁定、则创建新线程)。

    此致、
    Bob B
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢 Bob、
    这是一个电气问题。 当前按预期工作=)
    很抱歉、因为 mi 迟到了。