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