BMP180

Fork of BMP180 by Kevin Gillepsie

Committer:
brdarji
Date:
Tue Jul 05 07:09:02 2016 +0000
Revision:
1:817fb4e66714
Parent:
0:b2219e6e444b
BMP180 ;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kgills 0:b2219e6e444b 1 #include "mbed.h"
kgills 0:b2219e6e444b 2
brdarji 1:817fb4e66714 3 /***** Definitions *****/
brdarji 1:817fb4e66714 4 #define I2C_ADDR (0xEE) // 1110111x
brdarji 1:817fb4e66714 5
brdarji 1:817fb4e66714 6 #define REG_ADDR_RESET (0xE0)
brdarji 1:817fb4e66714 7 #define REG_ADDR_ID (0xD0)
brdarji 1:817fb4e66714 8 #define REG_ADDR_CTRL (0xF4)
brdarji 1:817fb4e66714 9 #define REG_ADDR_DATA (0xF6)
brdarji 1:817fb4e66714 10 #define REG_ADDR_AC1 (0xAA)
brdarji 1:817fb4e66714 11
brdarji 1:817fb4e66714 12 #define CTRL_REG_TEMP (0x2E)
brdarji 1:817fb4e66714 13 #define CTRL_REG_PRESS_0 (0x34)
brdarji 1:817fb4e66714 14 #define CTRL_REG_PRESS_1 (0x74)
brdarji 1:817fb4e66714 15 #define CTRL_REG_PRESS_2 (0xB4)
brdarji 1:817fb4e66714 16 #define CTRL_REG_PRESS_3 (0xF4)
brdarji 1:817fb4e66714 17
brdarji 1:817fb4e66714 18
kgills 0:b2219e6e444b 19 class BMP180
kgills 0:b2219e6e444b 20 {
kgills 0:b2219e6e444b 21
kgills 0:b2219e6e444b 22 public:
kgills 0:b2219e6e444b 23
kgills 0:b2219e6e444b 24 /**
kgills 0:b2219e6e444b 25 * @brief Oversampling ratio.
kgills 0:b2219e6e444b 26 * @details Dictates how many pressure samples to take. Conversion time varies
kgills 0:b2219e6e444b 27 * depending on the number of samples taken. Refer to data sheet
kgills 0:b2219e6e444b 28 * for timing specifications.
kgills 0:b2219e6e444b 29 */
kgills 0:b2219e6e444b 30 typedef enum {
kgills 0:b2219e6e444b 31 ULTRA_LOW_POWER = 0, ///< 1 pressure sample
kgills 0:b2219e6e444b 32 STANDARD = 1, ///< 2 pressure samples
kgills 0:b2219e6e444b 33 HIGH_RESOLUTION = 2, ///< 4 pressure samples
kgills 0:b2219e6e444b 34 ULTRA_HIGH_RESOLUTION = 3, ///< 8 pressure samples
kgills 0:b2219e6e444b 35 } oversampling_t;
kgills 0:b2219e6e444b 36
kgills 0:b2219e6e444b 37 /**
kgills 0:b2219e6e444b 38 * BMP180 constructor.
kgills 0:b2219e6e444b 39 *
kgills 0:b2219e6e444b 40 * @param sda mbed pin to use for SDA line of I2C interface.
kgills 0:b2219e6e444b 41 * @param scl mbed pin to use for SCL line of I2C interface.
kgills 0:b2219e6e444b 42 */
kgills 0:b2219e6e444b 43 BMP180(PinName sda, PinName scl);
kgills 0:b2219e6e444b 44
kgills 0:b2219e6e444b 45 /**
kgills 0:b2219e6e444b 46 * BMP180 constructor.
kgills 0:b2219e6e444b 47 *
kgills 0:b2219e6e444b 48 * @param i2c I2C object to use.
kgills 0:b2219e6e444b 49 */
kgills 0:b2219e6e444b 50 BMP180(I2C *i2c);
kgills 0:b2219e6e444b 51
kgills 0:b2219e6e444b 52 /**
kgills 0:b2219e6e444b 53 * BMP180 destructor.
kgills 0:b2219e6e444b 54 */
kgills 0:b2219e6e444b 55 ~BMP180();
kgills 0:b2219e6e444b 56
kgills 0:b2219e6e444b 57 /**
kgills 0:b2219e6e444b 58 * @brief Initialize BMP180.
kgills 0:b2219e6e444b 59 * @details Gets the device ID and saves the calibration values.
kgills 0:b2219e6e444b 60 * @returns 0 if no errors, -1 if error.
kgills 0:b2219e6e444b 61 */
kgills 0:b2219e6e444b 62 int init(void);
kgills 0:b2219e6e444b 63
kgills 0:b2219e6e444b 64 /**
kgills 0:b2219e6e444b 65 * @brief Reset BMP180.
kgills 0:b2219e6e444b 66 * @details Performs a soft reset of the device. Same sequence as power on reset.
kgills 0:b2219e6e444b 67 * @returns 0 if no errors, -1 if error.
kgills 0:b2219e6e444b 68 */
kgills 0:b2219e6e444b 69 int reset(void);
kgills 0:b2219e6e444b 70
kgills 0:b2219e6e444b 71 /**
kgills 0:b2219e6e444b 72 * @brief Check ID.
kgills 0:b2219e6e444b 73 * @details Checks the device ID, should be 0x55 on reset.
kgills 0:b2219e6e444b 74 * @returns 0 if no errors, -1 if error.
kgills 0:b2219e6e444b 75 */
kgills 0:b2219e6e444b 76 int checkId(void);
kgills 0:b2219e6e444b 77
kgills 0:b2219e6e444b 78 /**
kgills 0:b2219e6e444b 79 * @brief Start pressure conversion.
kgills 0:b2219e6e444b 80 * @details Initiates the pressure conversion sequence. Refer to data sheet
kgills 0:b2219e6e444b 81 * for timing specifications.
kgills 0:b2219e6e444b 82 *
kgills 0:b2219e6e444b 83 * @param oss Number of samples to take.
kgills 0:b2219e6e444b 84 * @returns 0 if no errors, -1 if error.
kgills 0:b2219e6e444b 85 */
kgills 0:b2219e6e444b 86 int startPressure(BMP180::oversampling_t oss);
kgills 0:b2219e6e444b 87
kgills 0:b2219e6e444b 88 /**
kgills 0:b2219e6e444b 89 * @brief Get pressure reading.
kgills 0:b2219e6e444b 90 * @details Calculates the pressure using the data calibration data and formula.
kgills 0:b2219e6e444b 91 * Pressure is reported in Pascals.
kgills 0:b2219e6e444b 92 * @note This function should be called after calling startPressure().
kgills 0:b2219e6e444b 93 * Refer to the data sheet for the timing requirements. Calling this
kgills 0:b2219e6e444b 94 * function too soon can result in oversampling.
kgills 0:b2219e6e444b 95 *
kgills 0:b2219e6e444b 96 * @param pressure Pointer to store pressure reading.
kgills 0:b2219e6e444b 97 * @returns 0 if no errors, -1 if error.
kgills 0:b2219e6e444b 98 */
kgills 0:b2219e6e444b 99 int getPressure(int *pressure);
kgills 0:b2219e6e444b 100
kgills 0:b2219e6e444b 101 /**
kgills 0:b2219e6e444b 102 * @brief Start temperature conversion.
kgills 0:b2219e6e444b 103 * @details Initiates the temperature conversion sequence. Refer to data
kgills 0:b2219e6e444b 104 * sheet for timing specifications.
kgills 0:b2219e6e444b 105 * @returns 0 if no errors, -1 if error.
kgills 0:b2219e6e444b 106 */
kgills 0:b2219e6e444b 107 int startTemperature(void);
kgills 0:b2219e6e444b 108
kgills 0:b2219e6e444b 109 /**
kgills 0:b2219e6e444b 110 * @brief Get temperature reading.
kgills 0:b2219e6e444b 111 * @details Calculates the temperature using the data calibration data and formula.
kgills 0:b2219e6e444b 112 * Temperature is reported in degrees Celcius.
kgills 0:b2219e6e444b 113 *
kgills 0:b2219e6e444b 114 * @note This function should be called after calling startTemperature().
kgills 0:b2219e6e444b 115 * Refer to the data sheet for the timing requirements. Calling this
kgills 0:b2219e6e444b 116 * function too soon can result in oversampling.
kgills 0:b2219e6e444b 117 *
kgills 0:b2219e6e444b 118 * @param tempC Pointer to store temperature reading.
kgills 0:b2219e6e444b 119 * @returns 0 if no errors, -1 if error.
kgills 0:b2219e6e444b 120 */
kgills 0:b2219e6e444b 121 int getTemperature(float *tempC);
kgills 0:b2219e6e444b 122
kgills 0:b2219e6e444b 123 /**
kgills 0:b2219e6e444b 124 * @brief Get temperature reading.
kgills 0:b2219e6e444b 125 * @details Calculates the temperature using the data calibration data and formula.
kgills 0:b2219e6e444b 126 * Temperature is reported in 1/10ths degrees Celcius.
kgills 0:b2219e6e444b 127 *
kgills 0:b2219e6e444b 128 * @note This function should be called after calling startTemperature().
kgills 0:b2219e6e444b 129 * Refer to the data sheet for the timing requirements. Calling this
kgills 0:b2219e6e444b 130 * function too soon can result in oversampling.
kgills 0:b2219e6e444b 131 *
kgills 0:b2219e6e444b 132 * @param tempCx10 Pointer to store temperature reading.
kgills 0:b2219e6e444b 133 * @returns 0 if no errors, -1 if error.
kgills 0:b2219e6e444b 134 */
kgills 0:b2219e6e444b 135 int getTemperature(int16_t *tempCx10);
kgills 0:b2219e6e444b 136
kgills 0:b2219e6e444b 137 private:
kgills 0:b2219e6e444b 138
kgills 0:b2219e6e444b 139 typedef union {
kgills 0:b2219e6e444b 140 uint16_t value[11];
kgills 0:b2219e6e444b 141 struct {
kgills 0:b2219e6e444b 142 int16_t ac1;
kgills 0:b2219e6e444b 143 int16_t ac2;
kgills 0:b2219e6e444b 144 int16_t ac3;
kgills 0:b2219e6e444b 145 uint16_t ac4;
kgills 0:b2219e6e444b 146 uint16_t ac5;
kgills 0:b2219e6e444b 147 uint16_t ac6;
kgills 0:b2219e6e444b 148 int16_t b1;
kgills 0:b2219e6e444b 149 int16_t b2;
kgills 0:b2219e6e444b 150 int16_t mb;
kgills 0:b2219e6e444b 151 int16_t mc;
kgills 0:b2219e6e444b 152 int16_t md;
kgills 0:b2219e6e444b 153 };
kgills 0:b2219e6e444b 154 } calibration_t;
kgills 0:b2219e6e444b 155
kgills 0:b2219e6e444b 156 I2C *i2c_;
kgills 0:b2219e6e444b 157 bool i2c_owner;
kgills 0:b2219e6e444b 158
kgills 0:b2219e6e444b 159 BMP180::calibration_t calib;
kgills 0:b2219e6e444b 160 int32_t b5;
kgills 0:b2219e6e444b 161 BMP180::oversampling_t oss_;
brdarji 1:817fb4e66714 162 };