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!!!