Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: matiasferrioli en 13 de Septiembre de 2009, 14:11:38
Título: Problemas con la Eeprom 24c256
Publicado por: matiasferrioli en 13 de Septiembre de 2009, 14:11:38
Hola amigos preciso una mano hice este simple programita que lo que hace es sumar segundos ,minutos, días,años cundo pulso un boton y los guarda en una eeprom 24c256cundo lo suelto soy novato con la programación ccs y simulador isis pero en el isis esto me anda al pelo en mi placa experimentan no cual puede ser la causa y su solución , Aquí va mi código Gracis por cualquier ayuda .
#include <16f876.h>
#fuses HS,NOWDT,NOPROTECT,NOPUT #use delay(clock=4000000) #define LCD_DB4 PIN_B4 #define LCD_DB5 PIN_B5 #define LCD_DB6 PIN_B6 #define LCD_DB7 PIN_B7 #define LCD_RS PIN_B0 #define LCD_RW PIN_B1 #define LCD_E PIN_B2 #define EEPROM_SDA PIN_C4 //definimos los pines donde... #define EEPROM_SCL PIN_C3 //la eeprom ira conectada #include <24256.c> //libreria de eeprom externa 24LC256 #include "flex_lcd_c.c"//libreria q maneja la lcd 2x16 #include <stdlib.h> #use standard_io (a) //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX_VARIABLES_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX int segu=0; int min=0; int hor=0; int16 dias=0; Int ano = 0; int dir=0;
write_ext_eeprom(dir,segu); //proceso de escribir... dir++; delay_ms(10); write_ext_eeprom(dir,min); //proceso de escribir... dir++; delay_ms(10); write_ext_eeprom(dir,hor); //proceso de escribir... dir++; delay_ms(10); write_ext_eeprom(dir,dias); //proceso de escribir... dir++; delay_ms(10); write_ext_eeprom(dir,ano); //proceso de escribir... delay_ms(10); dir=0; } void BorroEeprom() { segu=0; min=0; hor=0; dias=0; ano=0; write_ext_eeprom(dir,segu); //proceso de escribir... delay_ms(5); dir++; write_ext_eeprom(dir,min); //proceso de escribir... delay_ms(5); dir++; write_ext_eeprom(dir,hor); //proceso de escribir... delay_ms(5); dir++; write_ext_eeprom(dir,dias); //proceso de escribir... delay_ms(5); dir++; write_ext_eeprom(dir,ano); //proceso de escribir... delay_ms(5); dir=0; } void SumoTiempo() {
if(segu==60) {
segu=0; min++; // lcd_gotoxy(12,2);// posiciona en lcd mensaje printf(lcd_putc,"%u",min); //Muestra por lcd
}
if(min==60) { min=0; hor++; lcd_gotoxy(8,2);// posiciona en lcd mensaje printf(lcd_putc,"%u",hor); //Muestra por lcd } if(hor==24) { hor=0; dias++; lcd_gotoxy(4,2);// posiciona en lcd mensaje printf(lcd_putc,"%lu",dias); //Muestra por lcd } if(dias==365) { dias=0; ano++; lcd_gotoxy(1,2);// posiciona en lcd mensaje printf(lcd_putc,"%u",ano); //Muestra por lcd } else {
lcd_gotoxy(1,1); lcd_putc("Tiem P Ensendido"); lcd_gotoxy(14,2);// posiciona en lcd mensaje segu++;//suma variable printf(lcd_putc,"%u",segu); //Muestra por lcd
delay_ms(1000);// retrasa 1 segundo milisegundos } }
según la hoja de datos HS es para valores mayores a 4MHz y XT es hasta 4MHz
Entonces te recomiendo que cambies este fuse, y verifiques la correcta conexión de cada pin, y no te olvides los condensadores de 100nF en la alimentación del micro, lcd y memoria, principalmente del micro diría yo, deben estar cerca de esos componentes. Para que la fuente sea más estable también un condensador electrolítico de unos 10 a 100uF entre Vcc y GND.
Y con eso creo que debería estar...
saludos.
Título: Re: Problemas con la Eeprom 24c256
Publicado por: matiasferrioli en 15 de Septiembre de 2009, 09:55:59
Muchas gracias Cryn te lo agradezco mucho voy a hacer los cambio y te cuanto :mrgreen: :mrgreen:
Título: Re: Problemas con la Eeprom 24c256
Publicado por: matiasferrioli en 16 de Septiembre de 2009, 09:43:08
Bueno amigos seguimos igual :( la verdad no se que es lo que le pasa estoy pensando ya que tengo rota la Eeprom . lo que hace es lo siguiente : modifique el ejemplo de el maestro VsZeNeR que introduce 4 mensajes en el Eeprom para mi 16f877 char men1[]="VsZeNeR'05"; //declaracion de... char men2[]="Hola"; char men3[]="Foro"; char men4[]="TODOPIC!"; //...mensajes a escribir y leer por 25LC256 solo me sale "TODOPIC!"; en la posición 0 y lo demás me nada( @) con mis ejemplos me hace lo mismo me grava solo una posiciones es problema mio o la Eepron tiene algún problema cheque la conectivo de pines condensadores resistencias están bien . les doy el ejemplo para que vean gracias por cualquier consejo:
#include <16f877.h> //pic a utilizar #use delay(CLOCK=4000000) //Fosc=4Mhz #fuses XT,NOPUT,NOPROTECT,NOBROWNOUT,NOLVP,NOWDT //comandos para el programador #define use_portb_lcd TRUE //utilizar el port b para lcd #define LCD_DB4 PIN_D4 // #define LCD_DB5 PIN_D5 // definicion de pines para lcd #define LCD_DB6 PIN_D6 // #define LCD_DB7 PIN_D7 // #define LCD_RS PIN_A1 // #define LCD_RW PIN_A2 // #define LCD_E PIN_A3 // #define EEPROM_SDA PIN_C4 //definimos los pines donde... #define EEPROM_SCL PIN_C3 //la eeprom ira conectada #include <24256.c> //libreria de eeprom externa 24LC256 #include "flex_lcd_c.c" // libreria flex_lcd_c.c
///PROGRAMA void main(void){ int dir=0; //direccion de eeprom a escribir y leer mensajes char men1[]="VsZeNeR'05"; //declaracion de... char men2[]="Hola"; char men3[]="Foro"; char men4[]="TODOPIC!"; //...mensajes a escribir y leer por 25LC256 lcd_init(); //inicializa lcd init_ext_eeprom(); //inicializa eeprom
lcd_putc("~ Escribiendo en...\n24LC256\n"); delay_ms(1000); write_ext_eeprom(dir,men1); //proceso de escribir... delay_ms(1000); dir++; write_ext_eeprom(dir,men2); dir++; delay_ms(1000); write_ext_eeprom(dir,men3); dir++; delay_ms(1000); write_ext_eeprom(dir,men4); //...los mensajes en la eeprom externa lcd_putc("\fFin de escritura en\n24LC25"); delay_ms(1500);
lcd_putc("\f>>>Leyendo...\n"); for(dir=0;dir<4;dir++){ //bucle para leer mensajes en eeprom externa y muestra por lcd printf(lcd_putc,"\n %d ~ %s",dir,read_ext_eeprom(dir)); delay_ms(1500); //retraso para que se vea en pantalla los mensajes lcd_putc("\n "); //borrado 2ºlinea de lcd } output_a(0b00); //apago port a lcd_putc("\fFin de lectura!");
Para cada string que vayas a almacenar se debe sumar la posición anterior del contador.
Saludos
Título: Re: Problemas con la Eeprom 24c256
Publicado por: matiasferrioli en 16 de Septiembre de 2009, 19:01:20
Gracias por tu consejo y del el caso de arriba que corrección me podrías decir para que me funcione ? y te cuanto que el ejemplo de VsZeNeR como el mio en el proteus me funciona
Saludos
Título: Re: Problemas con la Eeprom 24c256
Publicado por: MLO__ en 16 de Septiembre de 2009, 19:42:47
Hola.
Al ver el esquema del la conexión de la memoria, parece que la linea SDA no tiene pullup:
(http://img38.imageshack.us/img38/4232/sdam.png)
Saludos
Título: Re: Problemas con la Eeprom 24c256
Publicado por: matiasferrioli en 16 de Septiembre de 2009, 21:06:42
No sabes el tiempo que te estaré agradeciendo ese pequeño detalle que pase por alto muchísimas gracias MLO anda de maravilla jajajaj gracias a todos y asta la siguiete duda Saludos.
Título: Re: Problemas con la Eeprom 24c256
Publicado por: MLO__ en 16 de Septiembre de 2009, 21:28:45
:mrgreen:
Me imagino que debe haber algún jumper para habilitar la resistencia del PullUp no?
Saludos
Título: Re: Problemas con la Eeprom 24c256
Publicado por: matiasferrioli en 16 de Septiembre de 2009, 22:00:35
si y no lo veía porque estaba insertado el lcd y quedaba de bajo que vamos hacer errores de nabato