Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of BMP280 by
BMP280.h
00001 /******************************************************************//** 00002 * @file BMP280.h 00003 * @brief Contains all I2C based BMP280 Pressure sensor declarations 00004 * @version 1.0 00005 * @date 26. May. 2016 00006 * @author Bhavin.Edutech Learning Solutions 00007 **********************************************************************/ 00008 00009 #include "mbed.h" 00010 00011 /** I2C ADDRESS DEFINITIONS **/ 00012 /************************************************/ 00013 /**\name CHIP ID DEFINITION */ 00014 /***********************************************/ 00015 #define BMP280_CHIP_ID1 (0x56) 00016 #define BMP280_CHIP_ID2 (0x57) 00017 #define BMP280_CHIP_ID3 (0x58) 00018 /************************************************/ 00019 /**\name I2C ADDRESS DEFINITION */ 00020 /***********************************************/ 00021 #define BMP280_I2C_ADDRESS1 (0x76<<1) 00022 #define BMP280_I2C_ADDRESS2 (0x77<<1) 00023 /************************************************/ 00024 /**\name POWER MODE DEFINITION */ 00025 /***********************************************/ 00026 /* Sensor Specific constants */ 00027 #define BMP280_SOFT_RESET_CODE (0xB6) 00028 00029 /************************************************/ 00030 /**\name OVERSAMPLING DEFINITION */ 00031 /***********************************************/ 00032 #define BMP280_OVERSAMP_SKIPPED (0x00) 00033 #define BMP280_OVERSAMP_1X (0x01) 00034 #define BMP280_OVERSAMP_2X (0x02) 00035 #define BMP280_OVERSAMP_4X (0x03) 00036 #define BMP280_OVERSAMP_8X (0x04) 00037 #define BMP280_OVERSAMP_16X (0x05) 00038 /************************************************/ 00039 /**\name WORKING MODE DEFINITION */ 00040 /***********************************************/ 00041 #define BMP280_ULTRA_LOW_POWER_MODE (0x00) 00042 #define BMP280_LOW_POWER_MODE (0x01) 00043 #define BMP280_STANDARD_RESOLUTION_MODE (0x02) 00044 #define BMP280_HIGH_RESOLUTION_MODE (0x03) 00045 #define BMP280_ULTRA_HIGH_RESOLUTION_MODE (0x04) 00046 00047 #define BMP280_ULTRALOWPOWER_OVERSAMP_PRESSURE BMP280_OVERSAMP_1X 00048 #define BMP280_ULTRALOWPOWER_OVERSAMP_TEMPERATURE BMP280_OVERSAMP_1X 00049 00050 #define BMP280_LOWPOWER_OVERSAMP_PRESSURE BMP280_OVERSAMP_2X 00051 #define BMP280_LOWPOWER_OVERSAMP_TEMPERATURE BMP280_OVERSAMP_1X 00052 00053 #define BMP280_STANDARDRESOLUTION_OVERSAMP_PRESSURE BMP280_OVERSAMP_4X 00054 #define BMP280_STANDARDRESOLUTION_OVERSAMP_TEMPERATURE BMP280_OVERSAMP_1X 00055 00056 #define BMP280_HIGHRESOLUTION_OVERSAMP_PRESSURE BMP280_OVERSAMP_8X 00057 #define BMP280_HIGHRESOLUTION_OVERSAMP_TEMPERATURE BMP280_OVERSAMP_1X 00058 00059 #define BMP280_ULTRAHIGHRESOLUTION_OVERSAMP_PRESSURE BMP280_OVERSAMP_16X 00060 #define BMP280_ULTRAHIGHRESOLUTION_OVERSAMP_TEMPERATURE BMP280_OVERSAMP_2X 00061 00062 00063 /************************************************/ 00064 /**\name CALIBRATION PARAMETERS DEFINITION */ 00065 /***********************************************/ 00066 /*calibration parameters */ 00067 #define BMP280_TEMPERATURE_CALIB_DIG_T1_LSB_REG (0x88) 00068 #define BMP280_TEMPERATURE_CALIB_DIG_T1_MSB_REG (0x89) 00069 #define BMP280_TEMPERATURE_CALIB_DIG_T2_LSB_REG (0x8A) 00070 #define BMP280_TEMPERATURE_CALIB_DIG_T2_MSB_REG (0x8B) 00071 #define BMP280_TEMPERATURE_CALIB_DIG_T3_LSB_REG (0x8C) 00072 #define BMP280_TEMPERATURE_CALIB_DIG_T3_MSB_REG (0x8D) 00073 #define BMP280_PRESSURE_CALIB_DIG_P1_LSB_REG (0x8E) 00074 #define BMP280_PRESSURE_CALIB_DIG_P1_MSB_REG (0x8F) 00075 #define BMP280_PRESSURE_CALIB_DIG_P2_LSB_REG (0x90) 00076 #define BMP280_PRESSURE_CALIB_DIG_P2_MSB_REG (0x91) 00077 #define BMP280_PRESSURE_CALIB_DIG_P3_LSB_REG (0x92) 00078 #define BMP280_PRESSURE_CALIB_DIG_P3_MSB_REG (0x93) 00079 #define BMP280_PRESSURE_CALIB_DIG_P4_LSB_REG (0x94) 00080 #define BMP280_PRESSURE_CALIB_DIG_P4_MSB_REG (0x95) 00081 #define BMP280_PRESSURE_CALIB_DIG_P5_LSB_REG (0x96) 00082 #define BMP280_PRESSURE_CALIB_DIG_P5_MSB_REG (0x97) 00083 #define BMP280_PRESSURE_CALIB_DIG_P6_LSB_REG (0x98) 00084 #define BMP280_PRESSURE_CALIB_DIG_P6_MSB_REG (0x99) 00085 #define BMP280_PRESSURE_CALIB_DIG_P7_LSB_REG (0x9A) 00086 #define BMP280_PRESSURE_CALIB_DIG_P7_MSB_REG (0x9B) 00087 #define BMP280_PRESSURE_CALIB_DIG_P8_LSB_REG (0x9C) 00088 #define BMP280_PRESSURE_CALIB_DIG_P8_MSB_REG (0x9D) 00089 #define BMP280_PRESSURE_CALIB_DIG_P9_LSB_REG (0x9E) 00090 #define BMP280_PRESSURE_CALIB_DIG_P9_MSB_REG (0x9F) 00091 /************************************************/ 00092 /**\name REGISTER ADDRESS DEFINITION */ 00093 /***********************************************/ 00094 #define BMP280_CHIP_ID_REG (0xD0) /*Chip ID Register */ 00095 #define BMP280_RST_REG (0xE0) /*Softreset Register */ 00096 #define BMP280_STAT_REG (0xF3) /*Status Register */ 00097 #define BMP280_CTRL_MEAS_REG (0xF4) /*Ctrl Measure Register */ 00098 #define BMP280_CONFIG_REG (0xF5) /*Configuration Register */ 00099 #define BMP280_PRESSURE_MSB_REG (0xF7) /*Pressure MSB Register */ 00100 #define BMP280_PRESSURE_LSB_REG (0xF8) /*Pressure LSB Register */ 00101 #define BMP280_PRESSURE_XLSB_REG (0xF9) /*Pressure XLSB Register */ 00102 #define BMP280_TEMPERATURE_MSB_REG (0xFA) /*Temperature MSB Reg */ 00103 #define BMP280_TEMPERATURE_LSB_REG (0xFB) /*Temperature LSB Reg */ 00104 #define BMP280_TEMPERATURE_XLSB_REG (0xFC) /*Temperature XLSB Reg */ 00105 /************************************************/ 00106 /**\name BIT LENGTH,POSITION AND MASK DEFINITION */ 00107 /***********************************************/ 00108 /* Status Register */ 00109 #define BMP280_STATUS_REG_MEASURING__POS (3) 00110 #define BMP280_STATUS_REG_MEASURING__MSK (0x08) 00111 #define BMP280_STATUS_REG_MEASURING__LEN (1) 00112 #define BMP280_STATUS_REG_MEASURING__REG (BMP280_STAT_REG) 00113 00114 #define BMP280_STATUS_REG_IM_UPDATE__POS (0) 00115 #define BMP280_STATUS_REG_IM_UPDATE__MSK (0x01) 00116 #define BMP280_STATUS_REG_IM_UPDATE__LEN (1) 00117 #define BMP280_STATUS_REG_IM_UPDATE__REG (BMP280_STAT_REG) 00118 /************************************************/ 00119 /**\name BIT LENGTH,POSITION AND MASK DEFINITION 00120 FOR TEMPERATURE OVERSAMPLING */ 00121 /***********************************************/ 00122 /* Control Measurement Register */ 00123 #define BMP280_CTRL_MEAS_REG_OVERSAMP_TEMPERATURE__POS (5) 00124 #define BMP280_CTRL_MEAS_REG_OVERSAMP_TEMPERATURE__MSK (0xE0) 00125 #define BMP280_CTRL_MEAS_REG_OVERSAMP_TEMPERATURE__LEN (3) 00126 #define BMP280_CTRL_MEAS_REG_OVERSAMP_TEMPERATURE__REG \ 00127 (BMP280_CTRL_MEAS_REG) 00128 /************************************************/ 00129 /**\name BIT LENGTH,POSITION AND MASK DEFINITION 00130 FOR PRESSURE OVERSAMPLING */ 00131 /***********************************************/ 00132 #define BMP280_CTRL_MEAS_REG_OVERSAMP_PRESSURE__POS (2) 00133 #define BMP280_CTRL_MEAS_REG_OVERSAMP_PRESSURE__MSK (0x1C) 00134 #define BMP280_CTRL_MEAS_REG_OVERSAMP_PRESSURE__LEN (3) 00135 #define BMP280_CTRL_MEAS_REG_OVERSAMP_PRESSURE__REG \ 00136 (BMP280_CTRL_MEAS_REG) 00137 /************************************************/ 00138 /**\name BIT LENGTH,POSITION AND MASK DEFINITION 00139 FOR POWER MODE */ 00140 /***********************************************/ 00141 #define BMP280_CTRL_MEAS_REG_POWER_MODE__POS (0) 00142 #define BMP280_CTRL_MEAS_REG_POWER_MODE__MSK (0x03) 00143 #define BMP280_CTRL_MEAS_REG_POWER_MODE__LEN (2) 00144 #define BMP280_CTRL_MEAS_REG_POWER_MODE__REG (BMP280_CTRL_MEAS_REG) 00145 /************************************************/ 00146 /**\name BIT LENGTH,POSITION AND MASK DEFINITION 00147 FOR STANDBY DURATION */ 00148 /***********************************************/ 00149 /* Configuration Register */ 00150 #define BMP280_CONFIG_REG_STANDBY_DURN__POS (5) 00151 #define BMP280_CONFIG_REG_STANDBY_DURN__MSK (0xE0) 00152 #define BMP280_CONFIG_REG_STANDBY_DURN__LEN (3) 00153 #define BMP280_CONFIG_REG_STANDBY_DURN__REG (BMP280_CONFIG_REG) 00154 /************************************************/ 00155 /**\name BIT LENGTH,POSITION AND MASK DEFINITION 00156 FOR IIR FILTER */ 00157 /***********************************************/ 00158 #define BMP280_CONFIG_REG_FILTER__POS (2) 00159 #define BMP280_CONFIG_REG_FILTER__MSK (0x1C) 00160 #define BMP280_CONFIG_REG_FILTER__LEN (3) 00161 #define BMP280_CONFIG_REG_FILTER__REG (BMP280_CONFIG_REG) 00162 /************************************************/ 00163 /**\name BIT LENGTH,POSITION AND MASK DEFINITION 00164 FOR SPI ENABLE*/ 00165 /***********************************************/ 00166 #define BMP280_CONFIG_REG_SPI3_ENABLE__POS (0) 00167 #define BMP280_CONFIG_REG_SPI3_ENABLE__MSK (0x01) 00168 #define BMP280_CONFIG_REG_SPI3_ENABLE__LEN (1) 00169 #define BMP280_CONFIG_REG_SPI3_ENABLE__REG (BMP280_CONFIG_REG) 00170 /************************************************/ 00171 /**\name BIT LENGTH,POSITION AND MASK DEFINITION 00172 FOR PRESSURE AND TEMPERATURE DATA REGISTERS */ 00173 /***********************************************/ 00174 /* Data Register */ 00175 #define BMP280_PRESSURE_XLSB_REG_DATA__POS (4) 00176 #define BMP280_PRESSURE_XLSB_REG_DATA__MSK (0xF0) 00177 #define BMP280_PRESSURE_XLSB_REG_DATA__LEN (4) 00178 #define BMP280_PRESSURE_XLSB_REG_DATA__REG (BMP280_PRESSURE_XLSB_REG) 00179 00180 #define BMP280_TEMPERATURE_XLSB_REG_DATA__POS (4) 00181 #define BMP280_TEMPERATURE_XLSB_REG_DATA__MSK (0xF0) 00182 #define BMP280_TEMPERATURE_XLSB_REG_DATA__LEN (4) 00183 #define BMP280_TEMPERATURE_XLSB_REG_DATA__REG (BMP280_TEMPERATURE_XLSB_REG) 00184 00185 /****************************************************/ 00186 /**\name ARRAY PARAMETER FOR CALIBRATION */ 00187 /***************************************************/ 00188 #define BMP280_TEMPERATURE_CALIB_DIG_T1_LSB (0) 00189 #define BMP280_TEMPERATURE_CALIB_DIG_T1_MSB (1) 00190 #define BMP280_TEMPERATURE_CALIB_DIG_T2_LSB (2) 00191 #define BMP280_TEMPERATURE_CALIB_DIG_T2_MSB (3) 00192 #define BMP280_TEMPERATURE_CALIB_DIG_T3_LSB (4) 00193 #define BMP280_TEMPERATURE_CALIB_DIG_T3_MSB (5) 00194 #define BMP280_PRESSURE_CALIB_DIG_P1_LSB (6) 00195 #define BMP280_PRESSURE_CALIB_DIG_P1_MSB (7) 00196 #define BMP280_PRESSURE_CALIB_DIG_P2_LSB (8) 00197 #define BMP280_PRESSURE_CALIB_DIG_P2_MSB (9) 00198 #define BMP280_PRESSURE_CALIB_DIG_P3_LSB (10) 00199 #define BMP280_PRESSURE_CALIB_DIG_P3_MSB (11) 00200 #define BMP280_PRESSURE_CALIB_DIG_P4_LSB (12) 00201 #define BMP280_PRESSURE_CALIB_DIG_P4_MSB (13) 00202 #define BMP280_PRESSURE_CALIB_DIG_P5_LSB (14) 00203 #define BMP280_PRESSURE_CALIB_DIG_P5_MSB (15) 00204 #define BMP280_PRESSURE_CALIB_DIG_P6_LSB (16) 00205 #define BMP280_PRESSURE_CALIB_DIG_P6_MSB (17) 00206 #define BMP280_PRESSURE_CALIB_DIG_P7_LSB (18) 00207 #define BMP280_PRESSURE_CALIB_DIG_P7_MSB (19) 00208 #define BMP280_PRESSURE_CALIB_DIG_P8_LSB (20) 00209 #define BMP280_PRESSURE_CALIB_DIG_P8_MSB (21) 00210 #define BMP280_PRESSURE_CALIB_DIG_P9_LSB (22) 00211 #define BMP280_PRESSURE_CALIB_DIG_P9_MSB (23) 00212 00213 class BMP280 00214 { 00215 00216 public: 00217 00218 /** BMP280 Sensor mode Type **/ 00219 typedef enum 00220 { 00221 BMP280_SLEEP_MODE = 0x00, 00222 BMP280_FORCED_MODE = 0x01, 00223 BMP280_NORMAL_MODE = 0x03 00224 }BMP280_Mode_Type; 00225 00226 00227 /** BMP280 Filter Type **/ 00228 typedef enum 00229 { 00230 BMP280_FILTER_COEFF_OFF = 0x00, 00231 BMP280_FILTER_COEFF_2 = 0x01, 00232 BMP280_FILTER_COEFF_4 = 0x02, 00233 BMP280_FILTER_COEFF_8 = 0x03, 00234 BMP280_FILTER_COEFF_16 = 0x04 00235 }BMP280_Filter_Coeff_Type; 00236 00237 /** BMP280 Standby Type **/ 00238 typedef enum 00239 { 00240 BMP280_STANDBY_TIME_1_MS = 0x00, 00241 BMP280_STANDBY_TIME_63_MS = 0x01, 00242 BMP280_STANDBY_TIME_125_MS = 0x02, 00243 BMP280_STANDBY_TIME_250_MS = 0x03, 00244 BMP280_STANDBY_TIME_500_MS = 0x04, 00245 BMP280_STANDBY_TIME_1000_MS = 0x05, 00246 BMP280_STANDBY_TIME_10_MS = 0x06, 00247 BMP280_STANDBY_TIME_20_MS = 0x07 00248 }BMP280_Standby_Type ; 00249 00250 /** BMP280 Dataframe Type **/ 00251 typedef enum 00252 { 00253 BMP280_DATA_FRAME_PRESSURE_MSB_BYTE = 0, 00254 BMP280_DATA_FRAME_PRESSURE_LSB_BYTE = 1, 00255 BMP280_DATA_FRAME_PRESSURE_XLSB_BYTE = 2, 00256 BMP280_DATA_FRAME_TEMPERATURE_MSB_BYTE = 3, 00257 BMP280_DATA_FRAME_TEMPERATURE_LSB_BYTE = 4, 00258 BMP280_DATA_FRAME_TEMPERATURE_XLSB_BYTE = 5, 00259 }BMP280_DataFrame_Type; 00260 00261 /** 00262 * BMP280 constructor. 00263 * 00264 * @param sda mbed pin to use for SDA line of I2C interface. 00265 * @param scl mbed pin to use for SCL line of I2C interface. 00266 */ 00267 BMP280(PinName sda, PinName scl); 00268 00269 /** 00270 * BMP280 constructor. 00271 * 00272 * @param i2c I2C object to use. 00273 */ 00274 BMP280(I2C *i2c); 00275 00276 /** 00277 * BMP280 destructor. 00278 */ 00279 ~BMP280(); 00280 00281 00282 /** 00283 * @brief To transmit data on I2C 00284 * @param Address Register address on which Wr_Data will be written 00285 * @param data data 00286 */ 00287 void writeByte(uint8_t Address, uint8_t data); 00288 00289 00290 /** 00291 * @brief To read data from the I2C based device 00292 * @param Address Register address from data to be read 00293 */ 00294 char readByte(uint8_t Address); 00295 00296 /** 00297 * @brief To read data from the I2C based device 00298 * @param Address Register address from data to be read 00299 * @param counr Lenght of data to be received 00300 * @param dest Receive buffer 00301 */ 00302 void readBytes(uint8_t Address, uint8_t count, uint8_t * dest); 00303 00304 /** 00305 * @brief To Read the Device ID 00306 * @return Device ID 00307 */ 00308 uint8_t BMP280_GetID(void); 00309 00310 00311 /** 00312 * @brief To Reset the Device 00313 */ 00314 void BMP280_SoftReset(void); 00315 00316 00317 /** 00318 * @brief To get the device status 00319 * @return status register value 00320 */ 00321 uint8_t BMP280_GetStatus(void); 00322 00323 00324 /** 00325 * @brief To get the Temperature and Pressure CTRL_MEAS register value 00326 * @return CTRL_MEAS register value 00327 */ 00328 uint8_t BMP280_GetCtrlMeasurement(void); 00329 00330 00331 /** 00332 * @brief To get the config register value 00333 * @return Config register value 00334 */ 00335 uint8_t BMP280_GetConfig(void); 00336 00337 00338 /** 00339 * @brief To read the sensor data(Temperature,Pressure and humidity) 00340 * @return value if fail to read sensor data then it will return 1 00341 */ 00342 void BMP280_ReadMeasurements(void); 00343 00344 00345 /** 00346 * @brief To Read the calibration data for Temperature, Pressure and humidity 00347 */ 00348 void BMP280_ReadCalibrationParams(void); 00349 00350 00351 /** 00352 * @brief To set the sampling rate for the Pressure data 00353 * @param Value 00354 */ 00355 void BMP280_SetOversamplingPressure(uint8_t Value); 00356 00357 /** 00358 * @brief To set the sampling rate for the Temperature data 00359 * @param Value 00360 */ 00361 void BMP280_SetOversamplingTemperature(uint8_t Value); 00362 00363 /** 00364 * @brief To set the sensor power mode 00365 * @param Value Power mode 00366 * @arg BMP280_NORMAL_MODE 00367 * @arg BMP280_FORCED_MODE 00368 * @arg BMP280_SLEEP_MODE 00369 */ 00370 void BMP280_SetPowerMode(BMP280_Mode_Type Value); 00371 00372 00373 /** 00374 * @brief To set the filter coefficient value 00375 * @param Value Filter cofficient 00376 * @arg BMP280_FILTER_COEFF_OFF 00377 * @arg BMP280_FILTER_COEFF_2 00378 * @arg BMP280_FILTER_COEFF_4 00379 * @arg BMP280_FILTER_COEFF_8 00380 * @arg BMP280_FILTER_COEFF_16 00381 */ 00382 void BMP280_SetFilterCoefficient(BMP280_Filter_Coeff_Type Value); 00383 00384 00385 /** 00386 * @brief To set standby time 00387 * @param Value standny time 00388 * @arg BMP280_STANDBY_TIME_1_MS 00389 * @arg BMP280_STANDBY_TIME_63_MS 00390 * @arg BMP280_STANDBY_TIME_125_MS 00391 * @arg BMP280_STANDBY_TIME_250_MS 00392 * @arg BMP280_STANDBY_TIME_500_MS 00393 * @arg BMP280_STANDBY_TIME_1000_MS 00394 * @arg BMP280_STANDBY_TIME_10_MS 00395 * @arg BMP280_STANDBY_TIME_20_MS 00396 */ 00397 void BMP280_SetStandbyTime(BMP280_Standby_Type Value); 00398 00399 00400 /** 00401 * @brief To check the conversion is running or not 00402 * @return value 00403 */ 00404 uint8_t BMP280_IsMeasuring(void); 00405 00406 00407 /** 00408 * @brief Temperature calculation 00409 * @return temperature in DegC, resolution is 0.01 DegC. Output value of “5123” equals 51.23 DegC. 00410 */ 00411 int32_t BMP280_Compensate_T(void); 00412 00413 00414 /** 00415 * @brief Pressure calculation 00416 * @return pressure in Pa as unsigned 32 bit integer. Output value of “96386” equals 96386 Pa = 963.86 hPa 00417 */ 00418 uint32_t BMP280_Compensate_P(void); 00419 00420 00421 /** 00422 * @brief initialize BMP280 00423 */ 00424 void BMP280_INIT(void); 00425 00426 00427 /** 00428 * @brief Print Temperature value on Uart0 00429 */ 00430 float BMP280_GetTemperature(void); 00431 00432 00433 /** 00434 * @brief Print Pressure value on Uart0 00435 */ 00436 float BMP280_GetPressure(void); 00437 00438 private: 00439 /*! 00440 * @brief This structure holds all device specific calibration parameters 00441 */ 00442 typedef struct bmp280_calib_param_t { 00443 uint16_t dig_T1;/**<calibration T1 data*/ 00444 int16_t dig_T2;/**<calibration T2 data*/ 00445 int16_t dig_T3;/**<calibration T3 data*/ 00446 uint16_t dig_P1;/**<calibration P1 data*/ 00447 int16_t dig_P2;/**<calibration P2 data*/ 00448 int16_t dig_P3;/**<calibration P3 data*/ 00449 int16_t dig_P4;/**<calibration P4 data*/ 00450 int16_t dig_P5;/**<calibration P5 data*/ 00451 int16_t dig_P6;/**<calibration P6 data*/ 00452 int16_t dig_P7;/**<calibration P7 data*/ 00453 int16_t dig_P8;/**<calibration P8 data*/ 00454 int16_t dig_P9;/**<calibration P9 data*/ 00455 }BMP280_calibration_param; 00456 00457 I2C *i2c_; 00458 bool i2c_owner; 00459 00460 BMP280::BMP280_calibration_param cal_param; 00461 int32_t adc_t, adc_p, t_fine; 00462 00463 };
Generated on Sat Jul 16 2022 23:20:27 by
1.7.2
