Hello everyone.
By using an Arduino Uno board (programming in Simulink), I am tring to read data from a BMP180 sensor and to calculate the true temperature and pressure, by following the functions shown in figure 4 (pag. 15) in the datasheet:
https://cdn-shop.adafruit.com/datasheets/BST-BMP180-DS000-09.pdf
While the temperature reading appears correct, there are some problems with the pressure: in my opinion, by considering the “calculate true pressure” in the datasheet, the coefficients B6, X1, X2, X3, B3, B4, B7, p, UP, are returned when the value 0x2E is write into 0xF4 register: in fact, similar values are returned to me, from my BMP180, when I write the 0x2E value into 0xF4 register, instead of 0x34 (pressure, with OSS = 0).
Moreover, a pressure value of 69964 Pa appears irrealistic: by considering the figure 5, it means an altitude of about 3000 m over the sea level (I do not know if the Bosch research center is so high).
The if condition is not respected: in fact, 0x80000000 means 2147483648 in decimal. Therefore, being B7 = 1171050000 the value 70003 would be returned, as p, instead 69964.
I developed, in Simulink, two different functions: one to calculate the true temperature, the other to calculate the true pressure. If I use, as inputs, the same datasheet values, the two functions return, respectively, 150 and 70003. Therefore, they are correct.
But, if I use the real time data from the sensor, while the temperature (0x2E into 0xF4 register) is a realistic value (about 22 – 24 °C), the pressure (0x34 into 0xF4 register) is not a realistic value (about 81000 Pa), by considering an altitude of 44 m over the sea level of my office.
The BMP180 sensor run properly, since I tested it with an example for the IDE of Arduino Uno.
Therefore my question is: is the “calculate true pressure” function shown in the figure 4 of the datasheet correct or is there a problem?
Sincerely