我尝试通过 I2C、特别是从 GPIO 引脚读取、与 ADS7138-Q1通信。 在 我的原理图中、R1至 ADDR 引脚为33k、因此7位地址应为0x15h。 我使用的器件地址为0x2a (从7位地址向左移位以获取8位地址)。 无论我尝试读取哪个寄存器地址、芯片都会返回0xAE。 我出了什么问题?
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、特别是从 GPIO 引脚读取、与 ADS7138-Q1通信。 在 我的原理图中、R1至 ADDR 引脚为33k、因此7位地址应为0x15h。 我使用的器件地址为0x2a (从7位地址向左移位以获取8位地址)。 无论我尝试读取哪个寄存器地址、芯片都会返回0xAE。 我出了什么问题?
Priscilla、您好!
地址格式听起来是正确的。
为了与器件通信、需要包含特定于器件的操作码、这不是特定于 I2C 协议、而是特定于器件功能。 数据表的注释第33页 展示了运算代码列表以及在读取寄存器时如何实现该列表。
我建议探测数字总线、这将提供对通信的可视检查、并尝试成功读取一个器件寄存器。 成功完成后、可用于构建其他数据传输。
此致
Cynthia
谢谢! 我还有几个问题。
问题1:
在 ADS7138-Q1上、AIN0/GPIO0 - AIN3/GPIO3是模拟引脚、AIN4/GPIO4 是数字输入、AIN5/GPIO5 - AIN7/GPIO7是数字输出。 所有数字引脚连接到一个外部上拉电阻器。 例如、假设我要将 AIN6/GPIO6设置为输出高电平。
请确认我的理解/操作是否正确:
写入 PIN_CFG (0x5)以配置模拟/数字引脚:将0xF0写入0x0805
2.写入 GPIO_CFG (0x7)以配置数字输入/输出:将0x10写入0x0807
由于所有数字引脚都连接到外部上拉电阻器、因此无需配置 GPO_DRIVE_CFG (0x9)
写入 GPO_VALUE (0xB)以将 AIN6/GPIO6设置为高电平:将0x20写入0x080B
5.检查 GPI_value (0xD)以确保 AIN6/GPIO6被拉高:从0x100D 读取0x20 (假设没有其他数字输出被拉高以开始)
问题2:
在数据表中、GPI_VALUE "返回包括模拟输入、数字输入和数字输出在内的所有通道的逻辑电平。" 我们期望模拟输入的逻辑电平是多少?
问题3:
要读取模拟引脚电压:
写入 General_CFG 以允许持续更新统计信息:将0x22写入0x0802
2.读取最大、最小或最近的通道代码(0x60-0xA7)、以将输入值转换为电压
此时、所有这些模拟值的值都为0
您好!
请参阅以下内容中的回答:
问题1
1、写入 PIN_CFG (0x5)以配置模拟/数字引脚:将0xF0写入0x0805 >正确。写入0xF0将设置通道7、6、5、4所有 GPIO。 如果您要对寄存器进行 ORing、并且通道7、5、4已设置、则只需通过 ORing 0x40设置通道6。
2.写入 GPIO_CFG (0x7)以配置数字输入/输出:将0x10写入0x0807。 >通道4是所需的输入。 输入应设置为低电平、输出设置为高电平、因此、您的值应反相。从0x10到0xE0
由于所有数字引脚都连接到外部上拉电阻器,因此无需配置 GPO_DRIVE_CFG (0x9)。 >正确
4. 写入 GPO_VALUE (0xB)以将 AIN6/GPIO6设置为输出高电平:将0x20写入0x080B >不正确、将通道6设置为高电平为0x40
5.检查 GPI_value (0xD)以确保 AIN6/GPIO6被拉高:从0x100D 读取0x20 (假设没有其他数字输出被拉高以开始)> 不正确、要设置为高电平的通道6为0x40
问题2
尽管如此、但不应将其用于评估模拟输入。 如果存在模拟信号、则其读数应为高电平。
问题3
从尝试读取模拟输入的声音中、您将以自主模式使用器件。
写入 General_CFG 以允许持续更新统计信息:将0x22写入0x0802 >常规 CFG 的寄存器地址不正确、它是0x01而不是0x02。为什么还要设置校准位? 这只能在需要时完成、即启动后、温度暴露后。 我建议将0x20写入该寄存器。
2.读取最大、最小或最近的通道代码(0x60-0xA7)、以将输入值转换为大于正确的电压
此致
Cynthia
考虑到与之前相同的设置、其中 AIN0-AIN3是模拟引脚、AIN4-AIN7是数字引脚、这是否是读取模拟输入的过程?
使用上面的步骤、我现在可以获得最小/最大值的读数。 但是、我不确定如何解读它们。 在位移并将 MSB 和 LSB 相结合后、我得到一个16位值。 我是否只是将该值转换为模拟输入电压的整数值?
当器件处于手动模式时、最小值/最大值寄存器不会更新。 这些仅在使用自主模式时使用。 使用手动模式时、数据通过 SDO 读取。 因此、启用自主模式后、寄存器应更新。 此外、如果使用自动序列模式也不会更新 Mind 最大值、则在该模式下、数据将通过 SDO 读取。
查看您的流程、我建议按照 之前共享的流程图进行正确配置。按照以下重新排列:
此致
Cynthia