Hi zusammen ich versuche gerade einen EEprom 24AA64/24LC64 64K I2C™ Serial EEPROM
mit ein paar werten zu beschreiben.
dazu habe ich eine Routine geschrieben einzeln kann ich die werte reinschreiben also ohne schleife und array.
Nur mit einem array klappt es irgendwie nicht.
Weiß jemand rat woran das liegen kann?
die lese routine ist gleichermaßen aufgebaut und gibt mir schön die werte im array an.
Vielen dank schon mal für eure Hilfe
Gruß beni
#include <i2cmaster.h>
#include <defs.h>
//byte PIX_LSB, PIX_MSB;
//unsigned char data[258];
//#define Pixel 1024;
void wake_up(){
i2c_start_wait(0x34);
i2c_write(0x01);
i2c_write(0x01);
i2c_stop ();
delay(5);
}
void writedatatoeeprom(){
byte lowadd = 0x10;
byte highadd = 0x00;
unsigned char werte[16]={0x0C,0x05,0x15,0x0C,0x88,0x0C,0x05,0x15,0x0C,0x88,0x0C,0x05,0x15,0x0C,0x88,0xFF};
for(int i=0;i<16;i++){
i2c_start_wait(0xA0);
i2c_write (highadd);
i2c_write (lowadd);
i2c_write (werte[i]);
Serial.print("EEPROM_Adresse:");
Serial.print(highadd,HEX);
Serial.println(lowadd,HEX);
Serial.println(werte[i],HEX);
lowadd++;
delay(5);
}
i2c_stop();
}
void readcalibdata(){
unsigned char EEPROM_DATA[16],eecpy[8];
byte lowadd = 0x10;
byte highadd = 0x00;
for(int i=0;i<20;i++){
i2c_start_wait(0xA0);
i2c_write (highadd);
i2c_write (lowadd);
i2c_rep_start(0xA1);
//Serial.print("EEPROM_Adresse:");
//Serial.print(highadd,HEX);
//Serial.println(lowadd,HEX);
lowadd++;
EEPROM_DATA[i] = i2c_readAck();
Serial.println(EEPROM_DATA[i],HEX);
delay(5);
}
i2c_stop();
}
void setup() {
Serial.begin(9600);
i2c_init();
wake_up();
writedatatoeeprom();
readcalibdata();
}
void loop() {
}
Bist du sicher dass das so geht?
16 mal i2c_start_wait(0xA0);
( usw. ) um ein Array von 16 Byte zu schreiben?
Warum verwendest du nicht einfach die Wire.h Standard-Bibliothek ?
Dann muss man nicht deine Library suchen. Diese:arduino/libraries/I2cMaster at master · landis/arduino · GitHub ?
( Was ist übrigens defs.h ?)
Dein Auslesen ist so übrigens auch nicht wirklich gut, weil mit Ende der Lese-Funktion die Daten wieder weg sind. Aber das ist ein anderes Problem.
Vielen dank schon einmal für die antwort.
die def.h ist unwichtig da habe ich nur für zukünftige anwendungen ein paar adressen definiert.
Ich benutze mit Absicht nicht die wire.h library weil ich einen Thermopile array von heimann sensoren auslese der zwingend den repeated start benötigt und ich einfach versuchen wollte mit der Bibliothek klar zukommen.
Ich dachte mir schon das es daran liegt die lese Funktion funktioniert wahrscheinlich nur wegen dem repeated start oder?
Kann ich i2C Bibliotheken überhaupt vermischen sprich wire.h und I2Cmaster.h oder gibt es dann Kompatibilitätsprobleme?
Ja das auslesen ist auch so eine Sache da mein array auserhalb wieder null ist wie kann ich das Problem fixen hast du dazu vllt vorschläge?
Sprich das ich die Werte dauerhaft im array hinterlegt habe und sie später wieder nutzen kann bzw darauf zugreifen kann ?
PS. hab den Array auch schon global versucht zu deklarieren aber ohne erfolg:-(
Grüße Beni
Hab den Array auch schon global versucht zu deklarieren aber ohne erfolg
Dann probier das nochmal. Das wäre jedenfalls eine (einfachste) Lösung.
weil ich einen Thermopile array von heimann sensoren auslese der zwingend den repeated start benötigt
Das sagt mit jetzt nix. Hat da jedes byte seine eigene Adresse und muss einzeln gelesen werden? Und was hat das mit dem i2c - eeprom zu tun?
Kann ich i2C Bibliotheken überhaupt vermischen sprich wire.h und I2Cmaster.h oder gibt es dann Kompatibilitätsprobleme?
Keine Ahnung: Eigentlich müsste theoretisch nach einer Stop-Bedingung ein Wechsel der Bibliothek möglich sein.
Aber Theoretisch ist kein Unterschied zwischen Theorie und Praxis, in der Praxis aber schon.
das ist ein 32x32 thermopile array und er liefert große Blöcke an Daten die solange ausgelesen werden müssen ich habe mich zu dem thema bereits unter dem Melexis90621 schlau gemacht dort wurde die i2cmaste.h bibliothek auch als einfachere Lösung empfunden und im datenblatt ist auch vermerkt das man repeated start benötigt.
ich muss eigentlich nur den eeprom lesen aber da ich am rum experimentieren bin dachte ich mir warum nicht auch schreiben ;D
das mit dem array versuche ich nochmals vllt habe ich da irgendwas übersehen 8)
und das mit der wire.h und i2cmaster.h bib probiere ich mal
vielen dank für die denkanstöße
gruß beni