05-21-2019 02:34 AM - edited 05-21-2019 02:37 AM
Hi,
I'm using the BME280 for a project, and is having hard time converting the sensor's ADC temperature value into "human" readable temperature, the values always off. I'm not sure whether the issue is with the compensation equations or somewhere else. I'm able to write and read data back and forth between the BME280 sensor and the microcontroller.
Below are sample pictures of the I2C communication
Compensation Equations to convert raw ADC value into human readable temperature. For instance, the UT value at this moment in time is 0x00086b2b. After that value went throught the equations, the t_fine_temp value is 0x00000594 or 1428 in decimal which is 14.28 degree C which i think is incorrect. Unfortunately, i don't know what the correct value should be.
int32_t BME280_CalcT(int32_t UT) { #if 1 volatile sLWord t_fine_temp = 0x0000; volatile sLWord t_fine_temp2= 0x0000; //int32_t t_fine_temp3; //int32_t t_fine_1; #if 1 t_fine_temp = ((((UT >> 3) - ((sLWord)cal_param.dig_T1 << 1))) * ((sLWord)cal_param.dig_T2)) >> 11; t_fine_temp2 = (((((UT >> 4) - ((sLWord)cal_param.dig_T1)) * ((UT >> 4) - ((sLWord)cal_param.dig_T1))) >> 12) * ((sLWord)cal_param.dig_T3)) >> 14; t_fine_temp += t_fine_temp2; t_fine_temp = ((t_fine_temp * 5) + 128) >> 8; #endif return t_fine_temp; #endif }
cal_param 0x00000116 0x000116`Ram dig_T1 0x596f 0x000116`Ram dig_T2 0x1067 0x000118`Ram dig_T3 0x3200 0x00011a`Ram
Can anyone show me where thing went wrong ?
Thank you very much
Vu
05-24-2019 09:53 AM
05-25-2019 07:34 AM
Hi Ronawagner
Thanks for pointing that out. Would it be possible for you to enter in the raw data value 0x86B2B using your own BME280 calibration values and see whether you would get the same temperature of 30.09 degree C.
Thanks,
Vu
05-25-2019 07:38 AM
Hi,
Thanks for the link. Due to limited resource available on the 8-bit microcontroller i'm unable to implement many of the nice features from the API.
Thanks,
Vu
05-30-2019 10:35 PM
Just got my BME280 connected. My calibration data is different. Using 0x86B2B with the calibration data from my device would give a temperature of 32.60C.
06-03-2019 05:18 AM
@ronawagner wrote:
Just got my BME280 connected. My calibration data is different. Using 0x86B2B with the calibration data from my device would give a temperature of 32.60C.
Every single device will have different calibation values and is trimmed at the factory during our final test. The initialization phase should read these values, and use then in the compensation formula after raw data is read.