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.

[参考译文] ADS1255:DRDY 有时保持高电平

Guru**** 2563050 points
Other Parts Discussed in Thread: ADS1255

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/929694/ads1255-drdy-sometimes-stays-high

器件型号:ADS1255

你(们)好。

我希望你能帮助我。 我使用的是具有8MHz 时钟和7500SPS 的 ADS1255。

ADS1255通过 SPI 与 Arduino Uno 板通信。 我正在使用此库 https://github.com/adienakhmad/ADS1256

我正在等待 DRDY 变为低电平、然后读取通道。

PWDN 和复位连接到3V3。

通常、如果我在 while 环路中仅从 ADS1255读取数据、而没有其他函数会导致更大的延迟、那么一切都可以正常工作、并且我会获取数据。

但是、如果我在 while 循环中添加一些内容、这会导致延迟(例如打印函数)、那么 有时我的程序会挂起@adc.waitDRDY (); 在这里、我正在等待 DRDY 变为低电平、以便我可以读取新的数据输入。 但问题是 DRDY 处于高位、我不知道原因。

如果我在延迟之后添加命令 SELFCAL、在等待 DRDY 以便读取新数据之前、问题就会消失。

因此、原因似乎是 DRDY 有时(有时在5秒后、有时在45秒后)保持高电平。 但我真的不知道为什么。 此外、我获取样本的速度似乎有所不同。 与较高的采样率相比、较低的采样率似乎不会真正导致此问题。

你有什么建议吗? 在任何地方都可能存在一些计时问题?

我希望你能帮助我。 如果您需要更多信息、请告诉我。


此致、

Lukas

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

    尊敬的 Lukas:

    您是在 while 循环期间连续读取数据、还是不断发送 mux/SYNC/WAKEUP 命令? 您只使用1个通道、还是两者都使用?

    我认为简短的答案是、您需要删除 while 环路中的其他函数、或降低转换速度。 我看到其他人过去也遇到了同样的问题、他们的控制器在转换期间尝试做得太多、而且他们缺少数据。

    您还可以发送通信线路的示波器截图或逻辑分析仪捕获、以更好地了解正在发生的情况。

    布莱恩

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

    您好、Bryan、

    感谢您的回答!

    我不断发送多路复用器/同步/唤醒命令、并且我仅使用一个通道。

    也许我可以更快地执行其他功能。 仅当我想在触摸屏上调整某个内容时、才会显示 while 循环中的附加功能和延迟。 通常、我的系统需要来自 ADS1255的快速数据速率。 在我读取 DRDY 之前、延迟之后的命令(可能不是最佳选项、因为 ADC 数据可能会在延迟之后发生轻微更改)可能是一种解决方案、因此程序不会挂起。

    您是否有解释或了解为什么 DRDY 有时会保持高电平(当其挂起时)?

    遗憾的是、我没有示波器或逻辑分析仪、所以我无法更深入地了解。

    此致、

    Lukas

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

    您好、Bryan、

    感谢您的回答!

    我不断发送多路复用器/同步/唤醒命令、并且仅使用一个通道。

    也许我可以使附加功能更快。 仅当我在触摸屏上调整某些参数时、while 环路中才会出现延迟。 通常、我需要 ADS1255的高数据速率。 延迟后的 RESET 或 SELFCAL 等命令也可能是一种解决方案、因此不会挂起。 但是、是的、我可以更快地执行这些功能。

    您是否有解释说明为什么 DRDY 有时会一直保持高电平、以便程序存根?

    遗憾的是、我没有示波器和逻辑分析仪、所以我无法更深入地了解这一点。

    此致、
    Lukas

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

    尊敬的 Lukas:

    根据代码的运行方式、如果在此期间执行其他操作、您的控制器可能不会响应 DRDY 脉冲。

    我假设您的转换过程如 ADS1255数据表中的图19所示。 请注意、DRDY 处于低电平的时间非常短(表13和14中的 T18和 T19之间的差异)、因此如果您的控制器"未命中"、DRDY 将始终保持高电平。 在较低的数据速率下、控制器有更多的时间在转换期间完成其他任务、因此它不会"错过" DRDY 脉冲。 遗憾的是、这是您可以在示波器或逻辑分析仪上识别的东西。

    此外、如您所述、发出 SELFCAL 命令等命令会重新启动转换过程、因此您可以在附加代码完成后发出此类命令。 但这会改变从 ADC 中获得的有效数据速率、因为采样之间会有延迟。

    布莱恩

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

    您好、Bryan、

    这是其挂起的代码:while (PIN_DRDY &(1 <<PINDEX_DRDY)){}

    因此,不能错过 DRDY 脉冲,因为我在等待它,而我在这两者之间也不做其他事情。

    是的、我注意到数据速率明显较低、但这不会成为问题、因为 SELFCAL 不会始终发送。

    此致、

    Lukas

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

    尊敬的 Lukas:

    如果无法查看 SPI 线路上发生的情况、则很难进一步诊断此问题。 问题实际上是、ADC 是否不发送 DRDY 脉冲、或者 MCU 是否未检测到这些脉冲? 由于您说没有额外的代码、ADC 就可以正常通信、这表明错误在该代码中的某个位置、并导致 DRDY 函数挂起。 同样、由于 ADC 在没有该代码的情况下正常通信、我猜 MCU 会"错过" DRDY 脉冲。 使用示波器或逻辑分析仪可以轻松检测到这种情况。

    目前,我最好的建议是从 while ()循环中删除该代码,或者,如果这不是一个选项,则在该段代码完成后重新发出 SYNC+WAKEUP 命令(或 SELFCAL)。

    如果要发布代码的这一部分、可以这样做。 请确保您添加的器件清楚标明。

    布莱恩

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

    您好、Bryan、

    我将尝试获取示波器并运行更多测试。 在我进行测试时、是否可以稍后重新打开此帖子?

    有时、只有在我添加了这个简单代码时、它才会挂起。

     serial.print ("权重:");
     serial.print (actual_weight、2); //打印浮点值
     serial.println();
     
     延迟(100);  //等待100ms

    我注意到、当100ms 延迟更长时、它会更早地挂起。

    Bryan 感谢您的支持。 我会做一些测试、然后再回答问题、因为现在我认为如果我没有做一些新的测试、你就无法再帮助了。

    此致、

    Lukas

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

    尊敬的 Lukas:

    这是否在 DRDY while 环路内? 您能否发布周围代码、以便我可以看到前后发生了什么情况?

    是的、示波器快照将会有所帮助、当您能够获取时、您当然可以继续使用此主题。 如果这个线程已经关闭了、只需启动一个新的线程并引用这个线程、我们就会从那里开始。

    布莱恩