Other Parts Discussed in Thread: INA226
校准回读应该适用于 INA226 (寄存器0x05)、应该回读我写的任何内容、对吧?
我有一些奇怪的事情发生了。 如果我复位芯片并读取0x05、我读取0x0000、这是预期的复位值。 如果我向它写入所需的值(十进制838)、那么当我读取0x05时、我会返回胡说。
我的写操作使用的是导线库、如下所示:
uint16_t cal = 838; Wire.beginTransmission(INA_ADDR); Wire.write (0x05);/* cal 寄存器*/ Wire.write((cal >> 8)| 0xFF);/*高位字节*/ Wire.write( cal & 0xFF );/*低位字节*/ Wire.endTransmission ();
当我读取时、我必须执行完全不同的操作。 我必须首先设置寄存器、如下所示:
uint16_t cal = 838; Wire.beginTransmission(INA_ADDR); Wire.write (0x05);/* cal 寄存器*/ Wire.endTransmission (); Wire.requestFrom (INADDR、2); byte high = Wire.read(); byte low = Wire.read(); Wire.endTransmission ();
我不确定原因、但如果我尝试在单个事务(开始、写入、读取、读取、结束)中执行该操作、似乎无法正确锁定地址。 它们必须是两个完全独立的事务。
我认为我的读操作正常(我可以读回总线电压和分流电压、这是有道理的)、但我认为我的写操作一定要关闭。 我尝试在两个事务中进行配置-写入寄存器地址(然后结束传输)、然后写入该值。 它也不是这样工作的。
对于不熟悉的用户、endTransmission 在 I2C 语言中基本停止。