Autor Tema: Guardar serie de fibonacci en eeprom y ver en LCD  (Leído 9040 veces)

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

Desconectado ramirez

  • PIC16
  • ***
  • Mensajes: 195
Guardar serie de fibonacci en eeprom y ver en LCD
« en: 23 de Junio de 2009, 11:30:26 »
Buenas tardes a todos, sigo en mi intento de aprender C, y  ahora estoy intentando hacer un ejemplo donde guarde la serie de fibonacci (0,1, 1, 2, 3, 5,8, 13....)(el número siguiente es la suma de los dos anteriores) en una eeprom externa y luego los pueda visualizar en un LDC. Adjunto están los ficheros, y como podéis ver no funciona correctamente. ¿Qué errores estoy cometiendo?

Otra vez más gracias por vuestra ayuda.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Guardar serie de fibonacci en eeprom y ver en LCD
« Respuesta #1 en: 23 de Junio de 2009, 11:51:43 »
No veo errores en el código fuente, pero no tengo Proteus para poder simularlo. ¿Puedes describir el fallo o pegar un pantallazo del resultado?

Desconectado ramirez

  • PIC16
  • ***
  • Mensajes: 195
Re: Guardar serie de fibonacci en eeprom y ver en LCD
« Respuesta #2 en: 23 de Junio de 2009, 12:14:48 »
En el programa hay dos errores, uno que es como se visualiza en la pantalla los mensajes, ya que veo de forma intermitenta "Escribiendo en ...." y Fin de escritua...", y lo que desearía es que se viera en pantalla primero "Escribiendo en..", y cuando estén todos los datos escritos un mensaje final de "Fin de escritura..".

El segundo error es que no dan los datos reales de la serie, ya que sale: 0, 1, 2, 5,11, 19, 39, 3, -128,0 28, 1 8, 0 8, ........ Como podeis ver al final (en los últimos números), creo que el 8 se queda en pantalla del número anterior, y se debería de borrar.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Guardar serie de fibonacci en eeprom y ver en LCD
« Respuesta #3 en: 23 de Junio de 2009, 12:15:28 »
Cual es la falla? Has colocado las resistencias pull-up a la memoria? Después hay un error que en la simulación no traerá problemas, pero si al armarlo. Estas definiendo el oscilador como HS y debería ser XT por usar un cristal de 4MHz.
No contesto mensajes privados, las consultas en el foro

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Guardar serie de fibonacci en eeprom y ver en LCD
« Respuesta #4 en: 23 de Junio de 2009, 12:18:52 »
El parpadeo no veo porque pueda ser, luego que se vea el 8, queda de 128. Agrégale un espacio más en Fibo= %d así te borra ese 8.
No contesto mensajes privados, las consultas en el foro

Desconectado ramirez

  • PIC16
  • ***
  • Mensajes: 195
Re: Guardar serie de fibonacci en eeprom y ver en LCD
« Respuesta #5 en: 23 de Junio de 2009, 12:25:20 »
Muchas gracias, ¿pero qué opinas sobre que no se graban los números adecuados en cada posición de memoria?

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Guardar serie de fibonacci en eeprom y ver en LCD
« Respuesta #6 en: 23 de Junio de 2009, 12:42:22 »
Para que no se vea la intermitencia entre mensajes, esta parte del código tiene que ir dentro de un for:  :shock: Editado, me equivoque  :mrgreen: Ya esta en un for!



Para que de correcta la serie tienes que invertir esta parte:
Código: C
  1. suman2=valor;
  2.    suman1=suman2;

Debe ir:
Código: C
  1. suman1=suman2;
  2.    suman2=valor;

« Última modificación: 23 de Junio de 2009, 12:52:00 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Guardar serie de fibonacci en eeprom y ver en LCD
« Respuesta #7 en: 23 de Junio de 2009, 12:56:16 »
He descubierto otro error, después de
 case 2:
         valor=suman1+suman2;
         write_ext_eeprom(dir,valor);

debería haber un break, porque de lo contrario te ejecutará el trozo que está en la sección default.

Desconectado ramirez

  • PIC16
  • ***
  • Mensajes: 195
Re: Guardar serie de fibonacci en eeprom y ver en LCD
« Respuesta #8 en: 23 de Junio de 2009, 13:24:17 »
Deben de existir más errores, ya que aún no funiona correctamente. Gracias de nuevo por el interés que estáis mostrando

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Guardar serie de fibonacci en eeprom y ver en LCD
« Respuesta #9 en: 23 de Junio de 2009, 14:15:12 »
Cuales son lo problemas que tiene?
Encontré otro, este mensaje:
Código: C
  1. lcd_putc("\f~ Escribiendo en...\n24LC256\n");
Debe ir antes del primer for, por eso las titilaciones del mensaje.

Luego, este fuera del primer for:
Código: C
  1. lcd_putc("\fFin de escritura en\n24LC25");
  2.          delay_ms(150);

