Autor Tema: codigo para guardar y leer en eeprom solucionado  (Leído 2202 veces)

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

Desconectado Mikro-77

  • PIC12
  • **
  • Mensajes: 93
codigo para guardar y leer en eeprom solucionado
« en: 08 de Mayo de 2013, 20:20:29 »
Hola estoy trabado en un codigo para grabar y leer en la eeprom estoy experimentando para hacer lo siguiente:

1° con un botón (botón 1)recorrer letra por letra el abecedario o parte de este!
2° con otro botón (botón 2) grabar la letra en este caso en que quedo al soltar botón1
3° con el botón (botón 3) leer la letra

tengo este codigo y hasta que me conteste alguien puede que ya alla cambiado

Código: [Seleccionar]
#include <16f648a.h>            //pic a utilizar          
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP      //ordenes para el programador
#use delay (clock=4000000)         //Fosc=4Mhz
#define use_portb_lcd TRUE         //definir portb lcd
#include<lcd.c>                  //libreria manejo lcd
 
///PROGRAMA
void main(void)  
{
   char LAST_VOLUME=0,volume;      //variables de direccion escritura eeprom y mensaje    
   lcd_init();                  //inicializa lcd
   while (true)
   {
  
   //LEE LO GRABADO
   if (input(pin_A2))
   {
    for(LAST_VOLUME=0;LAST_VOLUME<4;LAST_VOLUME++){   //bucle que recorre las posiciones de eeprom
      volume = read_EEPROM (LAST_VOLUME);            //almacena mensaje de la direccion eeprom
      printf(lcd_putc,"%s",volume) ;               //muestra mensaje por pantalla lcd
      delay_ms(500);
      lcd_putc("\f" );                           //borra pantalla lcd
      printf(lcd_putc,"%s",volume) ;}
   }
  
   // GRABA
   if (input(pin_A1))
   {
     char abecedario;
     write_eeprom(LAST_VOLUME,abecedario);   //escritura de los mensajes...
     //LAST_VOLUME++;
     lcd_gotoxy(6,1);
     printf(lcd_putc,"Grabado");
   }
  
  
   // ESCRIBE ABECEDARIO
   if (input(pin_A0))
   {
    //****************************
     char abecedario[27]={" ""a""b""c""d""e""f""g""h""i""j""k""l""m""n""o""p""q""r""s""t""u""v""w""x""y""z"},x,y=1;
   lcd_init();         //inicializa lcd
   printf(lcd_putc,"\f" ) ;   //borra pantalla del lcd
   x++;
   printf(lcd_putc,"%c",abecedario[ x ]);   //muestra por pantalla el caracter
   delay_ms(300);
   y=1;               //restablece indice
  
   }
   }
}

bueno antes que me digan que hay ejemplos, esto lo saque de los ejemplos pero modifique porque quiero entender paso por paso y porque quiero implementarlo en otro codigo, pero no se porque ami no me funciona y veo que hay muchos que an preguntado en este foro y no les an contestado! asi que si no me contestan esta todo bien! , tengan en cuenta que no conozco mucho solo quiero saber las instrucciones para guardar una o varias variables en la eeprom interna del pic!

saludos!
« Última modificación: 12 de Mayo de 2013, 14:41:18 por Mikro-77 »
// si quieres entender el universo, piensa en energia, frecuencia y vibración. Nikola Tesla.

// Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado Mikro-77

  • PIC12
  • **
  • Mensajes: 93
