Wie speichere ich Daten von einem I2C Sensor auf ein externes I2C eeprom?

Hallo liebe Community,

ich habe einen Arduino Nano über I2C mit einem EEPROM breakout und einem Sensor (DROTEK_10DOF_MPU http://www.drotek.fr/shop/fr/home/62-imu-10dof-mpu6050-hmc5883l-ms5611.html) verbunden. Nun möchte ich ein Programm hinkriegen, dass die Daten vom Sensor ausließt und auf das EEPROM speichert. Über eure Hilfe würde ich mich sehr freuen :smiley: .

Carl Söhne

Beginne mal mit dem Auslesen des Sensors und auf die serielle Schnittstelle ausgeben. Wenn das klappt, versuchst Du feste Werte im EEPROM zu speichern und später wieder auszulesen. Wenn beides geklappt hat, dann kannst Du die beiden Sketches vereinigen.

Beginne mal mit dem Auslesen des Sensors und auf die serielle Schnittstelle ausgeben.

Das funktioniert schon mit der MultiWii Software. Den EEPROM zu beschreiben funktioniert auch schon. Ich brauche nur zu wissen, wie ich die Daten auf das EEPROM speichere, anstatt sie auf dem Computer anzeigen zu lassen. Während meinen Tests kann ich ihn nämlich nicht mit dem Computer verbinden.

Beispiel für ein EEPROM mit I2C interface: http://www.hobbytronics.co.uk/arduino-external-eeprom
Je nach EEprom ist das Interface, Protokoll und Adresse anders.
grüße Uwe

Wie schon gesagt habe ich das schon alles verbunden. Und einzeln funktioniert das schon alles. Hier zeige ich euch ein Bild, damit ihr sehen könnt, was ich meine :smiley:

Jetzt will ich aber wissen, wie ich die Dateien vom Sensor auf das EEPROM schreiben kann.

Wieviele Byte hast du denn pro Wert?

Nehmen wird mal du willst pro Wert 3 Byte schreiben. Dann hast du z.B. einen const int valueSize = 3. Dann musst du nur deine Werte durchnummerieren und der Rest geht automatisch.

Ich nehme mal den Code wo ich bei mir 3 Byte ins RTC RAM schreibe:

void setAlarmToRTC(int alarmNumber, struct AlarmSettings *alarm)
{
	uint8_t data[] = { alarm->hours, alarm->minutes, alarm->flags };
	RTC.setRAM(alarmNumber * ALARM_SIZE, data, ALARM_SIZE);
}

Die zweite Zeile ist für dich relevant. setRAM erwartet eine Adresse, einen pointer auf die Daten und die Anzahl der Bytes. Ich nummeriere meine Daten von 0-x und multipliziere sie mit meiner Daten-Größe für die Adresse. Das sorgt dafür dass Wert 0 auf Adressen 0-2 geschrieben werden und Wert 1 automatisch auf 3-5. Die setRAM Methode iteriert dann von der Start-Adresse bis zur maximalen Größe und schreibt jedes Byte einzeln. Das kannst du genauso mit der EEPROM lib machen.

z.B.:

for(int i = startAdress * valueSize; i < startAdress * valueSize + valueSize; i++)
    EEPROM.write(i, data[i])