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

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

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Guardar serie de fibonacci en eeprom y ver en LCD
« Respuesta #15 en: 24 de Junio de 2009, 12:21:27 »
Prueba a imprimir a la vez que vas almacenando el dato en la eeprom, así al menos podrás confirmar que la generación es correcta y el problema está en la escritura / lectura de la eeprom.


Desconectado ramirez

  • PIC16
  • ***
  • Mensajes: 195
Re: Guardar serie de fibonacci en eeprom y ver en LCD
« Respuesta #16 en: 24 de Junio de 2009, 12:57:39 »
He hecho lo que me has dicho, una escritura y su posterior lectura, pero de esta forma también salen cosas raras, el programa que he puesto es el 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 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:
   valor=valor;
   suman1=suman2;
   suman2=valor;
   valor=suman1+suman2;
   write_ext_eeprom(dir,valor);      //proceso de escribir...

   }
   
   lcd_putc("\fFin de escritura en\n24LC256");
   delay_ms(1000);
   lcd_putc("\f>>>Leyendo...\n");
   delay_ms(1000);
   leido=read_ext_eeprom(dir);
   printf(lcd_putc,"\n %d ~ Fibo=  %u ",dir,read_ext_eeprom(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


Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Guardar serie de fibonacci en eeprom y ver en LCD
« Respuesta #17 en: 24 de Junio de 2009, 13:08:37 »
La serie esta se genera bien. Yo lo probé con el virtual terminal:
Código: C
  1. #include <16f648a.h>            //pic a utilizar
  2. #use delay(CLOCK=4000000)         //Fosc=4Mhz
  3. #fuses HS,NOPUT,NOPROTECT,NOBROWNOUT,NOLVP,NOWDT   //comandos para el programador
  4. #define use_portb_lcd TRUE         //utilizar el port b para lcd
  5. #define EEPROM_SDA PIN_A1          //definimos los pines donde...
  6. #define EEPROM_SCL PIN_A0          //la eeprom ira conectada
  7. #include <24256.c>               //libreria de eeprom externa 24LC256
  8. #include <lcd.c>                //libreria de lcd
  9. #use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)
  10.  
  11. ///PROGRAMA
  12. void main(void){
  13.  
  14.    int dir;               //direccion de eeprom a escribir y leer mensajes
  15.    int a;
  16.    int valor=0;
  17.    int suman1=0;
  18.    int suman2=1;
  19.    int leido=0;
  20.    
  21.    printf("\f~ Escribiendo Serie");
  22.    
  23.    for(dir=0;dir<20;dir++){
  24.       delay_ms(100);
  25.       switch(dir){
  26.             case 0:
  27.                   valor=suman1;
  28.                   break;
  29.             case 1:
  30.                   valor=suman2;
  31.                   break;
  32.             case 2:
  33.                   valor=suman1+suman2;
  34.                   break;
  35.             Default:
  36.             suman1=suman2;
  37.             suman2=valor;
  38.             valor=suman1+suman2;
  39.          }
  40.          printf("\n\r %u ~ s1=%u, s2=%u ~ Fibo= %u ",dir,suman1,suman2,valor);
  41.    }
  42.    printf("Fin de Serie");
  43.    }                        //...final

Adjunto una imagen de lo que genera. El problema puede ser la simulación de proteus en lectura y escritura de la eeprom.
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 #18 en: 24 de Junio de 2009, 13:49:34 »
Gracias de nuevo por el interés mostrado, ahora tengo dos puntos si no os importa:
1: a partir del número 14, el valor ya no lo hace bien, esto es debido a que la variable es "int" y solo puedo ver 8 bits (hasta 255), ¿pero si en su lugar pongo una variable tipo "long", ya sería 16 bits?

2: La segunda cuestión que tengo es acerca de virtual terminal, ya que no se como obtenerlo de proteus y no puedo simularlo como lo ha hecho Suky, lo único que he visto son ejemplos del foro, pero no se como hacer un ejemplo.

Os doy las gracias de nuevo


Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Guardar serie de fibonacci en eeprom y ver en LCD
« Respuesta #19 en: 24 de Junio de 2009, 14:52:34 »
Gracias de nuevo por el interés mostrado, ahora tengo dos puntos si no os importa:
1: a partir del número 14, el valor ya no lo hace bien, esto es debido a que la variable es "int" y solo puedo ver 8 bits (hasta 255), ¿pero si en su lugar pongo una variable tipo "long", ya sería 16 bits?

2: La segunda cuestión que tengo es acerca de virtual terminal, ya que no se como obtenerlo de proteus y no puedo simularlo como lo ha hecho Suky, lo único que he visto son ejemplos del foro, pero no se como hacer un ejemplo.

Os doy las gracias de nuevo



1º. Si long es de 16 bits. Así en ese caso necesitarias usar 2 posiciones de la memoria, aparte de separar el long en dos de 8 bits que puede hacerse con make.
Cita de: Ayuda CCS
Syntax:
 i8 = MAKE8(var, offset)
Parameters:
 var is a 16 or 32 bit integer.
offset is a byte offset of 0,1,2 or 3.
Returns:
 An 8 bit integer
Function:
 Extracts the byte at offset from var. Same as: i8 = (((var >> (offset*8)) & 0xff) except it is done with a single byte move.

Después en proteus el virtual terminal esta en la sección de Virtual Instrument Mode.
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 #20 en: 25 de Junio de 2009, 10:53:35 »
Efectivamente, utilizando visual terminal, funcina correctamente. Pero siguiendo con el mismo tema, me ha surgido ahora la duda para utilizar "long", para de esta forma poder ver en la serie hasta el 65535, pero al nombrar la variable: long, obtengo los mismos resultados que si es int. Los únicos cambios que he hecho en el programa son (marcado en rojo):

long valor=0;
.
.
printf("\n\r %u ~ s1=%u, s2=%u ~ Fibo= %Lu ",dir,suman1,suman2,valor);

¿porqué ocurre esto?

De nuevo gracias

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Guardar serie de fibonacci en eeprom y ver en LCD
« Respuesta #21 en: 25 de Junio de 2009, 11:02:41 »
Efectivamente, utilizando visual terminal, funcina correctamente. Pero siguiendo con el mismo tema, me ha surgido ahora la duda para utilizar "long", para de esta forma poder ver en la serie hasta el 65535, pero al nombrar la variable: long, obtengo los mismos resultados que si es int. Los únicos cambios que he hecho en el programa son (marcado en rojo):

long valor=0;
.
.
printf("\n\r %u ~ s1=%u, s2=%u ~ Fibo= %Lu ",dir,suman1,suman2,valor);

¿porqué ocurre esto?

De nuevo gracias
suman1 y suman2 también deben ser log.
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 #22 en: 25 de Junio de 2009, 11:11:04 »
Todo correcto, una vez más gracias por tu colaboración.