虽然我可以对8位寄存器执行完全读/写操作,但我在使用16位通道寄存器时遇到了问题。 我已通过读取制造商ID寄存器0x3E 1和修订版9来验证我的读/写能力 ,我还可以将值写入 中断屏蔽寄存器并读回它们,因此我认为我的硬件或基本理解没有任何问题。
但是,如图31所示,16位通道值读数对我来说毫无意义。 作为基本测试,我期望读取通道7中的温度(使用模式0)。 第一个问题是根据我从数据表中了解的内容解释格式。 除了阅读数据表之外,我还搜索了这些论坛,但对于如何填充通道值,仍然没有明确的答案。 不管怎样,我无法猜测任何解释都能理解我获得的值。
因此,将IC初始化到模式0 (按照9.2 .2.2 1快速启动)后,我总是在通道7中获得没有意义的温度读数,尽管当我轻轻地加热/冷却零件时,这些值会增加/减少。 我分析了I2C总线和一个示波器,并在微控制器和SDA之间放置了100R (在从属侧SDA和SCL上有1K上拉),这让我可以检查它是主控还是从属断路。 我认为一切都正常,微控制器接收和报告的数据与示波器上显示的数据一致。 以下示波器快照序列显示了问题:
(注意从属设备的SDA声明显示为0.2V的跌落)
我理解数据表中说,16位值首先读回MSB,填充位于较高的值位位置(但未明确说明)。 温度为x 2,因此我预计22°C的环境温度将返回44°C。 但我看不到这种情况。 我注意到,如果忽略数据表并将第二个字节的顶部位作为十进制0.5 处理,那么第一个字节实际上就像温度(以度为单位)一样有意义,小数部分在LSB中分割。 这实际上是一个合理的编码方案。
假设我可以解决上述问题,我的另一个问题是,通过预设第一个地址并按照"图31"所示的两字节读取连续的字节计时来读取所有信道是否合法-即 只需根据需要为任意数量的对计时。
