Commit 890279b7 authored by Matthieu Cattin's avatar Matthieu Cattin Committed by Projects

sw: add altitude to pressure helper function and example for altitude calibration.

parent 9d4027e3
......@@ -50,6 +50,8 @@ int main(void)
double temp = 0;
double pressure = 0;
double altitude = 0;
double pressure_calc;
double pressure_comp;
/* Setup SysTick Timer for 1 msec interrupts */
if (SysTick_Config(CMU_ClockFreqGet(cmuClock_CORE) / 1000)) while (1);
......@@ -70,25 +72,40 @@ int main(void)
text(&font_helv11, 5, 10, str);
lcd_update();
err = alti_get_temp_pressure(&temp, &pressure, true);
err = alti_altitude2mbar(&pressure_calc, 440);
pressure_comp = pressure - pressure_calc;
while(1)
{
err = alti_get_temp_pressure(&temp, &pressure, true);
sprintf(str, "temp: %f C", temp);
text(&font_helv11, 5, 20, str);
sprintf(str, "pressure: %f mbar", pressure);
sprintf(str, "pressure: %5.2f mbar", pressure);
text(&font_helv11, 5, 30, str);
err = alti_mbar2altitude(pressure, &altitude);
sprintf(str, "altitude: %f m", altitude);
sprintf(str, "altitude: %4.2f m", altitude);
text(&font_helv11, 5, 40, str);
sprintf(str, "p calc: %5.2f mbar", pressure_calc);
text(&font_helv11, 5, 60, str);
sprintf(str, "p comp: %5.2f mbar", pressure_comp);
text(&font_helv11, 5, 70, str);
err = alti_mbar2altitude(pressure-pressure_comp, &altitude);
sprintf(str, "alti comp: %4.2f m", altitude);
text(&font_helv11, 5, 50, str);
//sprintf(str, "err: 0x%02x", err);
//text(&font_helv11, 5, 50, str);
lcd_update();
//Delay(1000);
box(5, 10, 128, 50, 0);
//lcd_clear();
//box(5, 10, 128, 50, 0);
lcd_clear();
}
......
......@@ -281,8 +281,8 @@ uint8_t alti_get_temp_pressure(double* temp, double* pressure, bool filter)
* source: Intersema (Meas-spec), AN501 - Using MS5534 for Altimeters and Barometers
*
* @param pressure : Pressure in millibars.
* @param altitude : Altitude in merters.
* @return i2c error code or crc error (-1), 0 if no errors.
* @param altitude : Altitude in meters.
* @return coefficient index.
*/
uint8_t alti_mbar2altitude(double pressure, double* altitude)
{
......@@ -300,3 +300,33 @@ uint8_t alti_mbar2altitude(double pressure, double* altitude)
return i;
}
/**
* @brief Helper function to convert from altitude to mbar.
*
* Uses piecewise interpolation of pressure to altitude conversion formula (troposhere model)
* h = 288.15/0.065 * (1 - (p/1013.25)^(0.065*287.052/9.81))
* source: Intersema (Meas-spec), AN501 - Using MS5534 for Altimeters and Barometers
*
* @param pressure : Pressure in millibars.
* @param altitude : Altitude in meters.
* @return coefficient index.
*/
uint8_t alti_altitude2mbar(double* pressure, double altitude)
{
uint8_t i;
for(i=0; i<P2A_COEFF_SIZE; i++)
{
if(altitude > p2a_coeff[i][3])
{
i--;
break;
}
}
*pressure = (p2a_coeff[i][0] + (p2a_coeff[i][3] - altitude) * pow(2,11) / p2a_coeff[i][2]) / 10;
return i;
}
......@@ -83,10 +83,23 @@ uint8_t alti_get_temp_pressure(double* temp, double* pressure, bool filter);
* source: Intersema (Meas-spec), AN501 - Using MS5534 for Altimeters and Barometers
*
* @param pressure : Pressure in millibars.
* @param altitude : Altitude in merters.
* @return i2c error code or crc error (-1), 0 if no errors.
* @param altitude : Altitude in meters.
* @return coefficient index.
*/
uint8_t alti_mbar2altitude(double pressure, double* altitude);
/**
* @brief Helper function to convert from altitude to mbar.
*
* Uses piecewise interpolation of pressure to altitude conversion formula (troposhere model)
* h = 288.15/0.065 * (1 - (p/1013.25)^(0.065*287.052/9.81))
* source: Intersema (Meas-spec), AN501 - Using MS5534 for Altimeters and Barometers
*
* @param pressure : Pressure in millibars.
* @param altitude : Altitude in meters.
* @return coefficient index.
*/
uint8_t alti_altitude2mbar(double* pressure, double altitude);
#endif /* ALTIMETER_H */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment