Part Number: BQ20Z95
Hi,
I'm not overly familiar with requesting data through i2c and so i'm after some guidance please. I am using the BQ20Z95 (info here https://www.ti.com/product/BQ20Z95?qgpn=bq20z95) and i am getting values back, but i'm not convinced the values i am receiving are correct. I have added my code snippets below, please let me know your thoughts.
Void readSOC()
{
Wire.beginTransmission(BQ20Z95);
Wire.write(0x0d);
Wire.endTransmission();
Wire.requestFrom(BQ20Z95,1);
unsigned int low = Wire.read();
Wire.beginTransmission(BQ20Z95);
Wire.write(0x0e);
Wire.endTransmission();
Wire.requestFrom(BQ20Z95,1);
unsigned int high = Wire.read();
soc = (high + low)/2;
}
// The battery's remaining capacity in mAh
void readRemainingCapacity()
{
Wire.beginTransmission(BQ20Z95);
Wire.write(0x10);
Wire.endTransmission();
Wire.requestFrom(BQ20Z95,2);
remain_cap = Wire.read();
}
void readlev()
{
Wire.beginTransmission(BQ20Z95);
Wire.write(0x0f);
Wire.endTransmission();
Wire.requestFrom(BQ20Z95,2);
batt_lev = Wire.read();
}
void readVoltage()
{
Wire.beginTransmission(BQ20Z95);
Wire.write(0x09);
Wire.endTransmission();
Wire.requestFrom(BQ20Z95,2);
voltage = Wire.read();
}
void readAverageCurrent()
{
Wire.beginTransmission(BQ20Z95);
Wire.write(0x14);
Wire.endTransmission();
Wire.requestFrom(BQ20Z95,2);
avg_current = Wire.read();
}
void readBattTemp()
{
Wire.beginTransmission(BQ20Z95);
Wire.write(0x08);
Wire.endTransmission();
Wire.requestFrom(BQ20Z95,2);
batt_temp = Wire.read();
batt_temp = 0.1*batt_temp; // Each bit is 0.1K, so we have a value in Kelvins
batt_temp = batt_temp - 273.15; // Convert to degrees Celsius
}