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.

[参考译文] ADS7142:无法读取第二个通道的数据

Guru**** 2538520 points
Other Parts Discussed in Thread: ADS7142

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/969602/ads7142-not-able-to-read-data-of-second-channel

器件型号:ADS7142
您好!
我们通过 I2C 将 ADS7142Q1与 SPC 584B 控制器相连。  我们将其配置为在单端配置、手动模式下启用的两个通道。
我们能够读取 CH0数据、但在 ADS 缓冲区中 CH1数据未更新。  我们怀疑配置没有设置。
我们看到了 SDA 和 SCL 波形、并验证了数据是否正确。
请说明原因和解决办法。

另一个查询:

我们在单个 I2C 总线上连接了4个 ADC 器件、那么是否可以有任何一个器件将 BUSY 线路驱动为高电平并保持 SCL 为低电平?

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

    您好!

    启动时、器件默认设置为双通道、单端和手动模式。 但在该模式下、器件只能对 Ch0采样、这就是您无法对通道1采样的原因。  

    要配置为对 CH0或 CH1或两个通道进行采样、请设置 AUTO_SEQ_CHEN 寄存器中的位以选择通道(以下任一选项都是可行的选项)。

    •要在自动序列中选择通道、请将 AUTO_SEQ_CHEN 寄存器中的 AUTO_SEQ_CHX 位设置为1。

    •对于具有自动序列的手动模式、将 OPMODE_SEL 寄存器中的位设置为100b 或101b。

    •针对具有自动序列的自主模式、将 OPMODE_SEL 寄存器中的位设置为110b。  

    •针对具有自动序列的高精度模式、将 OPMODE_SEL 寄存器中的位设置为111b。

    任何 I2C 总线都需要在能够控制 SCL 之前进行寻址。 一旦 ADC 被寻址、它有可能将 SCL 保持在低电平。 一个原因是时钟拉伸、器件将使 SCL 保持低电平、直到完成当前任务、并在完成后将其释放。

    此致

    Cynthia

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

    我们将 AUTO_SEQ_CHEN 寄存器写入0x03h 以同时选择通道、并将 OPMODE_SEL 寄存器写入100b 以进行手动自动序列。
    对于 I2C 总线寻址、我们使用0x04h 命令发送了 I2C 常规调用。

    当我们读取 AUTO_SEQ_CHEN 或任何其他配置寄存器时、我们仅获取 CH0数据、而不获取配置寄存器数据。

    以下是我们的序列。
    读取单个寄存器序列:
    •I2C 写入(从器件地址、0x10、寄存器地址)
    •I2C 读取(从器件地址、1)
    2.写入单个寄存器序列:
    •I2C 写入(从器件地址、0x08、寄存器地址、寄存器数据)
    3. ADS 手动模式的初始化序列:
    •I2C 写入(从器件地址、0x08、0x1f、0x01)//中止序列
    •I2C 写入(从器件地址、0x08、0x15、0x01)//偏移校准
    •I2C 写入(从地址、0x08、0x24、0x03)//输入通道配置寄存器-在单端配置中启用两个通道
    •I2C 写入(从器件地址、0x08、0x1c、0x04)//选择操作模式为手动
    •I2C 写入(从器件地址、0x08、0x20、0x03)//选择两个通道进行自动定序
    •I2C 写入(从器件地址、0x08、0x28、0x02)//选择数据缓冲器输出数据配置
    •I2C 写入(从地址、0x08、0x1E、0x01)//设置 SEQ_START 位以开始采样序列
    请告诉我们我们是否遗漏了什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Nimesh、

    您要发出的常规调用命令(0x04)不是 ADS7142的实际命令、因此会忽略此命令。  

    我不建议使用常规调用来配置器件、而是建议仅使用 ADC 的地址和数据表表表4中的操作码与 ADC 进行通信。  

    或您的序列、它看起来是正确的。 设置 SEQ_START 位后、是否提供器件地址并提供连续 SCL? 下图显示了如何在手动模式下采样和读取数据

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

    我们观察到了数据表中提到的使用0x04h 命令行为的常规调用、如下所示。
    7.3.10.3具有写入功能的常规调用软件可编程从器件地址部分

    在接收到一个常规调用(00h)之后跟随04h 时、器件配置其自己的 I2C 地址、该地址由配置
    ADDR 引脚。 在此操作期间、器件将 BUSY/RDY 引脚保持为高电平、并且不响应其他 I2C
    常规调用之外的命令。
    尽管我们按照数据表中的序列进行配置、但通过提供连续 SCL、而不是 CH1数据或任何其他寄存器数据、我们能够接收 CH0数据。
    我们观察到、无论我们执行何种配置、它们都不会产生任何效果。
    请告诉我们、如果我们在进行配置之前必须执行一些步骤、以便正确配置器件。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Cynthia、

    我是应用工程师。 为该客户提供支持。  

    我们需要通过简单的步骤来读取此器件的2个通道。

    请 帮助完成需要执行的步骤。

    Mitesh

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

    Mitesh、  

    很棒的地方! 您在进行上述任何通信之前进行常规呼叫、对吧?

    您正在正确配置设备。 您是否按照图表读取数据?

    设置 SEQ-START 位后、要读取所需的数据、 您是否提供器件地址并提供连续 SCL。

    下图显示了如何在手动模式下读取数据的流程。

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

    感谢您对 Cynthia 和 Mitesh 的支持。

    问题得到解决、我们能够读取两个通道的数据。

    之前、我们使用 i2c 写入函数发送从器件地址、操作码和寄存器地址、然后使用 i2c 读取函数、但我们不知道 I2C 驱动器读取函数被设计为先写入从器件地址和寄存器地址、然后开始读取操作。

    将其修改为仅执行读取操作、并在调用 i2c 驱动器读取函数之前使用 i2c 驱动器写入函数发送从器件地址、操作码和寄存器地址。

    此致、

    Vijayalakshmi Chavan.4