Re: ayuda con codigo para guardar y leer en eeprom
« Respuesta #1 en: 09 de Mayo de 2013, 22:52:41 »
Bueno si alguien me quiere dar una mano no me voy a enojar he ?!   :( y modifique las ultimas palabras de mi primer comentario por si alguien quiere leerlo...
« Última modificación: 09 de Mayo de 2013, 22:57:51 por Mikro-77 »
// si quieres entender el universo, piensa en energia, frecuencia y vibración. Nikola Tesla.

// Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado Mikro-77

  • PIC12
  • **
  • Mensajes: 93
Re: ayuda con codigo para guardar y leer en eeprom
« Respuesta #2 en: 10 de Mayo de 2013, 20:45:48 »
Hola volvi para dejar mi comentario y la solucion a mi problema despues de buscar y buscar y a fuerza de prueba y error (con otros codigos o el mio) me di cuenta que tenia problemas con las variables pero me costo mucho entender esto simplemente porque no entiendo nada pero tenia muchas ganas de que funcione y es asi que algo me posee y me quedo hasta altas horas de la noche por mas que tenga que dormir menos de 5 horas aveces hasta encontrar la solucion y al volver del trabajo igual, aveces reconozco que descuido muchas cosas pero es satisfactorio para mi encontrar una solucion ya sea con ustedes aunque me digan simplemente que esta todo mal ya es un gran aporte para mi! el codigo que creo que funciona bien es este y digo creo porque me gustaria que opinen si esta bien o mal o falta algo o sobra algo...

Código: [Seleccionar]
#include <16f648a.h>            //pic a utilizar          
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP      //ordenes para el programador
#use delay (clock=4000000)         //Fosc=4Mhz
#define use_portb_lcd TRUE         //definir portb lcd

#define LAST_VOLUME 10

#include<lcd.c>                  //libreria manejo lcd

char abecedario123;
char abecedario123456;

///PROGRAMA
void main(void)

   {char abecedario[27]={" ""a""b""c""d""e""f""g""h""i""j""k""l""m""n""o""p""q""r""s""t""u""v""w""x""y""z"},x,y=1;   //tabla y variables definidas
  
   delay_ms(100);
   lcd_init();

   while (true)
   {

   //LEE LO GRABADO
   if (input(pin_A2))
   {
      printf(lcd_putc,"\f" ) ;
      abecedario123 = read_eeprom(0);
      
      lcd_gotoxy(2,1);
      printf(lcd_putc,"valor guardado");
      
      lcd_gotoxy(8,2);
      printf(lcd_putc,"%c",abecedario123);
      
      delay_ms(1000);
   }
  
   // GRABA
   if (input(pin_A1))
   {  
   printf(lcd_putc,"\f" ) ;
   lcd_gotoxy(6,1);
   write_eeprom(0, abecedario123456);
   printf(lcd_putc,"Grabado");
   }
  
   // ESCRIBE ABECEDARIO
   if (input(pin_A0))
   {
   lcd_init();         //inicializa lcd
   {                        
   x++;
   {            //bucle para mostrar digito
      lcd_gotoxy(1,1);
      printf(lcd_putc,"escribe letra : ");
      
      lcd_gotoxy(8,2);  
      printf(lcd_putc,"%c",abecedario[ x ]);   //muestra por pantalla el caracter
      abecedario123456=abecedario[x];
      delay_ms(200);              
      }
   y=1;               //restablece indice
   }
   }
   }  
}

este es mi pequeño aporte ya que para un nivel como el mio seguro que ahora si o si le van a entender  :D
// si quieres entender el universo, piensa en energia, frecuencia y vibración. Nikola Tesla.

// Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado Mikro-77

  • PIC12
  • **
  • Mensajes: 93
Re: ayuda con codigo para guardar y leer en eeprom
« Respuesta #3 en: 12 de Mayo de 2013, 14:40:28 »
Hola estos ultimos dos dias e estado intentando guardat numeros flotantes en la eeprom del pic (es lo que realmente me interesaba) sin resultados positivos hasta ahora y resulta que estaba usando la libreria lib_int_eeprom.c que avia leido que funcionaba pero esa libreria a simple vista se nota que era una copia esacta que fue modificada en algun momento y la original es internal_eeprom.c de la carpeta drivers de ccs, asi que aca pongo mi humilde ejemplo, que creo que a alguien le ira a servir y de paso aconsejar que no usen la libreria lib_int_eeprom.c que me dio dolores de cabeza!  :?

Código: [Seleccionar]
#include <16f648a.h>            //pic a utilizar          
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP      //ordenes para el programador
#use delay (clock=4000000)         //Fosc=4Mhz
#define use_portb_lcd TRUE         //definir portb lcd
#define LAST_VOLUME 10
#include<lcd.c>                  //libreria manejo lcd
//#include <lib_int_eeprom.c>
#include <internal_eeprom.c>

float punto_flotante;
float numero;

///PROGRAMA
void main(void)

{
delay_ms(20);
lcd_init();
      
   while (true)
   {
      // cuenta en el lcd
      if (input(pin_A0))
      {  
          punto_flotante=punto_flotante + 0.1;
          delay_ms(50);
          lcd_gotoxy(8,2);
          printf(lcd_putc,"%f",punto_flotante);
      }  

      // Graba
      if (input(pin_A1))
      {
          delay_ms(50);
          write_float_eeprom(00, punto_flotante);
          
      }

      // Lee lo grabado
      if (input(pin_A2))
      {
          printf(lcd_putc,"\f" ) ;
          delay_ms(50);
          numero = read_float_eeprom(00);
          
          lcd_gotoxy(2,1);
          printf(lcd_putc,"valor guardado");
          lcd_gotoxy(8,2);
          printf(lcd_putc,"%f",numero);
          delay_ms(150);
      }

   }
}

Pd: espero criticas asi eso me va a yudar a crecer en la programacion!!!  :-/

saludos !
« Última modificación: 12 de Mayo de 2013, 14:43:17 por Mikro-77 »
// si quieres entender el universo, piensa en energia, frecuencia y vibración. Nikola Tesla.

// Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.