]> git.itanic.dy.fi Git - BME280_driver/commitdiff
Fixed bug with double compensation equations
authorBosch Sensortec <github@bosch-sensortec.com>
Wed, 22 Jan 2020 14:28:19 +0000 (15:28 +0100)
committerKevin Goveas <kevin.goveas@bosch-sensortec.com>
Wed, 22 Jan 2020 14:28:58 +0000 (15:28 +0100)
README.md
bme280.c
bme280.h
bme280_defs.h
selftest/bme280_selftest.c
selftest/bme280_selftest.h

index f76f7c9eedc7ef1589347f033d804820250c5176..ce5eb3643847a5b8d41db957d8ad9ec968b779bf 100644 (file)
--- a/README.md
+++ b/README.md
@@ -7,9 +7,9 @@ The sensor driver package includes bme280.c, bme280.h and bme280_defs.h files.
 ## Version\r
 File          | Version | Date\r
 --------------|---------|------------\r
-bme280.c      |  3.4.1  | 10 Jan 2020\r
-bme280.h      |  3.4.1  | 10 Jan 2020\r
-bme280_defs.h |  3.4.1  | 10 Jan 2020\r
+bme280.c      |  3.4.2  | 21 Jan 2020\r
+bme280.h      |  3.4.2  | 21 Jan 2020\r
+bme280_defs.h |  3.4.2  | 21 Jan 2020\r
 \r
 ## Integration details\r
 * Integrate bme280.h, bme280_defs.h and bme280.c file in to the project.\r
index 608511509655d2961a7c00f21202490b2f3a51d3..0f81b7119bb963cb9c2604ccd5f144eab563e7e7 100644 (file)
--- a/bme280.c
+++ b/bme280.c
@@ -31,8 +31,8 @@
 * POSSIBILITY OF SUCH DAMAGE.\r
 *\r
 * @file bme280.c\r
-* @date 10/01/2020\r
-* @version  3.4.1\r
+* @date 21/01/2020\r
+* @version  3.4.2\r
 *\r
 */\r
 \r
