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.

INA219: Voltage reading goes negative once 16.4V is reached

Part Number: INA219

We are debugging the firmware for the SEN0291 and have an issue with the scaling on the 32V range.

We get accurate readings until hitting 16.4V, in which case the sensor gives us -16319 mV.

We verified that the 32V range is selected in the register.

For troubleshooting, we changed to the 16V and noted that the sensor bricked at 16000mV even when the voltage went past that.
The digital power supply is connected to IN+ and GND on the wattmeter. No load is connected.
This is seen regardless of a load or not or if connecting to IN- and GND.
We are using the Gravity: I2C Digital Wattmeter sensor from DF Robot: https://wiki.dfrobot.com/Gravity%3A%20I2C%20Digital%20Wattmeter%20SKU%3A%20SEN0291
Thanks,
Ryan
  • Forgot to add:

    When changing the power supply to 16.4V, bus voltage reads -16319

  • Hello Ryan,

    Thank you for using the TI forum.

    Can you please send me a list of all raw register values from the device during the failing condition? (and also tell me what the verified voltage is during that condition). This way I can analyze the situation better.

  • Here's the output:

    Config register values(binary): 0011110110011111
    BRNG is set for 32V.

    I am working with a remote firmware engineer so I cannot look at register values on my end. I'm am doing the testing while the firmware engineer is checking on the values.

  • Can you also send the raw register value for the Bus Voltage register, before conversion, and let me know what value you expect to see on the bus at that time?

  • Here's the readout after he changed the firmware.

    He says it will "dump register values when voltage goes -ve. It will also dump bus voltage register values in the good cases."

    wattmetertest.txt
    16:25:25.156 -> Scan: sen0291 S C A N N I N G . . . . 
    16:25:25.190 -> Scan testing: conf --> 14751
    16:25:25.190 -> Scan: sen0291 detected! 1
    16:25:25.190 -> [DBG : power_sensor] R E A D  P O W E R . . . 
    16:25:25.190 -> REG - BUSVOLTAGE: 0X000518 raw
    16:25:25.190 -> REG - SHUNTVOLTAGE: 0XFFFFFFFD raw
    16:25:25.190 -> REG - CURRENT:  0XFFFFFFFB raw
    16:25:25.190 -> REG - POWER:  00000000 raw
    16:25:25.190 -> [DBG : power_sensor] 
    16:25:25.190 -> BUS_VOLT(mV): 652
    16:25:25.190 -> SHUNT_VOLT(mV): -3
    16:25:25.190 -> CURRENT(mA): -5
    16:25:25.190 -> POWER(mW): 0
    16:25:35.237 -> Scan: sen0291 S C A N N I N G . . . . 
    16:25:35.237 -> Scan testing: conf --> 14751
    16:25:35.237 -> Scan: sen0291 detected! 1
    16:25:35.237 -> [DBG : power_sensor] R E A D  P O W E R . . . 
    16:25:35.237 -> REG - BUSVOLTAGE: 0X000510 raw
    16:25:35.237 -> REG - SHUNTVOLTAGE: 0XFFFFFFFD raw
    16:25:35.237 -> REG - CURRENT:  00000000 raw
    16:25:35.237 -> REG - POWER:  00000000 raw
    16:25:35.237 -> [DBG : power_sensor] 
    16:25:35.237 -> BUS_VOLT(mV): 648
    16:25:35.237 -> SHUNT_VOLT(mV): -3
    16:25:35.237 -> CURRENT(mA): 0
    16:25:35.237 -> POWER(mW): 0
    16:25:45.281 -> Scan: sen0291 S C A N N I N G . . . . 
    16:25:45.281 -> Scan testing: conf --> 14751
    16:25:45.281 -> Scan: sen0291 detected! 1
    16:25:45.281 -> [DBG : power_sensor] R E A D  P O W E R . . . 
    16:25:45.281 -> REG - BUSVOLTAGE: 0X006FE8 raw
    16:25:45.281 -> REG - SHUNTVOLTAGE: 0XFFFFFFFF raw
    16:25:45.281 -> REG - CURRENT:  0X000001 raw
    16:25:45.281 -> REG - POWER:  00000000 raw
    16:25:45.281 -> [DBG : power_sensor] 
    16:25:45.281 -> BUS_VOLT(mV): 14324
    16:25:45.281 -> SHUNT_VOLT(mV): -1
    16:25:45.281 -> CURRENT(mA): 1
    16:25:45.281 -> POWER(mW): 0
    16:25:55.302 -> Scan: sen0291 S C A N N I N G . . . . 
    16:25:55.302 -> Scan testing: conf --> 14751
    16:25:55.302 -> Scan: sen0291 detected! 1
    16:25:55.302 -> [DBG : power_sensor] R E A D  P O W E R . . . 
    16:25:55.302 -> REG - BUSVOLTAGE: 0X006FE8 raw
    16:25:55.302 -> REG - SHUNTVOLTAGE: 00000000 raw
    16:25:55.302 -> REG - CURRENT:  0XFFFFFFFF raw
    16:25:55.302 -> REG - POWER:  00000000 raw
    16:25:55.302 -> [DBG : power_sensor] 
    16:25:55.302 -> BUS_VOLT(mV): 14324
    16:25:55.302 -> SHUNT_VOLT(mV): 0
    16:25:55.302 -> CURRENT(mA): -1
    16:25:55.302 -> POWER(mW): 0
    16:26:05.338 -> Scan: sen0291 S C A N N I N G . . . . 
    16:26:05.338 -> Scan testing: conf --> 14751
    16:26:05.338 -> Scan: sen0291 detected! 1
    16:26:05.338 -> [DBG : power_sensor] R E A D  P O W E R . . . 
    16:26:05.338 -> REG - BUSVOLTAGE: 0X006FE8 raw
    16:26:05.338 -> REG - SHUNTVOLTAGE: 0XFFFFFFFE raw
    16:26:05.338 -> REG - CURRENT:  0XFFFFFFFF raw
    16:26:05.338 -> REG - POWER:  00000000 raw
    16:26:05.338 -> [DBG : power_sensor] 
    16:26:05.338 -> BUS_VOLT(mV): 14324
    16:26:05.338 -> SHUNT_VOLT(mV): -2
    16:26:05.338 -> CURRENT(mA): -1
    16:26:05.338 -> POWER(mW): 0
    16:26:15.359 -> Scan: sen0291 S C A N N I N G . . . . 
    16:26:15.359 -> Scan testing: conf --> 14751
    16:26:15.359 -> Scan: sen0291 detected! 1
    16:26:15.359 -> [DBG : power_sensor] R E A D  P O W E R . . . 
    16:26:15.359 -> REG - BUSVOLTAGE: 0X007F78 raw
    16:26:15.359 -> REG - SHUNTVOLTAGE: 0X000001 raw
    16:26:15.359 -> REG - CURRENT:  0X000002 raw
    16:26:15.359 -> REG - POWER:  0X000002 raw
    16:26:15.359 -> [DBG : power_sensor] 
    16:26:15.359 -> BUS_VOLT(mV): 16316
    16:26:15.359 -> SHUNT_VOLT(mV): 1
    16:26:15.359 -> CURRENT(mA): 2
    16:26:15.359 -> POWER(mW): 40
    16:26:25.369 -> Scan: sen0291 S C A N N I N G . . . . 
    16:26:25.369 -> Scan testing: conf --> 14751
    16:26:25.404 -> Scan: sen0291 detected! 1
    16:26:25.404 -> [DBG : power_sensor] R E A D  P O W E R . . . 
    16:26:25.404 -> REG - BUSVOLTAGE: 0X007F78 raw
    16:26:25.404 -> REG - SHUNTVOLTAGE: 0XFFFFFFFF raw
    16:26:25.404 -> REG - CURRENT:  0XFFFFFFFE raw
    16:26:25.404 -> REG - POWER:  0X000002 raw
    16:26:25.404 -> [DBG : power_sensor] 
    16:26:25.404 -> BUS_VOLT(mV): 16316
    16:26:25.404 -> SHUNT_VOLT(mV): -1
    16:26:25.404 -> CURRENT(mA): -2
    16:26:25.404 -> POWER(mW): 40
    16:26:35.430 -> Scan: sen0291 S C A N N I N G . . . . 
    16:26:35.430 -> Scan testing: conf --> 14751
    16:26:35.430 -> Scan: sen0291 detected! 1
    16:26:35.430 -> [DBG : power_sensor] R E A D  P O W E R . . . 
    16:26:35.430 -> REG - BUSVOLTAGE: 0X007F78 raw
    16:26:35.430 -> REG - SHUNTVOLTAGE: 00000000 raw
    16:26:35.430 -> REG - CURRENT:  00000000 raw
    16:26:35.430 -> REG - POWER:  00000000 raw
    16:26:35.430 -> [DBG : power_sensor] 
    16:26:35.430 -> BUS_VOLT(mV): 16316
    16:26:35.430 -> SHUNT_VOLT(mV): 0
    16:26:35.430 -> CURRENT(mA): 0
    16:26:35.430 -> POWER(mW): 0
    16:26:45.403 -> Scan: sen0291 S C A N N I N G . . . . 
    16:26:45.472 -> Scan testing: conf --> 14751
    16:26:45.472 -> Scan: sen0291 detected! 1
    16:26:45.472 -> [DBG : power_sensor] R E A D  P O W E R . . . 
    16:26:45.472 -> REG - BUSVOLTAGE: 0X007F78 raw
    16:26:45.472 -> REG - SHUNTVOLTAGE: 00000000 raw
    16:26:45.472 -> REG - CURRENT:  0XFFFFFFFF raw
    16:26:45.472 -> REG - POWER:  00000000 raw
    16:26:45.472 -> [DBG : power_sensor] 
    16:26:45.472 -> BUS_VOLT(mV): 16316
    16:26:45.472 -> SHUNT_VOLT(mV): 0
    16:26:45.472 -> CURRENT(mA): -1
    16:26:45.472 -> POWER(mW): 0
    16:26:55.495 -> Scan: sen0291 S C A N N I N G . . . . 
    16:26:55.495 -> Scan testing: conf --> 14751
    16:26:55.495 -> Scan: sen0291 detected! 1
    16:26:55.495 -> [DBG : power_sensor] R E A D  P O W E R . . . 
    16:26:55.495 -> REG - BUSVOLTAGE: 0X007F70 raw
    16:26:55.495 -> REG - SHUNTVOLTAGE: 0XFFFFFFFF raw
    16:26:55.495 -> REG - CURRENT:  00000000 raw
    16:26:55.495 -> REG - POWER:  00000000 raw
    16:26:55.495 -> [DBG : power_sensor] 
    16:26:55.495 -> BUS_VOLT(mV): 16312
    16:26:55.495 -> SHUNT_VOLT(mV): -1
    16:26:55.495 -> CURRENT(mA): 0
    16:26:55.495 -> POWER(mW): 0
    16:27:05.513 -> Scan: sen0291 S C A N N I N G . . . . 
    16:27:05.513 -> Scan testing: conf --> 14751
    16:27:05.513 -> Scan: sen0291 detected! 1
    16:27:05.513 -> [DBG : power_sensor] R E A D  P O W E R . . . 
    16:27:05.513 -> REG - BUSVOLTAGE: 0X007F78 raw
    16:27:05.513 -> REG - SHUNTVOLTAGE: 0XFFFFFFFE raw
    16:27:05.513 -> REG - CURRENT:  0X000001 raw
    16:27:05.513 -> REG - POWER:  00000000 raw
    16:27:05.513 -> [DBG : power_sensor] 
    16:27:05.513 -> BUS_VOLT(mV): 16316
    16:27:05.513 -> SHUNT_VOLT(mV): -2
    16:27:05.513 -> CURRENT(mA): 1
    16:27:05.513 -> POWER(mW): 0
    16:27:15.545 -> Scan: sen0291 S C A N N I N G . . . . 
    16:27:15.545 -> Scan testing: conf --> 14751
    16:27:15.545 -> Scan: sen0291 detected! 1
    16:27:15.545 -> [DBG : power_sensor] R E A D  P O W E R . . . 
    16:27:15.545 -> REG - BUSVOLTAGE: 0X007F70 raw
    16:27:15.545 -> REG - SHUNTVOLTAGE: 0XFFFFFFFF raw
    16:27:15.545 -> REG - CURRENT:  00000000 raw
    16:27:15.545 -> REG - POWER:  00000000 raw
    16:27:15.545 -> [DBG : power_sensor] 
    16:27:15.545 -> BUS_VOLT(mV): 16312
    16:27:15.545 -> SHUNT_VOLT(mV): -1
    16:27:15.545 -> CURRENT(mA): 0
    16:27:15.545 -> POWER(mW): 0
    16:27:25.615 -> Scan: sen0291 S C A N N I N G . . . . 
    16:27:25.615 -> Scan testing: conf --> 14751
    16:27:25.615 -> Scan: sen0291 detected! 1
    16:27:25.615 -> [DBG : power_sensor] R E A D  P O W E R . . . 
    16:27:25.615 -> -ve voltage reading
    16:27:25.615 -> REGISTER Dump:....................
    16:27:25.615 -> CONFIG REG Value: 15775
    16:27:25.615 -> REG - BUSVOLTAGE: 0XFFFF8112 raw
    16:27:25.615 -> REG - SHUNTVOLTAGE: 0X000001 raw
    16:27:25.615 -> REG - CURRENT:  0X000001 raw
    16:27:25.615 -> REG - POWER:  0X000002 raw
    16:27:25.615 -> REG - CALIBRATION:  0X001000 raw
    16:27:25.615 -> REG - SHUNTVOLTAGE: 0XFFFFFFFF raw
    16:27:25.615 -> REG - CURRENT:  00000000 raw
    16:27:25.615 -> REG - POWER:  00000000 raw
    16:27:25.615 -> [DBG : power_sensor] 
    16:27:25.615 -> BUS_VOLT(mV): -16248
    16:27:25.615 -> SHUNT_VOLT(mV): -1
    16:27:25.615 -> CURRENT(mA): 0
    16:27:25.615 -> POWER(mW): 0
    16:27:35.657 -> Scan: sen0291 S C A N N I N G . . . . 
    16:27:35.657 -> Scan testing: conf --> 14751
    16:27:35.657 -> Scan: sen0291 detected! 1
    16:27:35.657 -> [DBG : power_sensor] R E A D  P O W E R . . . 
    16:27:35.657 -> -ve voltage reading
    16:27:35.657 -> REGISTER Dump:....................
    16:27:35.657 -> CONFIG REG Value: 15775
    16:27:35.657 -> REG - BUSVOLTAGE: 0XFFFF80EA raw
    16:27:35.657 -> REG - SHUNTVOLTAGE: 0XFFFFFFFF raw
    16:27:35.657 -> REG - CURRENT:  0XFFFFFFFF raw
    16:27:35.657 -> REG - POWER:  0X000002 raw
    16:27:35.657 -> REG - CALIBRATION:  0X001000 raw
    16:27:35.657 -> REG - SHUNTVOLTAGE: 00000000 raw
    16:27:35.657 -> REG - CURRENT:  0X000002 raw
    16:27:35.657 -> REG - POWER:  0X000002 raw
    16:27:35.657 -> [DBG : power_sensor] 
    16:27:35.657 -> BUS_VOLT(mV): -16268
    16:27:35.657 -> SHUNT_VOLT(mV): 0
    16:27:35.657 -> CURRENT(mA): 2
    16:27:35.657 -> POWER(mW): 40
    16:27:45.728 -> Scan: sen0291 S C A N N I N G . . . . 
    16:27:45.728 -> Scan testing: conf --> 14751
    16:27:45.728 -> Scan: sen0291 detected! 1
    16:27:45.728 -> [DBG : power_sensor] R E A D  P O W E R . . . 
    16:27:45.728 -> -ve voltage reading
    16:27:45.728 -> REGISTER Dump:....................
    16:27:45.728 -> CONFIG REG Value: 15775
    16:27:45.728 -> REG - BUSVOLTAGE: 0XFFFF80E2 raw
    16:27:45.728 -> REG - SHUNTVOLTAGE: 0X000001 raw
    16:27:45.728 -> REG - CURRENT:  0X000001 raw
    16:27:45.728 -> REG - POWER:  0X000002 raw
    16:27:45.728 -> REG - CALIBRATION:  0X001000 raw
    16:27:45.728 -> REG - SHUNTVOLTAGE: 00000000 raw
    16:27:45.728 -> REG - CURRENT:  0X000001 raw
    16:27:45.728 -> REG - POWER:  0X000002 raw
    16:27:45.728 -> [DBG : power_sensor] 
    16:27:45.728 -> BUS_VOLT(mV): -16268
    16:27:45.728 -> SHUNT_VOLT(mV): 0
    16:27:45.728 -> CURRENT(mA): 1
    16:27:45.728 -> POWER(mW): 40
    16:27:55.713 -> Scan: sen0291 S C A N N I N G . . . . 
    16:27:55.783 -> Scan testing: conf --> 14751
    16:27:55.783 -> Scan: sen0291 detected! 1
    16:27:55.783 -> [DBG : power_sensor] R E A D  P O W E R . . . 
    16:27:55.783 -> -ve voltage reading
    16:27:55.783 -> REGISTER Dump:....................
    16:27:55.783 -> CONFIG REG Value: 15775
    16:27:55.783 -> REG - BUSVOLTAGE: 0XFFFF80EA raw
    16:27:55.783 -> REG - SHUNTVOLTAGE: 0XFFFFFFFF raw
    16:27:55.783 -> REG - CURRENT:  0XFFFFFFFF raw
    16:27:55.783 -> REG - POWER:  0X000002 raw
    16:27:55.783 -> REG - CALIBRATION:  0X001000 raw
    16:27:55.783 -> REG - SHUNTVOLTAGE: 0XFFFFFFFF raw
    16:27:55.783 -> REG - CURRENT:  0XFFFFFFFD raw
    16:27:55.783 -> REG - POWER:  0X000003 raw
    16:27:55.783 -> [DBG : power_sensor] 
    16:27:55.783 -> BUS_VOLT(mV): -16268
    16:27:55.783 -> SHUNT_VOLT(mV): -1
    16:27:55.783 -> CURRENT(mA): -3
    16:27:55.783 -> POWER(mW): 60
    16:28:05.801 -> Scan: sen0291 S C A N N I N G . . . . 
    16:28:05.801 -> Scan testing: conf --> 14751
    16:28:05.801 -> Scan: sen0291 detected! 1
    16:28:05.801 -> [DBG : power_sensor] R E A D  P O W E R . . . 
    16:28:05.801 -> REG - BUSVOLTAGE: 0X006DC0 raw
    16:28:05.801 -> REG - SHUNTVOLTAGE: 0XFFFFFFFD raw
    16:28:05.801 -> REG - CURRENT:  0XFFFFFFFF raw
    16:28:05.801 -> REG - POWER:  00000000 raw
    16:28:05.801 -> [DBG : power_sensor] 
    16:28:05.801 -> BUS_VOLT(mV): 14048
    16:28:05.801 -> SHUNT_VOLT(mV): -3
    16:28:05.801 -> CURRENT(mA): -1
    16:28:05.801 -> POWER(mW): 0
    16:28:15.839 -> Scan: sen0291 S C A N N I N G . . . . 
    16:28:15.839 -> Scan testing: conf --> 14751
    16:28:15.839 -> Scan: sen0291 detected! 1
    16:28:15.839 -> [DBG : power_sensor] R E A D  P O W E R . . . 
    16:28:15.839 -> REG - BUSVOLTAGE: 0X006DC0 raw
    16:28:15.839 -> REG - SHUNTVOLTAGE: 0X000001 raw
    16:28:15.839 -> REG - CURRENT:  00000000 raw
    16:28:15.839 -> REG - POWER:  00000000 raw
    16:28:15.839 -> [DBG : power_sensor] 
    16:28:15.839 -> BUS_VOLT(mV): 14048
    16:28:15.839 -> SHUNT_VOLT(mV): 1
    16:28:15.839 -> CURRENT(mA): 0
    16:28:15.839 -> POWER(mW): 0

    It goes negative when I have the power supply set to 16.5V

  • Hello Ryan,

    I have figured out what the problem is. 

    The problem is that the code being used is treating the read value as a 16 bit 2's compliment number, but instead needs to convert the value directly to without 2's compliment.  I noticed this because the "raw" value for bus when getting a negative number was "0xFFFF8112", but that is a 32 bit number, while we are only working with a 16 bit number.  The firmware is seeing the first bit of the 16 bit number is a 1, and seeing it as a negative number then converting it to a 32 bit number (keeping it negative). But, since these are not 2's compliment numbers, it should have converted it to a 32 bit number by just adding 0's in front, leaving just 0x8112 (which converts to 16.52V).  Because of this, you will see a "negative" number for any bus register read that is higher than 16.38V.  

    The solution would be to find the code that is reading in the bus voltage register and making sure it is not treated as a 16 bit 2's compliment (or signed) number. In many program languages this is as simple as changing datatypes to "unsigned", such as using "uint16_t" instead of "int16_t".

  • Thanks Mitch!

    I'll have our firmware engineer make this change and I'll report back the result.

  • ok, sounds good!

  • Thanks again Mitch, this solved the issue. Much appreciated!