Autor Tema: Problemas al hacer una lectura secuencial de una EEPROM por i2c  (Leído 1921 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado jezus

  • PIC10
  • *
  • Mensajes: 44
Problemas al hacer una lectura secuencial de una EEPROM por i2c
« en: 08 de Septiembre de 2010, 07:10:27 »
Hola:
Tengo un problema con la memoria i2c (en este caso 24C02 pero podría usar otra), la rutina de lectura es la siguiente:

void leepos(int pos){             // Rutina de escritura I2C parcial

   i2c_start();                  // Inicializo comunicación I2C
   i2c_write(0xA0);            // Envio Dirección de dispositivo I2C + R/W
   i2c_write(pos);            // Envio byte a escribir, pos es la posición a partir de la cual quiero leer los siguientes datos
   i2c_stop();                   // Cierro comunicacion
   delay_ms(30);          // Espero a que escriba correctamente

}

int  eplee(){           // Rutina de lectura I2C
   i2c_start();
   i2c_write(0xA1);
   r=i2c_read();//comienza la lectura.
   i2c_stop();
   delay_ms(32);
   return(r);
}


El caso es que llamo a la rutina eplee()  en un bucle for para que lea secuencialmente las posiciones de memoria, y hace una lectura correcta y la siguiente lee 0xFF (lo cual esta mal) una bien otra mal, una bien otra mal.....y asi continuamente,¿sabeis que puede estar pasando?

Desconectado alcubo01

  • PIC12
  • **
  • Mensajes: 69
Re: Problemas al hacer una lectura secuencial de una EEPROM por i2c
« Respuesta #1 en: 08 de Septiembre de 2010, 07:34:45 »


 Prueba a enviarle ACK despues de cada lectura.

Desconectado jezus

  • PIC10
  • *
  • Mensajes: 44
Re: Problemas al hacer una lectura secuencial de una EEPROM por i2c
« Respuesta #2 en: 08 de Septiembre de 2010, 09:01:16 »


 Prueba a enviarle ACK despues de cada lectura.

Perfecto!muchas gracias

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problemas al hacer una lectura secuencial de una EEPROM por i2c
« Respuesta #3 en: 08 de Septiembre de 2010, 10:04:20 »
Si lees una sola vez debes colocar i2c_read(0);


Saludos!
No contesto mensajes privados, las consultas en el foro


 

anything