Autor Tema: problema al usar la libreria internal_eeprom.c  (Leído 2207 veces)

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

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
problema al usar la libreria internal_eeprom.c
« en: 08 de Noviembre de 2009, 22:49:28 »
Amigos: estoy tratando de guardar un float en la eeprom de un pic 18f4620 y no puedo.

aqui está el pedazo de programa:basicamente es una eleccion de un dato a traves de 2 entradas que al ser pulsadas suben en 0.5 o bajan el valor de seteo de una altura .cuando ese seteo lo quiero guardar en la eeprom , me tira el valor 133 independiente del seteo que haga( probé colocarle una constante en lugar de la variable pero hace lo mismo

void alturas ( void )
{   

       
    While ( seleccion == 3 )
    {
 
      set_adc_channel( 3 );//an3 de altura
      delay_us(10);
      valtura = read_adc( );//variable que asigno a la entrada
      if(valtura > 254 )valtura = 254 ;
 
 
 
 
       glcd_fillScreen ( BLANCO ) ;
       glcd_rect( 13, 1, 110, 9, on , on );//barra
       txt_at ( 15, 2 , 1 , blanco ) ; printf ( glcd_text , "ajuste de altura" ) ;
       
       if ( set_altura > 99 ) set_altura = 99 ;//valores maximos y minimos
       else if ( set_altura < 66 ) set_altura = 66 ;
       
       if       ( mas )// eleccion de los numeros de entrada de datos                  //////// aca subo la variable set_altura
       { 
          delay_ms ( 100 ) ;
          set_altura = set_altura + 0.5 ;         
          txt_at ( 54 , 26 , 4 , negro ) ; printf ( glcd_text , "+" ) ;
         
       }
       else if ( menos )//eleccion de los numeros de entrada de datos            //////// aca bajo la variable set_altura
       {
          delay_ms ( 100 ) ;
          set_altura = set_altura - 0.5 ;           
          txt_at ( 54 , 26 , 4 , negro ) ; printf ( glcd_text , "-" ) ;
       }
       

       
       ////////visualización de efecto hall/////////////////////
       
       txt_at ( 1 , 22 , 1 , negro )  ; printf ( glcd_text , "Actual:" ) ;
       txt_at ( 51, 16 , 2 , negro )  ; printf ( glcd_text , "%1.1f" , (((float)valtura)/25.5)+80 ) ;//que se vea siempre
       txt_at ( 100 , 16 , 2 , negro ) ; printf ( glcd_text , "cm" ) ;
       
       
       ////////////visualización de seteo de altura/////////////////////                           ////acá simplemente visualizo en el display el seteo antes de grabar

       txt_at ( 1 , 56 , 1 , negro )  ; printf ( glcd_text , "Nuevo:" ) ;
       txt_at ( 51, 50 , 2 , negro )  ; printf ( glcd_text , "%2.1f" , set_altura ) ;//que se vea siempre
       txt_at ( 100 , 50 , 2 , negro ) ; printf ( glcd_text , "cm" ) ;

       glcd_update ( ) ;
       
       if ( select )
       {
         delay_ms ( 500 ) ;//rebotes
         seleccion ++;
       }
       if ( seleccion > 3 ) seleccion = 0 ;
     }

        //////// grabado en eeprom al salir del while
       
       write_float_eeprom ( 0x00 , set_altura ) ;delay_ms ( 10 ) ;
       set_altura = read_float_eeprom ( 0x00 ) ; delay_ms ( 10 ) ;

       txt_at ( 80, 35 , 1 , negro )  ; printf ( glcd_text , "sa:%1.1f" ,set_altura ) ;   ///aca aparece el valor 130 , suba o baje el seteo
       glcd_update ( ) ;delay_ms ( 1000 );     
}

este es el pedazo de la libreria internal_eeprom.c




// Purpose:    Write a floating point number to internal eeprom
// Inputs:     1) An eeprom address. Four eeprom locations will be used.
//             2) The floating point number to write to internal eeprom
// Outputs:    None
void write_float_eeprom(INT_EEPROM_ADDRESS address, float data)
{
   int8 i;

   for(i = 0; i < 4; ++i)
   {
     write_eeprom(address + i, *(&data + i));
   }
}


// Purpose:    Read a floating point number from internal eeprom
// Inputs:     An eeprom address
// Outputs:    The floating point number read from the internal eeprom
float read_float_eeprom(INT_EEPROM_ADDRESS address)
{
   int8 i;
   float data;

   for(i = 0; i < 4; ++i)
   {
     *(&data + i) = read_eeprom(address + i);
   }

   return data;
}*/

desde ya gracias!!!


 

anything