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)