TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: gapsna 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:
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:
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.
-
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.
-
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.
-
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!
-
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?
-
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!
-
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