Mehrere Daten in I2C EEPROM schreiben

Mit dem One Wire EEPROMs wurde es nichts, mit dem I2C hingegen schon. Auslesen und schreiben klappt soweit. Probleme hab ich aber beim beschreiben mehrerer Bytes, also es müssen zwei verschiedene Daten ausgelesen werden. Das lesen und schreiben ist in einem Sketch zusammengefasst:

#include <Wire.h> //I2C library
#define deviceadress 0x50


  void i2c_eeprom_write_byte( int deviceaddress, unsigned int eeaddress, byte data ) {
    int rdata = data;
    Wire.beginTransmission(deviceaddress);
    Wire.write((int)(eeaddress >> 8));
    Wire.write((int)(eeaddress & 0xFF)); 
    Wire.write(rdata);
    Wire.endTransmission();
  }

  void i2c_eeprom_write_page( int deviceaddress, unsigned int eeaddresspage, byte* data, byte length ) {
    Wire.beginTransmission(deviceaddress);
    Wire.write((int)(eeaddresspage >> 8));
    Wire.write((int)(eeaddresspage & 0xFF)); 
    byte c;
    for ( c = 0; c < length; c++)
      Wire.write(data[c]);
    Wire.endTransmission();
  }

  byte i2c_eeprom_read_byte( int deviceaddress, unsigned int eeaddress ) {
    byte rdata = 0xFF;
    Wire.beginTransmission(deviceaddress);
    Wire.write((int)(eeaddress >> 8)); 
    Wire.write((int)(eeaddress & 0xFF));
    Wire.endTransmission();
    Wire.requestFrom(deviceaddress,1);
    if (Wire.available()) rdata = Wire.read();
    return rdata;
  }

  void setup() 
  {
    char somedata1[] = "VSET1:12";// Spannung eingeben
    char somedata2[] = "ISET1:4";// Strom eingeben
    Wire.begin(); // Initialisieren
    Serial.begin(9600);
    i2c_eeprom_write_page(0x50, 0, (byte *)somedata1, sizeof(somedata1)); // schreibe auf den EEPROM 
    i2c_eeprom_write_page(0x50, 1, (byte *)somedata2, sizeof(somedata2));

    delay(10); //in einem gewissen delay ausgeben

    Serial.println("EEPROM fertig beschrieben"); //Bestätigung im Monitor
  }

  void loop() {
  {
    int addr0=0; 
    int addr1=1;
    byte b = i2c_eeprom_read_byte(0x50, 0); 
    byte d = i2c_eeprom_read_byte(0x50, 1); 

    while (b!=0) 
    {
      Serial.print((char)b); //geschriebenen Wert ausgeben im seriellen Monitor
      addr0++;
      
      b = i2c_eeprom_read_byte(0x50, addr0); //Adresse auswählen
    }
    Serial.println(" ");
    delay(2000);

    while (d!=0) 
    {
      Serial.print((char)d); //geschriebenen Wert ausgeben im seriellen Monitor
      addr1++; 
      d = i2c_eeprom_read_byte(0x50, addr1); //Adresse auswählen
    }
    Serial.println(" ");
    delay(2000);

  }
  }

Ich saß auch schon mit jemand der wesentlich mehr Erfahrung hat davor und wir haben es nicht hinbekommen. Entweder es kommt nichts sinnvolles bei raus oder es ist wie jetzt, dass die ‘VSET:12’ angezeigt werden und dann das ganze nochmal ohne ‘V’:‘SET:12’ (im seriellen Monitor)

Du schreibst die Stings übereinander.

Den ersten auf Adresse 0 und folgende, den zweiten auf Adresse 1 und folgende.

Ist doch logisch dass das dann so aussieht.

Schreib doch mal den zweiten String auf Adresse 16.

Zwischen dem Schreiben der beiden Strings brauchst du eine kleine Pause (2 mS oder mehr).

Danke. Versuch ich morgen.

Ich habe es mit einem 24C32 auf einem DS3231 Modul getestet.

Das mit den Pages solltest du dir noch einmal ansehen, das ist nicht besonders intuitiv.
Bei kleinen Daten die ganz innerhalb einer Page liegen ist es aber unproblematisch.

Vielleicht hift dir ja mein Geschreibsel etwas weiter: