Autor Tema: La eeprom externa funciona raro???  (Leído 2161 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado gapsna

  • PIC10
  • *
  • Mensajes: 20
La eeprom externa funciona raro???
« en: 17 de Mayo de 2011, 02:14:55 »
Hola a todos, estoy tratando de grabar y leer datos de una eeprom 24C02, sin embargo, no se que estoy haciendo mal que no funciona bien.

cuando pongo el siguiente codigo:

Código: [Seleccionar]
for(i=0;i<12;i++){
      latitud[i] = '1';
   }
   i=0;
   for(i=0;i<13;i++){
      longitud[i] = '2';
   }
   i=0;
   i2c_start();
   i2c_write(0b10101110);
   //delay_ms(2);
   i2c_write(0b00000000);
   //delay_ms(2);
   i2c_write('A');
   i2c_write('B');
   i2c_write('C');
   i2c_write('D');
   i2c_write('E');
   i2c_write('F');
   i2c_write('G');
   i2c_write('H');
   i2c_write('I');
   i2c_write('J');
   i2c_write('K');
   i2c_stop();
  ini_lcd();
  i2c_start();
  i2c_write(0b10101111);
  i2c_write(0b00000000);
  latitud[0]=i2c_read();
  latitud[1]=i2c_read();
  latitud[2]=i2c_read();
  latitud[3]=i2c_read();
  latitud[4]=i2c_read();
  latitud[5]=i2c_read();
  latitud[6]=i2c_read();
  latitud[7]=i2c_read();
  latitud[8]=i2c_read();
  latitud[9]=i2c_read();
  latitud[10]=i2c_read();
  i2c_stop();
 
  for(i=0;i<12;i++){
      escribo(latitud[i]);
   }

cuando esta asi, imprime caracteres nulos (todos los cuadritos negros) en el lcd, menos el ultimo que es 1 (ya que ese no lo leo del i2c sino que lo dejo asi.

y cuando pongo el siguiente codigo:

Código: [Seleccionar]
for(i=0;i<12;i++){
      latitud[i] = '1';
   }
   i=0;
   for(i=0;i<13;i++){
      longitud[i] = '2';
   }
   i=0;
   i2c_start();
   i2c_write(0b10101110);
   //delay_ms(2);
   i2c_write(0b00000000);
   //delay_ms(2);
   i2c_write('A');
   i2c_write('B');
   i2c_write('C');
   i2c_write('D');
   i2c_write('E');
   i2c_write('F');
   i2c_write('G');
   i2c_write('H');
   i2c_write('I');
   i2c_write('J');
   i2c_write('K');
   i2c_stop();
  ini_lcd();
  i2c_start();
  i2c_write(0b10101111);
 //i2c_write(0b00000000);  ELIMINO LA QUE EN TEORIA ES LA DIRECCION DE DONDE QUIERO INICIAR A LEER
  latitud[0]=i2c_read();
  latitud[1]=i2c_read();
  latitud[2]=i2c_read();
  latitud[3]=i2c_read();
  latitud[4]=i2c_read();
  latitud[5]=i2c_read();
  latitud[6]=i2c_read();
  latitud[7]=i2c_read();
  latitud[8]=i2c_read();
  latitud[9]=i2c_read();
  latitud[10]=i2c_read();
  i2c_stop();
 
  for(i=0;i<12;i++){
      escribo(latitud[i]);
   }

me pinta lo siguiente en el lcd: " GHIJ@@@@@@1 " donde los @ son el caracter nulo.

Alguien ha trabajado con estas eeprom y me puede dar una manito? uso el CCS para compilar el codigo.

Muchas gracias.

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Re: La eeprom externa funciona raro???
« Respuesta #1 en: 17 de Mayo de 2011, 08:29:32 »
Si estás usando CCS, tienes unas librerias para manejar una eeprom externa. Utiliza esas funciones, está en el directorio donde tienes instalado el CCS, en la carpeta drivers, y la libreria se llama 2402.c, la tienes que incluir en tu programa con: #include <2402.c>

Saludos.
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado gapsna

  • PIC10
  • *
  • Mensajes: 20
Re: La eeprom externa funciona raro???
« Respuesta #2 en: 17 de Mayo de 2011, 11:12:30 »
Si estás usando CCS, tienes unas librerias para manejar una eeprom externa. Utiliza esas funciones, está en el directorio donde tienes instalado el CCS, en la carpeta drivers, y la libreria se llama 2402.c, la tienes que incluir en tu programa con: #include <2402.c>

Saludos.

aaaaaaaaaaaaaaaaaaaaaaaaaaaaah esa libreria funciona perfectooooooooooooooo muchas gracias.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: La eeprom externa funciona raro???
« Respuesta #3 en: 17 de Mayo de 2011, 11:35:54 »
El problema sucede que al escribir un byte se debe esperar unos 5 ms para que la memoria guarde el dato, y recién después esta disponible para recibir mas datos. Si necesitas algo más eficiente, podes escribir por páginas.


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

Desconectado gapsna

  • PIC10
  • *
  • Mensajes: 20
Re: La eeprom externa funciona raro???
« Respuesta #4 en: 17 de Mayo de 2011, 11:45:16 »
El problema sucede que al escribir un byte se debe esperar unos 5 ms para que la memoria guarde el dato, y recién después esta disponible para recibir mas datos. Si necesitas algo más eficiente, podes escribir por páginas.


Saludos!

Hola suky, como puedo escribir por paginas?

A demas, acoplando la parte de la eeprom al otro programa que se encarga de leer, seleccionar y mostrar en el lcd la latitud y longitud enviada por serial (protocolo rs232), solo con poner el comando init_ext_eeprom(); me bloquea la lectura del serial. a pesar de que los pines que pone en float ese comando los uso exclusivamente para la eeprom.

Alguno sabe por que pueda suceder eso?

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: La eeprom externa funciona raro???
« Respuesta #5 en: 17 de Mayo de 2011, 13:29:14 »
Escribir por pagina es exactamente igual, solo que tienes que enviar 8,16,32 o 64 bytes de forma consecutiva, el tamaño depende de la memoria. En el datasheet esta bastante bien explicado. Respecto al otro tema, colocaste las resistencias pull-up?


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

Desconectado gapsna

  • PIC10
  • *
  • Mensajes: 20
Re: La eeprom externa funciona raro???
« Respuesta #6 en: 17 de Mayo de 2011, 21:35:05 »
Escribir por pagina es exactamente igual, solo que tienes que enviar 8,16,32 o 64 bytes de forma consecutiva, el tamaño depende de la memoria. En el datasheet esta bastante bien explicado. Respecto al otro tema, colocaste las resistencias pull-up?


Saludos!

Ah ok. Si, tengo las 2 resistencias de 10k a 5V, en el SDA y el SCL