bmp280 datasheet

Table Of Contents
Bosch
Sensortec | BMP280 Data sheet
44 |
48
Modifications reserved | Data subject to change without notice
Document number: BST-BMP280-DS001-23 Revision_1.23_11202
0
8. Appendix 1: Computation formulae for 32 bit systems
8.1 Compensation formula in floating point
Please note that it is strongly advised to use the API available from Bosch Sensortec to perform
readout and compensation. If this is not wanted, the code below can be applied at the users risk. Both
pressure and temperature values are expected to be received in 20 bit format, positive, stored in a 32
bit signed integer.
The variable t_fine (signed 32 bit) carries a fine resolution temperature value over to the pressure
compensation formula and could be implemented as a global variable.
The data type BMP280_S32_tshould define a 32 bit signed integer variable type and could usually
be defined as long signed int”. The revision of the code is rev.1.1.
// Returns temperature in DegC, double precision. Output value of 51.23 equals 51.23 DegC.
// t_fine carries fine temperature as global value
BMP280_S32_t t_fine;
double bmp280_compensate_T_double(BMP280_S32_t adc_T)
{
double var1, var2, T;
var1 = (((double)adc_T)/16384.0 ((double)dig_T1)/1024.0) * ((double)dig_T2);
var2 = ((((double)adc_T)/131072.0 ((double)dig_T1)/8192.0) *
(((double)adc_T)/131072.0 ((double) dig_T1)/8192.0)) * ((double)dig_T3);
t_fine = (BMP280_S32_t)(var1 + var2);
T = (var1 + var2) / 5120.0;
return T;
}
// Returns pressure in Pa as double. Output value of 96386.2equals 96386.2 Pa = 963.862 hPa
double bmp280_compensate_P_double(BMP280_S32_t adc_P)
{
double var1, var2, p;
var1 = ((double)t_fine/2.0) 64000.0;
var2 = var1 * var1 * ((double)dig_P6) / 32768.0;
var2 = var2 + var1 * ((double)dig_P5) * 2.0;
var2 = (var2/4.0)+(((double)dig_P4) * 65536.0);
var1 = (((double)dig_P3) * var1 * var1 / 524288.0 + ((double)dig_P2) * var1) / 524288.0;
var1 = (1.0 + var1 / 32768.0)*((double)dig_P1);
if (var1 == 0.0)
{
return 0; // avoid exception caused by division by zero
}
p = 1048576.0 – (double)adc_P;
p = (p (var2 / 4096.0)) * 6250.0 / var1;
var1 = ((double)dig_P9) * p * p / 2147483648.0;
var2 = p * ((double)dig_P8) / 32768.0;
p = p + (var1 + var2 + ((double)dig_P7)) / 16.0;
return p;
}
8.2 Compensation formula in 32 bit fixed point
Please note that it is strongly advised to use the API available from Bosch Sensortec to perform
readout and compensation. If this is not wanted, the code below can be applied at the users risk. Both
pressure and temperature values are expected to be received in 20 bit format, positive, stored in a 32
bit signed integer.
The variable t_fine (signed 32 bit) carries a fine resolution temperature value over to the pressure
compensation formula and could be implemented as a global variable.
The data type “BMP280_S32_tshould define a 32 bit signed integer variable type and can usually be
defined as long signed int”.
The data type BMP280_U32_tshould define a 32 bit unsigned integer variable type and can usually
be defined as long unsigned int”.