主题中讨论的其他器件: ADS112C04
当在 I2C 通信中执行写入或读取过程时、从器件侧将 SDA 固定为低电平。 作为一种对策、在读取 AD 转换之前添加了读取 ADS 1119中转换完成的命令、但再次出现错误。 请告诉我是否有任何措施。 我将回答有关环境和软件的任何问题。 此外、如果该错误仍然存在、我想更改为 ADS 112 c04、但是否会发生相同的错误?
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.
当在 I2C 通信中执行写入或读取过程时、从器件侧将 SDA 固定为低电平。 作为一种对策、在读取 AD 转换之前添加了读取 ADS 1119中转换完成的命令、但再次出现错误。 请告诉我是否有任何措施。 我将回答有关环境和软件的任何问题。 此外、如果该错误仍然存在、我想更改为 ADS 112 c04、但是否会发生相同的错误?
您好、6569991、
ADS1119使用标准 I2C 协议。 ADS112C04上使用了相同的接口。 ADS1119数据表中显示了通信和时序。
我不清楚你说什么是问题。 在 I2C 启动条件发生后、第一个初始8个时钟是7位地址、后跟 R/NW 位。 如果 ADS1119的响应被正确寻址、将是在第9个 SCL 时钟期间发生的 ACK。 ACK 由 ADS1119拉低 SDA。 在第9个时钟之后、ADS1119将释放 SDA、并且主器件的进一步通信将继续执行接下来的8个 SCL、然后是第9个用于 ACK。
如果您遇到通信问题、故障排除的最佳方法是使用示波器或逻辑分析仪探测 SCL 和 SDA 引脚。 如果您可以捕获通信的快照、我可以帮助排除通信故障。
此致、
Bob B
你(们)好 Bob
我的英语不好、所以请告诉我是否很难理解。
我负责解决询问以下 URL 的人员的问题。
突然、我在读取 AD 转换和读取寄存器之前进行了一个循环来监控 DRDY、直到它变为高电平、我认为该错误消失并被解决、但在大约2个月后、同样的错误再次出现。
如果您对源代码或环境有任何疑问、我将回答这些问题、因此请帮助我找到原因。
您好、6569991、
从您提到的上一个帖子中、该人声称通信问题已解决。 不幸的是,我不清楚为解决这一问题采取了什么行动。
根据前面的讨论、我将假定正在监控寄存器1 DRDY 位并变为低电平并保持低电平。 如果是这种情况、您使用的是连续转换模式还是单次模式?
如果转换暂停、ADS1119可能已接收到某种形式的瞬态、从而使 ADS1119复位。 瞬态可能在电源上、也可能在模拟输入上。
如果 ADS1119由于瞬态而复位、转换将停止并将寄存器重新初始化为默认值。 代码中可使用的一种方法是发出一个运行一个计数周期的循环、如果运行时间长于一个转换周期、则会调用一个诊断函数、该函数将读取 ADS1119寄存器值以查看设置是否为默认值 值。 这将告诉您器件已复位、您需要重新配置并重新启动转换。
如果我怀疑 ADS1119正在复位、则应防止瞬态进入 ADS1119。 这可能需要在器件输入端添加额外的组件、例如 TVS 二极管和铁氧体。
此致、
Bob B
您好、Kazuya、
如果噪声或瞬态事件影响 ADS1119、也会影响 ADS112C04。 ADS1119是 ADS112C04的一项降低功能。
如前所述、当 DRDY 位保持低电平时、可能会有某种情况导致器件复位并停止器件运行。 这可以通过读取寄存器内容来检查、以查看这些值是否仍然是配置的值、或者它们是否是默认值。
根据其他信息、可能还会发生其他情况。 如果您使用单次模式、则可能未执行 START/SYNC 命令来启动新的转换。 当您读取转换数据时、DRDY 位变为低电平。 为了使 DRDY 位变为高电平、必须完成转换。 在单次模式下、必须发出 START/SYNC 命令才能启动转换。 向 ADS1119发送 START/SYNC 命令时、器件应 ACK 命令 WRITE。 如果它用 NACK 进行响应、则转换将不会启动、DRDY 位将始终保持低电平。 您是否正在检查 ACK / NACK 并适当响应 NACK 条件?
此致、
Bob B
您好、Kazuya、
您可以通过读回寄存器内容来确定器件是否已复位。 与 ADS1119的所有通信均遵循 I2C 协议、时序如数据表所示。
对于 NACK、如果从 ADS1119器件读取并且返回的字节是序列中的最后一个字节、主机可能不会发出 ACK (而是 NACK)。 在写入时、ADS1119应始终以 ACK 进行响应。
如果您看到 NACK 显示您希望 ACK 的位置、则需要作出适当响应。 第一步是重复该命令。 如果重复的响应仍然显示 NACK、则需要用户干预。
如果系统中存在噪声、尤其是 SCL 上的噪声、则可能发送了错误的地址或错误的命令。 您应该始终监控代码中的 I2C 通信以适当地处理任何错误。
另一个潜在问题可能是由于在 SDA 和 SCL 线路上使用了错误的上拉值。 如果您使用大电阻(4.7K 或更高)并且 SCL 频率为400kHz 或更快、则可能没有足够强的上拉电阻返回到逻辑高电平。 可以使用示波器对这些信号进行监控、以确保计时不会延迟、以便对 I2C 信号线路的电容进行充电/放电。
此致、
Bob B
您好 Kazuya.O、
ADS1119的 SCL 输入是一个只连接输入的引脚、无法驱动时钟。 微控制器必须驱动 SCL、并且前一个示波器图中缺少第9个 SCL。 如果之前的数据被应答、SDA 将保持低电平。 为了从 ACK 中释放 SDA、需要从微控制器中释放第9个 SCL。
因此问题是、您缺少了为来自微控制器的 ACK / NACK 传输的第9个 SCL。
此致、
Bob B