Pages: [1]   Go Down
Author Topic: Problemas com memoria eeprom 24fc256  (Read 958 times)
0 Members and 1 Guest are viewing this topic.
Orduña- Bizkaia
Offline Offline
Sr. Member
****
Karma: 0
Posts: 317
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

http://www.diarioelectronicohoy.com/blog/eeprom-con-i%C2%B2c-bus#more-385

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

« Last Edit: February 22, 2013, 01:40:09 pm by riscking » Logged

Orduña- Bizkaia
Offline Offline
Sr. Member
****
Karma: 0
Posts: 317
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
Code:
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();
  }

Pero con un int no se como hacerlo.
Logged

Ciudad Real
Offline Offline
God Member
*****
Karma: 1
Posts: 751
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenas ¡

Hacía mucho que no participaba, cuestiones de curro.

Es una pregunta típica y vale para muchas aplicaciones, en el playground entá linkeada

http://playground.arduino.cc//Es/FAQ

http://arduino.cc/forum/index.php/topic,69929.0.html

se puede hacer con cualquier tipo de dato, despues de guardarlo en bytes separados cuando lo leas tienes que reconstruirlo.

un saludo
 
Logged

Orduña- Bizkaia
Offline Offline
Sr. Member
****
Karma: 0
Posts: 317
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Code:
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()
  {}
« Last Edit: February 23, 2013, 06:21:39 pm by riscking » Logged

0
Offline Offline
Edison Member
*
Karma: 17
Posts: 1413
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
byte *pDato = (byte *) &ji;

Hola, te importaría explicar esta linea? es que no se que hace y me gustaría entenderla por aprender algo nuevo.

gracias
Logged

* Si preguntas, pon el código de tu programa, hace mucho mas fácil ayudarte. Y me ahorro un mensaje pidiendo que lo hagas.
* Si consigues solucionar tu problema, dedica unos minutos a explicar en tu post como lo conseguiste para beneficio de todos.
* Cambia el 'Subject' de tu hilo y añade 'SOLUCIONADO' cuando hayas llegado a una solución al problema que planteaste.
* Utiliza un 'Subject' para tu hilo que explique de que va el hilo.
Si estas empezando:
* Comienza a usar Arduino
* Guías de iniciación a Arduino
* Ejemplos
* Referencia del Lenguaje
* Conceptos básicos
Guia de usuario de arduino
Tutoriales en Ingles
Si necesitas que alguien te escriba el código: http://www.freelancer.com/  o esta  http://www.guru.com/

Orduña- Bizkaia
Offline Offline
Sr. Member
****
Karma: 0
Posts: 317
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 saque de un post, donde lo comento Valen, yo tampoco soy un experto en el tema pero me ha resultado valido.
http://arduino.cc/forum/index.php/topic,50658.15.html

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.
Logged

Pages: [1]   Go Up
Jump to: