Quellcode zum Arduino EEPROM (Projekt 29)

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen

In diesem Artikel wird ergänzend zum Projekt 29 [[1]] der Quellcode für die Ansteuerung eines EEPROMs aufgezeigt.

#include <Wire.h> 
 
void i2c_eeprom_write_page( int deviceaddress, unsigned int eeaddresspage, byte* data, byte length ) {
Wire.beginTransmission(deviceaddress);
Wire.send((int)(eeaddresspage >> 8)); // MSB
Wire.send((int)(eeaddresspage & 0xFF)); // LSB
 
byte c;
for ( c = 0; c < length; c++)
Wire.send(data[c]);
 
Wire.endTransmission();
}
 
byte i2c_eeprom_read_byte( int deviceaddress, unsigned int eeaddress ) {
byte rdata = 0xFF;
 
Wire.beginTransmission(deviceaddress);
Wire.send((int)(eeaddress >> 8)); // MSB
Wire.send((int)(eeaddress & 0xFF)); // LSB
Wire.endTransmission();
Wire.requestFrom(deviceaddress,1);
 
if (Wire.available()) rdata = Wire.receive();
 
return rdata;
}
 
void setup() {
char somedata[] = "angewandte Elektrotechnik"; //Daten
Wire.begin(); //Start der Verbindung 
Serial.begin(9600);
i2c_eeprom_write_page(0x50, 0, (byte *)somedata, sizeof(somedata)); // auf das EEPROM schreiben
 
delay(10); // Verzögerung
 
Serial.println("es wurde geschrieben");
}
 
 
 
void loop() {
int addr=0; //EEPROM Addresse 0
byte b = i2c_eeprom_read_byte(0x50, 0); // Zugang zur ersten Adresse des Speichers
 
while (b!=0) {
Serial.print((char)b); // Ausgabe 
addr++; //Adresse inkremnetieren
b = i2c_eeprom_read_byte(0x50, addr); // Zugang zur ersten Adresse des Speichers

delay(500); // kurze Verzögerung
}
 
Serial.println(" ");
delay(2000);
}

Zuerst muss die Header "Wire.h" inkludiert werden, damit eine Kommunikation zwischen dem Arduino und dem EEPROm stattfinden kann. Für das Speichern von Daten auf dem nicht-flüchtigen Speicher wird die Funktion "i2c_eeprom_write_page(int deviceaddress, unsigned int eeaddresspage, byte* data, byte length)" eingesetzt. Diese benötigt die Geräteadresse, die Adressseite, die zu speichernden Daten und die Länge dieser. Dadurch kann nun das EEPROm angesprochen werden, Hierfür muss der MSB und LSB gesetzt werden. Anhand der Länge wird die zu speichernde Daten Zeichenweise an das EEPROM gesendet und gespeichert. Abschließend wird die übertragung, also die Speicherung, beendet. Die zweite Funktion "i2c_eeprom_read_byte(int deviceaddress, unsigned int eeaddress)" in dem Quellcode dient dem Auslesen der gespeicherten Daten. An dieser Stelle müssen die Adressen bekannt sein. Da diese aus der ersten Funktion bekannt sind, werden diese ebenfalls hier übergeben. Dieser Adresse muss angesprochen werden und wenn Daten dort vorhanden sind, werden sie mit "return" zurückgegeben. Im "void Setup" erfolgt dann die Übergabe der zu speichernden Daten, in diesem Fall "angewandte Elektrotechnik". Die "void loop()" fragt abschließend zyklisch die Daten aus dem Speicher (EEPROM) ab und sendet sie an das Terminal.