\r
\r
}\r
+\r
+int32_t bmp280ReadPressure_simple() {\r
+ uint8_t msb, lsb,xlsb;\r
+ volatile int32_t data;\r
+ I2c_StartCondition();\r
+ I2c_WriteByte(0xEC);\r
+ I2c_WriteByte(0xF7);\r
+ I2c_StopCondition();\r
+ I2c_StartCondition();\r
+ I2c_WriteByte(0xED);\r
+ msb=I2c_ReadByte(ACK);\r
+ lsb=I2c_ReadByte(ACK);\r
+ xlsb=I2c_ReadByte(NO_ACK);\r
+ I2c_StopCondition();\r
+ \r
+ data = (int32_t)msb << 12;\r
+ data |= (int16_t)lsb<<4;\r
+ data|=xlsb>>4;\r
+ \r
+ return data;\r
+\r
+\r
+}\r
+\r
void bmp280ConvertInt(int32_t * temperature,uint32_t *pressure,uint8_t oss) {\r
int32_t var1,var2,T,t_fine;\r
\r
*pressure=p;\r
\r
}\r
+\r
void bmp280Convert(double * temperature, double * pressure,uint8_t oss) {\r
\r
uint32_t p;\r
*pressure=p/100.0;\r
}\r
\r
- \r
- \r
+void bmp280ConvertIntP(int32_t temp256,uint32_t *pressure) {\r
+ int32_t var1,var2,t_fine;\r
+ //T = (t_fine * 5 + 128) >> 8;\r
+ t_fine=((temp256)-128)/5;\r
+ int32_t adc_P= bmp280ReadPressure_simple();\r
+ uint32_t p;\r
+ var1 = (((int32_t)t_fine)>>1) - (int32_t)64000;\r
+ var2 = (((var1>>2) * (var1>>2)) >> 11 ) * ((int32_t)dig_P6);\r
+ var2 = var2 + ((var1*((int32_t)dig_P5))<<1);\r
+ var2 = (var2>>2)+(((int32_t)dig_P4)<<16);\r
+ var1 = (((dig_P3 * (((var1>>2) * (var1>>2)) >> 13 )) >> 3) + ((((int32_t)dig_P2) * var1)>>1))>>18;\r
+ var1 =((((32768+var1))*((int32_t)dig_P1))>>15);\r
+ if (var1 == 0) {\r
+ return ; // avoid exception caused by division by zero\r
+ }\r
+ p = (((uint32_t)(((int32_t)1048576)-adc_P)-(var2>>12)))*3125;\r
+ if (p < 0x80000000){\r
+ p = (p << 1) / ((uint32_t)var1);\r
+ }else{\r
+ p = (p / (uint32_t)var1) * 2;\r
+ }\r
+ var1 = (((int32_t)dig_P9) * ((int32_t)(((p>>3) * (p>>3))>>13)))>>12;\r
+ var2 = (((int32_t)(p>>2)) * ((int32_t)dig_P8))>>13;\r
+ p = (uint32_t)((int32_t)p + ((var1 + var2 + dig_P7) >> 4));\r
+ *pressure=p;\r
\r
+} \r
+ \r
+void bmp280ConvertIntP1(uint32_t *pressure) {\r
+ int32_t var1,var2,T,t_fine;\r
\r
+ \r
+ int32_t adc_T=bmp280ReadTemp();\r
+ var1 = ((((adc_T>>3) - ((int32_t)dig_T1<<1))) * ((int32_t)dig_T2)) >> 11;\r
+ var2 = ((((((adc_T>>4) - ((int32_t)dig_T1)) * ((adc_T>>4) - (int32_t)dig_T1))) >> 12) *((int32_t)dig_T3)) >> 14;\r
+ t_fine = var1 + var2;\r
+ T = (t_fine * 5 + 128) >> 8;\r
+ int32_t adc_P= bmp280ReadPressure_simple();\r
+ uint32_t p;\r
+ var1 = (((int32_t)t_fine)>>1) - (int32_t)64000;\r
+ var2 = (((var1>>2) * (var1>>2)) >> 11 ) * ((int32_t)dig_P6);\r
+ var2 = var2 + ((var1*((int32_t)dig_P5))<<1);\r
+ var2 = (var2>>2)+(((int32_t)dig_P4)<<16);\r
+ var1 = (((dig_P3 * (((var1>>2) * (var1>>2)) >> 13 )) >> 3) + ((((int32_t)dig_P2) * var1)>>1))>>18;\r
+ var1 =((((32768+var1))*((int32_t)dig_P1))>>15);\r
+ if (var1 == 0) {\r
+ return ; // avoid exception caused by division by zero\r
+ }\r
+ p = (((uint32_t)(((int32_t)1048576)-adc_P)-(var2>>12)))*3125;\r
+ if (p < 0x80000000){\r
+ p = (p << 1) / ((uint32_t)var1);\r
+ }else{\r
+ p = (p / (uint32_t)var1) * 2;\r
+ }\r
+ var1 = (((int32_t)dig_P9) * ((int32_t)(((p>>3) * (p>>3))>>13)))>>12;\r
+ var2 = (((int32_t)(p>>2)) * ((int32_t)dig_P8))>>13;\r
+ p = (uint32_t)((int32_t)p + ((var1 + var2 + dig_P7) >> 4));\r
+ *pressure=p;\r
+\r
+}\r