Bueno, como ves lo único que falta es concentración al escribir el código :wink:
No contesto mensajes privados, las consultas en el foro

Desconectado ramirez

  • PIC16
  • ***
  • Mensajes: 195
Re: Guardar serie de fibonacci en eeprom y ver en LCD
« Respuesta #10 en: 23 de Junio de 2009, 14:30:25 »
Los valores que se obtienen de la serie son: 0,1,1,3, 3,15, 11, ......, y estos valores no corresponen con la serie de fibonacci

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Guardar serie de fibonacci en eeprom y ver en LCD
« Respuesta #11 en: 23 de Junio de 2009, 15:25:51 »
Hicistes el cambio:
Código: C
  1. suman1=suman2;
  2.    suman2=valor;

Yo probé si se genera bien la serie y lo realiza correctamente. Tienes que cambiar a %u para que muestre el byte sin signo, sino como máximo podrás mostrar hasta 127, después ya lo tomará como un numero negativo. Y como utilizas 8 bits, podrás mostrar un numero inferior a 255.


No contesto mensajes privados, las consultas en el foro

Desconectado ramirez

  • PIC16
  • ***
  • Mensajes: 195
Re: Guardar serie de fibonacci en eeprom y ver en LCD
« Respuesta #12 en: 24 de Junio de 2009, 11:22:16 »
Hola de nuevo, aún no sale la serie correcta, ya que obtengo: 0, 1, 1, 2, 3, 5, 8, 23, 27, 79, 47, 119, 145......, y como veis a partir del 8 comienza a fallar. La última versión es la siguiente:

/////////////////////////////////////////////////////////////////////////////////
////////////   SERIE FIBONACCI    //////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///  0, 1, 1, 2, 3, 5, 8 ........                                            ///

#include <16f648a.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 EEPROM_SDA PIN_A1          //definimos los pines donde...
#define EEPROM_SCL PIN_A0          //la eeprom ira conectada
#include <24256.c>               //libreria de eeprom externa 24LC256
#include <lcd.c>                //libreria de lcd

///PROGRAMA
void main(void){

   int dir;               //direccion de eeprom a escribir y leer mensajes
   int a;
   int valor=0;
   int suman1=0;
   int suman2=1;
   int leido=0;

   lcd_init();             //inicializa lcd
   init_ext_eeprom();          //inicializa eeprom

   lcd_putc("\f~ Escribiendo en...\n24LC256\n");
   delay_ms(100);
   
 for(dir=0;dir<20;dir++)
   {
   
switch(dir){
   case 0:
         write_ext_eeprom(dir,suman1);
         break;
   case 1:
         write_ext_eeprom(dir,suman2);
         break;
   case 2:
         valor=suman1+suman2;
         write_ext_eeprom(dir,valor);
         break;

   Default:

   suman1=suman2;
   suman2=valor;
   valor=suman1+suman2;
   write_ext_eeprom(dir,valor);      //proceso de escribir...


   }
   
   }
   
   lcd_putc("\fFin de escritura en\n24LC256");
   delay_ms(1500);
   lcd_putc("\f>>>Leyendo...\n");
   
    for(a=0;a<20;a++)   {   //bucle para leer mensajes en eeprom externa y muestra por lcd
   leido=read_ext_eeprom(a);

      printf(lcd_putc,"\n %d ~ Fibo=  %u ",a,leido);
      delay_ms(1000);                  //retraso para que se vea en pantalla los mensajes
   }
   output_a(0b00);                     //apago port a
   lcd_putc("\fFin de lectura!");




      }                        //...final


Gracias otra vez por vuestro interés y colaboración

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Guardar serie de fibonacci en eeprom y ver en LCD
« Respuesta #13 en: 24 de Junio de 2009, 11:37:02 »
Hola de nuevo, aún no sale la serie correcta, ya que obtengo: 0, 1, 1, 2, 3, 5, 8, 23, 27, 79, 47, 119, 145......, y como veis a partir del 8 comienza a fallar. La última versión es la siguiente:
La generación de la serie yo la probé y funciona correctamente, para verificarlo envíala directamente al Lcd. Despues en lo demás no veo errores  :?
« Última modificación: 24 de Junio de 2009, 11:41:52 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado ramirez

  • PIC16
  • ***
  • Mensajes: 195
Re: Guardar serie de fibonacci en eeprom y ver en LCD
« Respuesta #14 en: 24 de Junio de 2009, 12:17:37 »
He probado leer directamente, leyendo la posición 7 dela eeprom que debería ser el valor 13, pero resulta que a partir de a=7, el valor que debe ser constante y con el valor 13, cambia. Lo que he cambiado de código es lo siguiente (lo marcado en rojo):

for(a=0;a<20;a++)   {   //bucle para leer mensajes en eeprom externa y muestra por lcd
   leido=read_ext_eeprom(a);

      printf(lcd_putc,"\n %d ~ Fibo=  %u ",a,read_ext_eeprom(7));
      delay_ms(1000);                  //retraso para que se vea en pantalla los mensajes
   }