Autor Tema: Problemas con la Eeprom 24c256  (Leído 3732 veces)

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

Desconectado matiasferrioli

  • PIC10
  • *
  • Mensajes: 12
Problemas con la Eeprom 24c256
« 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; 

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX_FUNCIONES_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
void LeoEeprom ()
{

delay_ms(1);
  segu=read_ext_eeprom(dir);
    dir++;
     delay_ms(10);
       min=read_ext_eeprom(dir);
        dir++;
         delay_ms(10);
          hor=read_ext_eeprom(dir);
           dir++;
            delay_ms(10);
             dias=read_ext_eeprom(dir);
              dir++;
               delay_ms(10);
                 ano=read_ext_eeprom(dir);
                  dir=0;
}
void Muetrolcd()
{

 lcd_putc("\f"); //Limpia pantalla
   lcd_gotoxy(10,1);
     delay_ms(15);
      printf(lcd_putc,"%2u",read_ext_eeprom(dir));
       lcd_gotoxy(8,1);
        dir++;
         delay_ms(15);
          printf(lcd_putc,"%2u.",read_ext_eeprom(dir));
           delay_ms(15);
            dir++;
             lcd_gotoxy(4,1);
               delay_ms(15);
                printf(lcd_putc,"%2u.",read_ext_eeprom(dir));
                 delay_ms(15);
                  dir++;
                   lcd_gotoxy(1,1);
                    delay_ms(15);
                     printf(lcd_putc,"%2ul.",read_ext_eeprom(dir));
                      delay_ms(15);
                       dir++;
                        lcd_gotoxy(1,1);
                         delay_ms(15);
                          printf(lcd_putc,"%2u.",read_ext_eeprom(dir));
                            delay_ms(15);
                              dir=0;
}
void GravoEeprom()
{

 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
}
}

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX_PROGRAMA_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
void main()
{

 lcd_init();
  init_ext_eeprom();
   LeoEeprom ();

 
while(true)
{
 if (input(pin_a2))
 {
   BorroEeprom();
 }
if (input(pin_a0))
 {
  SumoTiempo();
 }

else
 {
  GravoEeprom();
 }
if (input(pin_a1))
 {
   Muetrolcd();
 }
 
 }
}

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Problemas con la Eeprom 24c256
« Respuesta #1 en: 14 de Septiembre de 2009, 20:40:35 »
Si aparentemente funciona en tu simulación tendría que funcionar físicamente, pero... veo un leve error que quizá el proteus no lo toma en cuenta:

#fuses  HS,NOWDT,NOPROTECT,NOPUT
#use delay(clock=4000000)

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

Desconectado matiasferrioli

  • PIC10
  • *
  • Mensajes: 12
Re: Problemas con la Eeprom 24c256
« Respuesta #2 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:

Desconectado matiasferrioli

  • PIC10
  • *
  • Mensajes: 12
Re: Problemas con la Eeprom 24c256
« Respuesta #3 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!");
   
   for(;;){                     //animacion...
      for(dir=1;dir<8;dir++){
         lcd_gotoxy(dir,2);
         lcd_putc("VsZeNeR'05");
         delay_ms(200);
         lcd_putc("\n                ");
         }
      for(dir=6;dir>1;dir--){
         lcd_gotoxy(dir,2);
         lcd_putc("VsZeNeR'05");
         delay_ms(200);
         lcd_putc("\n                ");
         }
      }                        //...final         
}

Desconectado El_Guitre

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1046
Re: Problemas con la Eeprom 24c256
« Respuesta #4 en: 16 de Septiembre de 2009, 10:06:10 »
tienes puestas las resistencias de Pull Up en las lineas de datos de la memoria? De que valores son?

Desconectado matiasferrioli

  • PIC10
  • *
  • Mensajes: 12
Re: Problemas con la Eeprom 24c256
« Respuesta #5 en: 16 de Septiembre de 2009, 10:34:47 »
Si son de 4k7 creo que etan bien  biene con la placa experimental te paso el pdf
 la pregunta es estoy haciendo bien las cosas según el programa ?

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Problemas con la Eeprom 24c256
« Respuesta #6 en: 16 de Septiembre de 2009, 11:01:11 »
Hola.

Pues, tal como esta la rutina de escritura de la EEPROM, no va a pasarte todo el string a la memoria. Habría que hacer algo asi:

Código: C#
  1. for(i=0;i<sizeof(men1);i++)
  2.  write_ext_eeprom(i,men1[i]);

Para cada string que vayas a almacenar se debe sumar la posición anterior del contador.

Saludos
El papel lo aguanta todo

Desconectado matiasferrioli

  • PIC10
  • *
  • Mensajes: 12
Re: Problemas con la Eeprom 24c256
« Respuesta #7 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
 

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Problemas con la Eeprom 24c256
« Respuesta #8 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:



Saludos
El papel lo aguanta todo

Desconectado matiasferrioli

  • PIC10
  • *
  • Mensajes: 12
Re: Problemas con la Eeprom 24c256
« Respuesta #9 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.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Problemas con la Eeprom 24c256
« Respuesta #10 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
El papel lo aguanta todo

Desconectado matiasferrioli

  • PIC10
  • *
  • Mensajes: 12
Re: Problemas con la Eeprom 24c256
« Respuesta #11 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

Saludos.


 

anything