Autor Tema: Ayuda MAX44009  (Leído 1249 veces)

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

Desconectado alperez

  • PIC18
  • ****
  • Mensajes: 255
Ayuda MAX44009
« en: 17 de Febrero de 2012, 17:13:41 »
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?

Código: [Seleccionar]
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);
      }
« Última modificación: 17 de Marzo de 2012, 17:29:32 por alperez »

Desconectado alperez

  • PIC18
  • ****
  • Mensajes: 255
Re: Ayuda MAX44009
« Respuesta #1 en: 03 de Marzo de 2012, 05:47:48 »
¿Nadie?