@@ -1067,10 +1067,10 @@ static double compensate_temperature(const struct bme280_uncomp_data *uncomp_dat
     double temperature_min = -40;\r
     double temperature_max = 85;\r
 \r
-    var1 = ((double)uncomp_data->temperature) / 16384.0 - ((double)calib_data->dig_T1) / 1024.0;\r
-    var1 = var1 * ((double)calib_data->dig_T2);\r
-    var2 = (((double)uncomp_data->temperature) / 131072.0 - ((double)calib_data->dig_T1) / 8192.0);\r
-    var2 = (var2 * var2) * ((double)calib_data->dig_T3);\r
+    var1 = ((double)uncomp_data->temperature) / 16384.0 - ((double)calib_data->dig_t1) / 1024.0;\r
+    var1 = var1 * ((double)calib_data->dig_t2);\r
+    var2 = (((double)uncomp_data->temperature) / 131072.0 - ((double)calib_data->dig_t1) / 8192.0);\r
+    var2 = (var2 * var2) * ((double)calib_data->dig_t3);\r
     calib_data->t_fine = (int32_t)(var1 + var2);\r
     temperature = (var1 + var2) / 5120.0;\r
     if (temperature < temperature_min)\r
@@ -1100,21 +1100,21 @@ static double compensate_pressure(const struct bme280_uncomp_data *uncomp_data,
     double pressure_max = 110000.0;\r
 \r
     var1 = ((double)calib_data->t_fine / 2.0) - 64000.0;\r
-    var2 = var1 * var1 * ((double)calib_data->dig_P6) / 32768.0;\r
-    var2 = var2 + var1 * ((double)calib_data->dig_P5) * 2.0;\r
-    var2 = (var2 / 4.0) + (((double)calib_data->dig_P4) * 65536.0);\r
-    var3 = ((double)calib_data->dig_P3) * var1 * var1 / 524288.0;\r
-    var1 = (var3 + ((double)calib_data->dig_P2) * var1) / 524288.0;\r
-    var1 = (1.0 + var1 / 32768.0) * ((double)calib_data->dig_P1);\r
+    var2 = var1 * var1 * ((double)calib_data->dig_p6) / 32768.0;\r
+    var2 = var2 + var1 * ((double)calib_data->dig_p5) * 2.0;\r
+    var2 = (var2 / 4.0) + (((double)calib_data->dig_p4) * 65536.0);\r
+    var3 = ((double)calib_data->dig_p3) * var1 * var1 / 524288.0;\r
+    var1 = (var3 + ((double)calib_data->dig_p2) * var1) / 524288.0;\r
+    var1 = (1.0 + var1 / 32768.0) * ((double)calib_data->dig_p1);\r
 \r
     /* avoid exception caused by division by zero */\r
-    if (var1)\r
+    if (var1 > (0.0))\r
     {\r
         pressure = 1048576.0 - (double) uncomp_data->pressure;\r
         pressure = (pressure - (var2 / 4096.0)) * 6250.0 / var1;\r
-        var1 = ((double)calib_data->dig_P9) * pressure * pressure / 2147483648.0;\r
-        var2 = pressure * ((double)calib_data->dig_P8) / 32768.0;\r
-        pressure = pressure + (var1 + var2 + ((double)calib_data->dig_P7)) / 16.0;\r
+        var1 = ((double)calib_data->dig_p9) * pressure * pressure / 2147483648.0;\r
+        var2 = pressure * ((double)calib_data->dig_p8) / 32768.0;\r
+        pressure = pressure + (var1 + var2 + ((double)calib_data->dig_p7)) / 16.0;\r
         if (pressure < pressure_min)\r
         {\r
             pressure = pressure_min;\r
@@ -1150,13 +1150,14 @@ static double compensate_humidity(const struct bme280_uncomp_data *uncomp_data,
     double var6;\r
 \r
     var1 = ((double)calib_data->t_fine) - 76800.0;\r
-    var2 = (((double)calib_data->dig_H4) * 64.0 + (((double)calib_data->dig_H5) / 16384.0) * var1);\r
+    var2 = (((double)calib_data->dig_h4) * 64.0 + (((double)calib_data->dig_h5) / 16384.0) * var1);\r
     var3 = uncomp_data->humidity - var2;\r
-    var4 = ((double)calib_data->dig_H2) / 65536.0;\r
-    var5 = (1.0 + (((double)calib_data->dig_H3) / 67108864.0) * var1);\r
-    var6 = 1.0 + (((double)calib_data->dig_H6) / 67108864.0) * var1 * var5;\r
+    var4 = ((double)calib_data->dig_h2) / 65536.0;\r
+    var5 = (1.0 + (((double)calib_data->dig_h3) / 67108864.0) * var1);\r
+    var6 = 1.0 + (((double)calib_data->dig_h6) / 67108864.0) * var1 * var5;\r
     var6 = var3 * var4 * (var5 * var6);\r
-    humidity = var6 * (1.0 - ((double)calib_data->dig_H1) * var6 / 524288.0);\r
+    humidity = var6 * (1.0 - ((double)calib_data->dig_h1) * var6 / 524288.0);\r
+\r
     if (humidity > humidity_max)\r
     {\r
         humidity = humidity_max;\r
@@ -1190,6 +1191,7 @@ static int32_t compensate_temperature(const struct bme280_uncomp_data *uncomp_da
     var2 = (((var2 * var2) / 4096) * ((int32_t)calib_data->dig_t3)) / 16384;\r
     calib_data->t_fine = var1 + var2;\r
     temperature = (calib_data->t_fine * 5 + 128) / 256;\r
+\r
     if (temperature < temperature_min)\r
     {\r
         temperature = temperature_min;\r
index 958f0fa0a2730e434396012a6cc1d84b0c74fe96..cfb96e733470bf057ba4ec7e35539c1cea41ee80 100644 (file)
--- a/bme280.h
+++ b/bme280.h
@@ -31,8 +31,8 @@
 * POSSIBILITY OF SUCH DAMAGE.\r
 *\r
 * @file bme280.h\r
-* @date 10/01/2020\r
-* @version  3.4.1\r
+* @date 21/01/2020\r
+* @version  3.4.2\r
 *\r
 */\r
 \r
index 40decc5c32937fdccbd90d72f0a49f18da4588b9..900115df12cf232ad4d3c4feea76e8f2b4c4bd10 100644 (file)
@@ -31,8 +31,8 @@
 * POSSIBILITY OF SUCH DAMAGE.\r
 *\r
 * @file bme280_defs.h\r
-* @date 10/01/2020\r
-* @version  3.4.1\r
+* @date 21/01/2020\r
+* @version  3.4.2\r
 *\r
 */\r
 \r
index 28f7fdda5b27409ee9084a7ed4fbc41da5c57f4b..9afbc5593b3005f3be044de233763ec1a4278c63 100644 (file)
@@ -31,8 +31,8 @@
 * POSSIBILITY OF SUCH DAMAGE.\r
 *\r
 * @file bme280_selftest.c\r
-* @date 10/01/2020\r
-* @version  3.4.1\r
+* @date 21/01/2020\r
+* @version  3.4.2\r
 *\r
 */\r
 \r
index 2a9fe90bd0ff8c315f63d37550e81d368b135744..adb6d1ce3a9824ba6e927de5f61c17190fe22c5a 100644 (file)
@@ -31,8 +31,8 @@
 * POSSIBILITY OF SUCH DAMAGE.\r
 *\r
 * @file bme280_selftest.h\r
-* @date 10/01/2020\r
-* @version  3.4.1\r
+* @date 21/01/2020\r
+* @version  3.4.2\r
 *\r
 */\r
 \r