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.

BQ25887: BQ25887

Part Number: BQ25887

Hello I am Babu,

I have created a control board that uses the BQ25887 along with a MEGA2560 for charging a 7.4V 2-Cell Li-ion battery but while testing the circuit, and using the exact circuit diagram and component models as on the EVAL board, I am getting all my register values as 255. Please advise what I have done wrong?

The register values printed are:schematic

register values

The code that I have used is:

#include<Wire.h>

int CD = 7;
int INTRPT = 10;
int STAT =9;
int PG = 8;
const float SNS =A0;
void setup()
{

pinMode(CD, OUTPUT);
pinMode(CD, INPUT);
pinMode(PG, INPUT);
pinMode(INTRPT, INPUT);
pinMode(STAT, INPUT);
pinMode(SNS, INPUT);
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(9600); // start serial for output

Wire.begin(); // join i2c bus (address optional for master)

}

//cell voltage limit violation condition

void cellvoltage()
{
Wire.beginTransmission(106);
Wire.write(0X00);
Wire.endTransmission();
Wire.requestFrom(106,7);

byte d = Wire.read();
Serial.println("Cell-Voltage register");
Serial.println(d);

}

// charge current limit violation
void chargecurrentlimit()
{
Wire.beginTransmission(106);
Wire.write(0X01);
Wire.endTransmission();

Wire.requestFrom(106,7);
byte e = Wire.read();
Serial.println("charge_current register");
Serial.println(e);
}


//input voltage limit violation
void inputvoltagelimitviolation()
{
Wire.beginTransmission(106);
Wire.write(0X02);
Wire.endTransmission();
Wire.requestFrom(106,7);
byte f = Wire.read();
Serial.println("input voltage limit register");
Serial.println(f);
}

//input current limit violation
void inputcurrentviolation()
{
Wire.beginTransmission(106);
Wire.write(0X03);
Wire.endTransmission();
Wire.requestFrom(106,7);
byte a = Wire.read();
Serial.println("Input current limit register");
Serial.println(a);

}

//charge stauts monitoring
void chargestatusmonitoring()
{
Wire.beginTransmission(106);
Wire.write(11); //0X0B
Wire.endTransmission();
Wire.requestFrom(106,7);
byte x = Wire.read();
Serial.println("Charge status register");
Serial.println(x);
}


//CHARGE STATUS MONITOR VBUS ADAPTER
void chargestatusmonitor()
{
Wire.beginTransmission(106);
Wire.write(12); //0X0C
Wire.endTransmission();
Wire.requestFrom(106,7);
byte b = Wire.read();
Serial.println("Charge type register");
Serial.println(b);
}

//Temperature condition
void temp()
{
Wire.beginTransmission(106);
Wire.write(13);//0X0D
Wire.endTransmission();
Wire.requestFrom(106,7);
byte y = Wire.read();
Serial.println("temperature register");
Serial.println(y);
}

void loop()
{
Serial.println("Charge sensing current :");
float SNS_current = analogRead(A0);
Serial.println(SNS_current);
delay(3000);
int pg = digitalRead(PG);
Serial.println("POWER INDICATOR (GOOD[0] or BAD [1] SOURCE:");
Serial.println(pg);
delay(2000);
Serial.println("Charge status indicator{ 0-charging; 1-complete/disable)");
int stat = digitalRead(STAT);
Serial.println(stat);
delay(3000);
Serial.println("INTERRUPT SIGNAL, 0-interrupt signal or fault");
int itrpt = digitalRead(INTRPT);
Serial.println(itrpt);
delay(1000);
cellvoltage();
delay(2000);
chargecurrentlimit();
delay(2000);
inputvoltagelimitviolation();
delay(2000);
inputcurrentviolation();
delay(2000);
chargestatusmonitoring();
delay(2000);
chargestatusmonitor();
delay(2000);
temp();
delay(40000);
}