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