Post Go back to editing

[LTC1760] Weird SMBus level, The battery charger does not work

Hello everyone,

I am currently using a LTC1760 that communicates via SMBus with a microcontroller. I developed my own pcb  based on the reference design given in the datasheet.

 

n



The configuration:
I adapted the resistance bridges giving on the LOPWR pins, and DCDIV to my project.

Vmode = Vcc2 and Vdds> Vih_vdds (2.6V) -> Normal Operation on all, Charging is Allowed

The LTC1760 is connected either to the wall adapter or to a battery of (Smart Battery). The Power Switch works very well. If I feed the circuit with the wall adapter, the circuit is powered with the voltage supplied by the wall adapter and if I power with a smart battery the circuit is powered with the battery voltage.

My problem is on the side of the charge and the SMBus. The charger is not working and my SMBus levels are not consistent. let me explain :
The circuit detects well the battery or the wall adpateur but when both are present the charger is not working

 

SMBus Signal: SMBus ALERT = LOW SDA = 0.7V and SCL = 0.7V

 

Any ideas ???????

 

Thanks in advance !

Parents
  • Hello,

    Ok, good to know, thank you. It also may be that the ESD diodes were damaged. Perhaps a fresh part will work. If not, something about that part must not be suitable and swapping to a different model will work fine here. Good luck!

    Regards,


    Zack

  • Hi,

    I am trying to communicate with the LTC1760 (integrated in the 486B Demo board) by using Arduino, but it seems not to work. Do I need to remove the ESD protection diodes on the 486B board?

    Can you give me some suggestions?

    I attach the code I used.

    -----------------------------------------------------------------------

    #include <Wire.h>

    void setup()
    {
       Wire.begin();
       Serial.begin(9600);
    }

    uint8_t address = 0x0A; // 0x14, but Wire i2c adressing uses the high 7 bits so shift right
    uint8_t reg = 0x04; // BatterySystemInfo() register
    uint8_t numBtyes = 2;

    void loop()
    {
       Wire.beginTransmission(address);
       Wire.write(byte(reg)); // sets register pointer
       Wire.endTransmission(false); // repeated start

       Wire.requestFrom(address, numBtyes); // request 2 bytes from slave device #112

       int reading = 0;
       if (Wire.available() >= numBtyes)
       {
          reading = Wire.read(); // receive low byte
          reading |= Wire.read() << 8; // receive high byte
          printHex(reading, 4);
       }

       else // nothing was received
       {
          Serial.println("Nothing Received");
       }

       delay(1000);
    }

    void printHex(int num, int precision)

    {
       char tmp[16];
       char format[128];

       sprintf(format, "0x%%.%dX", precision);

       sprintf(tmp, format, num);
       Serial.println(tmp);
    }

    -----------------------------------------------------------------------

Reply
  • Hi,

    I am trying to communicate with the LTC1760 (integrated in the 486B Demo board) by using Arduino, but it seems not to work. Do I need to remove the ESD protection diodes on the 486B board?

    Can you give me some suggestions?

    I attach the code I used.

    -----------------------------------------------------------------------

    #include <Wire.h>

    void setup()
    {
       Wire.begin();
       Serial.begin(9600);
    }

    uint8_t address = 0x0A; // 0x14, but Wire i2c adressing uses the high 7 bits so shift right
    uint8_t reg = 0x04; // BatterySystemInfo() register
    uint8_t numBtyes = 2;

    void loop()
    {
       Wire.beginTransmission(address);
       Wire.write(byte(reg)); // sets register pointer
       Wire.endTransmission(false); // repeated start

       Wire.requestFrom(address, numBtyes); // request 2 bytes from slave device #112

       int reading = 0;
       if (Wire.available() >= numBtyes)
       {
          reading = Wire.read(); // receive low byte
          reading |= Wire.read() << 8; // receive high byte
          printHex(reading, 4);
       }

       else // nothing was received
       {
          Serial.println("Nothing Received");
       }

       delay(1000);
    }

    void printHex(int num, int precision)

    {
       char tmp[16];
       char format[128];

       sprintf(format, "0x%%.%dX", precision);

       sprintf(tmp, format, num);
       Serial.println(tmp);
    }

    -----------------------------------------------------------------------

Children
No Data