Linear LTC2944 wie register auslesen mit Hilfe von Library über I2C

Guten Abend,

Irgendwie steh ich ein wenig auf dem Schlauch was die Nutzung der Funktionen aus einer Library angeht. Hierbei bräuchte ich einen Denkanstoss/Hilfe.

Kurz zum Projekt:
Selbstbau eines Fuelgauge für einen 3kWh LiFePo4. Anbindung des Mess-IC mit Hilfe von I2C an einen Atmega328P (Nano V3)

Elektrisch scheint alles soweit ok zu sein, mit Hilfe vom I2C-Scanner finde ich nen IC an SCL und SDA und kriege auch die richtige Adresse von 0x64 genannt. soweit so gut.

Woran es hapert ist die Abfrage des IC über I2C.

Der ursprüngliche Plan sah vor mit Hilfe von Wire die Verbindung herzustellen. Leider wurden mir hier als Wert immer 255 zurück gemeldet, egal welches Register ich abfragte.
Der Code sah aus wie folgt:

#include <Wire.h>

void setup() {
    
  Wire.begin();
 
  Serial.begin(9600);
  Serial.println("Fuel Gauge with LT2944");

}

void loop() {
Wire.beginTransmission(0x64);    
Wire.write(0x09);       
Wire.requestFrom(0x09,1); 
byte slaveByte2 = Wire.read();
Wire.endTransmission(true);
Serial.println(slaveByte2);
delay(5000);
}

also dachte ich mir ich nehme einfach mal die von Linear bereitgestellten Bibs, aber das Ergebnis ist nicht viel besser. Nur das ich jetzt immer 0.00 oder 0 als Rückmeldung erhalte. Ich vermute ganz stark, dass mein Aufruf der Funktion einfach nicht richtig ist, daher meine Bitte um Hilfe
Der Code sieht nun aus wie folgt:

#include <Arduino.h>
#include <stdint.h>
#include "Linduino.h"
#include "LT_I2C.h"
#include "LTC2944.h"
#include <Wire.h>

const float resistor = .001;                               //!< resistor value on demo board
float Voltage = 0;

void setup()
{
  Serial.begin(115200);             //! Initialize the serial port to the PC
  int8_t ack = 0;                               //! I2C acknowledge indicator
  static uint8_t mAh_or_Coulombs = 0;
  static uint8_t celcius_or_kelvin = 0;
  static uint16_t prescalar_mode = LTC2944_PRESCALAR_M_4096;
  static uint16_t prescalarValue = 4096;
  static uint16_t alcc_mode = LTC2944_ALERT_MODE;
  

}


//! Repeats Linduino loop
void loop()
{
 LTC2944_code_to_voltage(0x09);
  Serial.println(Voltage);
  delay(2000);

 }

die LTC2944.h sieht im betreffenden Bereich wie folgt aus:

//! Calculate the LTC2944 SENSE+ voltage
//! @return Returns the SENSE+ Voltage in Volts
float LTC2944_code_to_voltage(uint16_t adc_code              //!< The RAW ADC value
                             );

die LTC2944.cpp hat an der Stelle folgenden Inhalt:

float LTC2944_code_to_voltage(uint16_t adc_code)
// The function converts the 16-bit RAW adc_code to Volts
{
  float voltage;
  voltage = ((float)adc_code/(65535))*LTC2944_FULLSCALE_VOLTAGE;
  return(voltage);
}

Ich vermisse hier schon den Aufruf der Funktion mit Adresse und Register. oder sehe ich das falsch?

Ich hab mal alles angehängt, was an libraries und Sketchen vorhanden ist. Ich Danke schon ein mal für die Bereitschaft zur Hilfe!

LTC2944_Test.zip (8.24 KB)

IMO muß Wire.endTransmission() vor Wire.requestFrom() stehen. Siehe SFRRanger_reader Beispiel.