Hallo, ich versuche über I2C mit einem Fuel Gauge (LC709203F) zu kommunizieren. Der Master ist dabei momentan ein Arduino Uno, die Software damit auch Arduino. Um zu testen, ob die Kommandos richtig ankommen will ich die "Alarm-Voltage" in Register 0x14 auf 0x11FF, also 4,607V setzen. Damit wird bei Unterschreitung dieser am VDD-Pin der ALARM-Pin LOW gesetzt. Da ich einen 3,7V Li-Ion Akku angeschlossen habe sollte die Bedingung immer erfüllt und der Pin LOW sein. Das ist bisher nicht der Fall und um die Fehlerquelle in der Datenübertragung auszuschließen wollte ich fragen ob das übertragene Kommando für diese Funktion vom Prinzip her stimmt. Angehängt habe ich die Beschreibung des Protokolls aus dem Datenblatt, sowie eine Übersichtstabelle der Register und mein Oszilloskop-Shot der Übertragung. Hier der Teil meines Codes für den Befehl:
1 | Wire.beginTransmission(0x0B); |
2 | Wire.write(0x14); //Set Voltage Threshold |
3 | Wire.write(0xFF); //Data Byte Low |
4 | Wire.write(0x11); //Data Byte High |
5 | Wire.endTransmission(); |
Start-Bedingung, Slave-Address + Write Befehl, ACK, Command Code, ACK, Data Byte Low, ACK, Data Byte High, ACK kann ich erkennen, dann ein kurzes HIGH an SDA (?) und wenig später die Stop-Bedingung. Im Datenblatt steht beim Protokoll aber noch CRC-8. Das ist die Check-Sum oder? Ich vermute, dass dieser letzte Teil fehlt und das der Grund ist warum es nicht klappt. Stimmt das und wenn ja, kann dieser Teil automatisch mit der Wire.h Library erstellt werden? Außerdem: stimmt der Code an sich und die Übertragung von 0x11FF? Gruß Daniel