Hola, hace unos mese que tengo el arduino abandonado, pedi unas memorias y hoy me he decidido a montarlas, siguiendo los pasos de este hilo que no son muchos, y dado que su codigo es antiguo lo he probado en la version 0.22 pero no consigo que me vaya
pongo el codigo, el caso es que me sale todo el rato ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ y probando otro codigo me ponia " wire no abailable", porque puede fallar??
ARREGLADO: Como soy un alicate, habia puesto los cables en los pines digitales y no analogicos, xDDDD
Por otro lado estoy teniendo problemas para pasar un int superior a 255 osea 1 byte, ya que en cada posicion de memoria puede guardar 1 byte como puedo guardar un numero mayor de 255???
Asi serie con una cadena de texto:
char cadena[] = "hola mundo desde una eeprom"; // cadena a escribir
Wire.begin(); // es obligatorio inicializar la conexion
Serial.begin(9600);
I²C_eeprom_write_page(0x50, 0, (byte *)cadena, sizeof(cadena));
void i2c_eeprom_write_page( int deviceaddress, unsigned int eeaddresspage, byte* data, byte length ) {
Wire.beginTransmission(deviceaddress);
Wire.write((int)(eeaddresspage >> 8)); // MSB
Wire.write((int)(eeaddresspage & 0xFF)); // LSB
byte c;
for ( c = 0; c < length; c++)
Wire.write(data[c]);
Wire.endTransmission();
}
Muchas gracias SrDonGato, me ha costao pero el escribir lo he resuelto así, no se si será la mejor manera pero esque he probado de todo y no sabia como hacerlo, ahora me falta el leerlo todo a la vez pero poco a poco, si se puede mejorar soy todo oidos.
void i2c_eeprom_write_data(int device, unsigned int add, byte *data)
{
byte err;
byte cont=sizeof(data); //compruebo el tamaño de los datos por si hay que grabar en varias zonas de memoria
for(err=0;err<cont;err++){
Wire.beginTransmission(device);
Wire.write((int)(add >> 8)); // left-part of pointer address
Wire.write((int)(add & 0xFF)); // and the right
Wire.write(data[err]); //los datos en bytes hacia donde apunta el puntero de datos
Wire.endTransmission ();
delay(10);
add++; // incremento en uno la direccion de memoriapara añadir otro dato en caso de haberlo
}
}
void setup()
{
//char somedata[] = "this is data from the eeprom"; // data to write
int somedata=26;
Wire.begin(); // initialise the connection
Serial.begin(9600);
int ji=820;
byte *pDato = (byte *) &ji;
Serial.println("Memory written");
i2c_eeprom_write_data(0x50, 1,pDato);
delay(10); //add a small delay
Serial.println("Reading data...");
d=readData(0x50,1);
Serial.println(d, HEX);
d=readData(0x50,2);
Serial.println(d, HEX);
}
void loop()
{}
Es el Puntero a byte (o a char tambien puede ser), para manejar el dato recibido, byte a byte.
por eso luego puedo hacer un for y escribir los datos uno a uno como si fuese un array.
Wire.write(data[err]);
Lo que no me queda claro es lo del byte alto y byte bajo, para escribir en la memoria, se supone que se puede mandar los dos a la vez, y yo de la forma que lo he puesto lo hago en dos pasos, pero como tienen que tener diferente direccion de memoria pues me tiene confundido para acerlo a la vez.