]> git.itanic.dy.fi Git - BME280_driver/blobdiff - bme280.c
Fixed a bug in integer compensation equations
[BME280_driver] / bme280.c
index 0f81b7119bb963cb9c2604ccd5f144eab563e7e7..0fcc1d758141346162a00aabcbf54b9c73f20a29 100644 (file)
--- a/bme280.c
+++ b/bme280.c
@@ -1273,13 +1273,13 @@ static uint32_t compensate_pressure(const struct bme280_uncomp_data *uncomp_data
     uint32_t pressure_max = 110000;\r
 \r
     var1 = (((int32_t)calib_data->t_fine) / 2) - (int32_t)64000;\r
-    var2 = (((var1 / 4) * (var1 / 4)) / 2048) * ((int32_t)calib_data->dig_P6);\r
-    var2 = var2 + ((var1 * ((int32_t)calib_data->dig_P5)) * 2);\r
-    var2 = (var2 / 4) + (((int32_t)calib_data->dig_P4) * 65536);\r
-    var3 = (calib_data->dig_P3 * (((var1 / 4) * (var1 / 4)) / 8192)) / 8;\r
-    var4 = (((int32_t)calib_data->dig_P2) * var1) / 2;\r
+    var2 = (((var1 / 4) * (var1 / 4)) / 2048) * ((int32_t)calib_data->dig_p6);\r
+    var2 = var2 + ((var1 * ((int32_t)calib_data->dig_p5)) * 2);\r
+    var2 = (var2 / 4) + (((int32_t)calib_data->dig_p4) * 65536);\r
+    var3 = (calib_data->dig_p3 * (((var1 / 4) * (var1 / 4)) / 8192)) / 8;\r
+    var4 = (((int32_t)calib_data->dig_p2) * var1) / 2;\r
     var1 = (var3 + var4) / 262144;\r
-    var1 = (((32768 + var1)) * ((int32_t)calib_data->dig_P1)) / 32768;\r
+    var1 = (((32768 + var1)) * ((int32_t)calib_data->dig_p1)) / 32768;\r
 \r
     /* avoid exception caused by division by zero */\r
     if (var1)\r
@@ -1294,9 +1294,9 @@ static uint32_t compensate_pressure(const struct bme280_uncomp_data *uncomp_data
         {\r
             pressure = (pressure / (uint32_t)var1) * 2;\r
         }\r
-        var1 = (((int32_t)calib_data->dig_P9) * ((int32_t)(((pressure / 8) * (pressure / 8)) / 8192))) / 4096;\r
-        var2 = (((int32_t)(pressure / 4)) * ((int32_t)calib_data->dig_P8)) / 8192;\r
-        pressure = (uint32_t)((int32_t)pressure + ((var1 + var2 + calib_data->dig_P7) / 16));\r
+        var1 = (((int32_t)calib_data->dig_p9) * ((int32_t)(((pressure / 8) * (pressure / 8)) / 8192))) / 4096;\r
+        var2 = (((int32_t)(pressure / 4)) * ((int32_t)calib_data->dig_p8)) / 8192;\r
+        pressure = (uint32_t)((int32_t)pressure + ((var1 + var2 + calib_data->dig_p7) / 16));\r
         if (pressure < pressure_min)\r
         {\r
             pressure = pressure_min;\r