Hola a todos, estaba "jugando" con un sensor max44009 y me encontraba con un problemilla. Resulta que tenía que calcular 2^exponente * mantisa * 0,045 y utilizo la funcion pow() pero se come bastante memoria rom. ¿Alguien sabria como simplificar esto?
i2c_start();
delay_ms(1);
i2c_write(MAX44009_ADDR_WRITE);
delay_ms(1);
i2c_write(HIGH_BYTE);
delay_ms(1);
i2c_start();
delay_ms(1);
i2c_write(MAX44009_ADDR_READ);
delay_ms(1);
luxHight=i2c_read(0); //No esperamos el ack
//i2c_stop();
i2c_start();
delay_ms(1);
i2c_write(MAX44009_ADDR_WRITE);
delay_ms(1);
i2c_write(LOW_BYTE);
delay_ms(1);
i2c_start();
i2c_write(MAX44009_ADDR_READ);
delay_ms(1);
luxLow=i2c_read(0);
i2c_stop();
exponente = (luxHight & 0xF0) >> 4;
mantisa = (luxHight & 0x0F) << 4;
mantisa += luxLow & 0x0F;
lux = pow(2,exponente) * mantisa * 0.045;
printf(lcd_putc,"\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"%d %d",luxHight,LuxLow);
if (exponente >= 15){ // si es 0b1111 indica fuera de rango
lcd_gotoxy(1,2);
printf(lcd_putc,"E");
}
else{
lcd_gotoxy(1,2);
printf(lcd_putc,"%f",lux);
}