Hi, we are using the BMP388 Temperature and pressure sensor and although the pressure reading seems fine, the temperature sensor reading is consistently about 6 degrees too high. For example I put our unit in a refrigerator at about 4 degrees and the reported temperature immediately on removal was 10.5. I am aware that the temperature is the die temperature but would you expect that sort of offset? I have tried running in forced mode so that the device sleeps between reads in order to limit self-heating but this had no effect. I have 5 units which behave the same. Hope you can help / advise. BMP388_CalData NewCal; void ReadBMP388CalibrationValues ( void ) { ReadBoschChip(GetBoschI2Chandle(), 0x31, (uint8_t *)&NewCal.NVM_PAR_T1, 2); ReadBoschChip(GetBoschI2Chandle(), 0x33, (uint8_t *)&NewCal.NVM_PAR_T2, 2); ReadBoschChip(GetBoschI2Chandle(), 0x35, (uint8_t *)&NewCal.NVM_PAR_T3, 1); ReadBoschChip(GetBoschI2Chandle(), 0x36, (uint8_t *)&NewCal.NVM_PAR_P1, 2); ReadBoschChip(GetBoschI2Chandle(), 0x38, (uint8_t *)&NewCal.NVM_PAR_P2, 2); ReadBoschChip(GetBoschI2Chandle(), 0x3a, (uint8_t *)&NewCal.NVM_PAR_P3, 1); ReadBoschChip(GetBoschI2Chandle(), 0x3b, (uint8_t *)&NewCal.NVM_PAR_P4, 1); ReadBoschChip(GetBoschI2Chandle(), 0x3c, (uint8_t *)&NewCal.NVM_PAR_P5, 2); ReadBoschChip(GetBoschI2Chandle(), 0x3e, (uint8_t *)&NewCal.NVM_PAR_P6, 2); ReadBoschChip(GetBoschI2Chandle(), 0x40, (uint8_t *)&NewCal.NVM_PAR_P7, 1); ReadBoschChip(GetBoschI2Chandle(), 0x41, (uint8_t *)&NewCal.NVM_PAR_P8, 1); ReadBoschChip(GetBoschI2Chandle(), 0x42, (uint8_t *)&NewCal.NVM_PAR_P9, 2); ReadBoschChip(GetBoschI2Chandle(), 0x44, (uint8_t *)&NewCal.NVM_PAR_P10, 1); ReadBoschChip(GetBoschI2Chandle(), 0x45, (uint8_t *)&NewCal.NVM_PAR_P11, 1); } double GetTrueTemperature ( uint32_t Temperature ) { double RealTemperature; double Parameter_T1, Parameter_T2, Parameter_T3; double PartialData1, PartialData2; Parameter_T1 = (double)(NewCal.NVM_PAR_T1) / pow(2.0, -8.0); Parameter_T2 = (double)(NewCal.NVM_PAR_T2) / pow(2.0, 30.0); Parameter_T3 = (double)(NewCal.NVM_PAR_T3) / pow(2.0, 48.0); PartialData1 = (double)(Temperature - Parameter_T1); PartialData2 = PartialData1 * Parameter_T2; RealTemperature = PartialData2 + (PartialData1 * PartialData1) * Parameter_T3; t_lin = RealTemperature; return RealTemperature; }
... View more