STMicroelectronics barometric pressure sensor library. This library modified from KenjiArai's LPS25H library.

Fork of LPS25H by Kenji Arai

Committer:
feunoir
Date:
Mon Jul 10 01:15:03 2017 +0000
Revision:
6:c97ae96fea8f
Parent:
4:50be6522da7f
some fix

Who changed what in which revision?

UserRevisionLine numberNew contents of line
feunoir 1:5f21b0eac2c2 1 /*
feunoir 1:5f21b0eac2c2 2 * mbed library program
feunoir 4:50be6522da7f 3 * LPS22HB MEMS pressure sensor: 260-1260 hPa absolute digital output barometer
feunoir 1:5f21b0eac2c2 4 * made by STMicroelectronics
feunoir 4:50be6522da7f 5 * http://www.st.com/ja/mems-and-sensors/lps22hb.html
feunoir 1:5f21b0eac2c2 6 *
feunoir 4:50be6522da7f 7 * Modified for LPS22HB by feunoir
feunoir 4:50be6522da7f 8 * http://mbed.org/users/feunoir/
feunoir 4:50be6522da7f 9 *
feunoir 1:5f21b0eac2c2 10 * Copyright (c) 2015 Kenji Arai / JH1PJL
feunoir 1:5f21b0eac2c2 11 * http://www.page.sannet.ne.jp/kenjia/index.html
feunoir 1:5f21b0eac2c2 12 * http://mbed.org/users/kenjiArai/
feunoir 1:5f21b0eac2c2 13 *
feunoir 1:5f21b0eac2c2 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
feunoir 1:5f21b0eac2c2 15 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
feunoir 1:5f21b0eac2c2 16 * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
feunoir 1:5f21b0eac2c2 17 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
feunoir 1:5f21b0eac2c2 18 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
feunoir 1:5f21b0eac2c2 19 */
feunoir 1:5f21b0eac2c2 20 /*
feunoir 1:5f21b0eac2c2 21 *---------------- REFERENCE ----------------------------------------------------------------------
feunoir 1:5f21b0eac2c2 22 * Original Information
feunoir 4:50be6522da7f 23 * http://www.st.com/ja/mems-and-sensors/lps22hb.html
feunoir 4:50be6522da7f 24 * AN4833 Application Note (as follows)
feunoir 4:50be6522da7f 25 * http://www.st.com/resource/en/application_note/dm00269729.pdf
feunoir 1:5f21b0eac2c2 26 * Device kit
feunoir 4:50be6522da7f 27 * https://strawberry-linux.com/catalog/items?code=12122
feunoir 1:5f21b0eac2c2 28 */
feunoir 1:5f21b0eac2c2 29
feunoir 1:5f21b0eac2c2 30 #ifndef LPS22HB_H
feunoir 1:5f21b0eac2c2 31 #define LPS22HB_H
feunoir 1:5f21b0eac2c2 32
feunoir 1:5f21b0eac2c2 33 #include "mbed.h"
feunoir 1:5f21b0eac2c2 34
feunoir 1:5f21b0eac2c2 35 // LPS22HB Address
feunoir 1:5f21b0eac2c2 36 // 7bit address = 0b101110x(0x5c or 0x5d depends on SA0/SDO)
feunoir 1:5f21b0eac2c2 37 #define LPS22HB_G_CHIP_ADDR (0x5c << 1) // SA0(=SDO pin) = Ground
feunoir 1:5f21b0eac2c2 38 #define LPS22HB_V_CHIP_ADDR (0x5d << 1) // SA0(=SDO pin) = Vdd
feunoir 1:5f21b0eac2c2 39
feunoir 1:5f21b0eac2c2 40 // LPS22HB ID
feunoir 1:5f21b0eac2c2 41 #define I_AM_LPS22HB 0xb1
feunoir 1:5f21b0eac2c2 42
feunoir 1:5f21b0eac2c2 43 // Register's definition
feunoir 1:5f21b0eac2c2 44 #define LPS22HB_WHO_AM_I 0x0f
feunoir 1:5f21b0eac2c2 45 #define LPS22HB_RES_CONF 0x1a
feunoir 1:5f21b0eac2c2 46
feunoir 1:5f21b0eac2c2 47 #define LPS22HB_CTRL_REG1 0x10
feunoir 1:5f21b0eac2c2 48 #define LPS22HB_CTRL_REG2 0x11
feunoir 1:5f21b0eac2c2 49 #define LPS22HB_CTRL_REG3 0x12
feunoir 1:5f21b0eac2c2 50
feunoir 1:5f21b0eac2c2 51 #define LPS22HB_STATUS_REG 0x27
feunoir 1:5f21b0eac2c2 52 #define LPS22HB_PRESS_POUT_XL 0x28
feunoir 1:5f21b0eac2c2 53 #define LPS22HB_PRESS_OUT_L 0x29
feunoir 1:5f21b0eac2c2 54 #define LPS22HB_PRESS_OUT_H 0x2a
feunoir 1:5f21b0eac2c2 55 #define LPS22HB_TEMP_OUT_L 0x2b
feunoir 1:5f21b0eac2c2 56 #define LPS22HB_TEMP_OUT_H 0x2c
feunoir 1:5f21b0eac2c2 57
feunoir 1:5f21b0eac2c2 58 #define LPS22HB_FIFO_CTRL 0x14
feunoir 1:5f21b0eac2c2 59 #define LPS22HB_FIFO_STATUS 0x26
feunoir 1:5f21b0eac2c2 60
feunoir 1:5f21b0eac2c2 61
feunoir 1:5f21b0eac2c2 62 /** Interface for STMicronics MEMS pressure sensor
feunoir 1:5f21b0eac2c2 63 * Chip: LPS22HB
feunoir 1:5f21b0eac2c2 64 *
feunoir 1:5f21b0eac2c2 65 * @code
feunoir 1:5f21b0eac2c2 66 * #include "mbed.h"
feunoir 1:5f21b0eac2c2 67 * #include "LPS22HB.h"
feunoir 1:5f21b0eac2c2 68 *
feunoir 1:5f21b0eac2c2 69 * // I2C Communication
feunoir 1:5f21b0eac2c2 70 * LPS22HB baro(p_sda, p_scl, LPS22HB_G_CHIP_ADDR);
feunoir 1:5f21b0eac2c2 71 * // If you connected I2C line not only this device but also other devices,
feunoir 1:5f21b0eac2c2 72 * // you need to declare following method.
feunoir 1:5f21b0eac2c2 73 * I2C i2c(dp5,dp27); // SDA, SCL
feunoir 1:5f21b0eac2c2 74 * LPS22HB baro(i2c, LPS22HB_G_CHIP_ADDR);
feunoir 1:5f21b0eac2c2 75 *
feunoir 1:5f21b0eac2c2 76 * int main() {
feunoir 1:5f21b0eac2c2 77 * while( trure){
feunoir 1:5f21b0eac2c2 78 * baro.get();
feunoir 1:5f21b0eac2c2 79 * printf("Presere: 0x%6.1f, Temperature: 0x%+4.1f\r\n", baro.pressue(), baro.temperature());
feunoir 1:5f21b0eac2c2 80 * wait(1.0);
feunoir 1:5f21b0eac2c2 81 * }
feunoir 1:5f21b0eac2c2 82 * }
feunoir 1:5f21b0eac2c2 83 * @endcode
feunoir 1:5f21b0eac2c2 84 */
feunoir 1:5f21b0eac2c2 85
feunoir 1:5f21b0eac2c2 86 class LPS22HB
feunoir 1:5f21b0eac2c2 87 {
feunoir 1:5f21b0eac2c2 88 public:
feunoir 1:5f21b0eac2c2 89
feunoir 1:5f21b0eac2c2 90 enum lps22hb_odr {
feunoir 1:5f21b0eac2c2 91 LPS22HB_PD = 0x00,
feunoir 1:5f21b0eac2c2 92 LPS22HB_ODR_1HZ = 0x10,
feunoir 1:5f21b0eac2c2 93 LPS22HB_ODR_10HZ = 0x20,
feunoir 1:5f21b0eac2c2 94 LPS22HB_ODR_25HZ = 0x30,
feunoir 1:5f21b0eac2c2 95 LPS22HB_ODR_50HZ = 0x40,
feunoir 1:5f21b0eac2c2 96 LPS22HB_ODR_75HZ = 0x50
feunoir 1:5f21b0eac2c2 97 };
feunoir 1:5f21b0eac2c2 98
feunoir 1:5f21b0eac2c2 99 enum lps22hb_lpf {
feunoir 1:5f21b0eac2c2 100 LPS22HB_LPF_DISABLE = 0x00,
feunoir 1:5f21b0eac2c2 101 LPS22HB_LPF_BW9 = 0x08,
feunoir 1:5f21b0eac2c2 102 LPS22HB_LPF_BW20 = 0x0c
feunoir 1:5f21b0eac2c2 103 };
feunoir 1:5f21b0eac2c2 104
feunoir 1:5f21b0eac2c2 105 enum lps22hb_drdy {
feunoir 1:5f21b0eac2c2 106 LPS22HB_DRDY_DISABLE = 0x00,
feunoir 1:5f21b0eac2c2 107 LPS22HB_DRDY_ENABLE = 0x04
feunoir 1:5f21b0eac2c2 108 };
feunoir 1:5f21b0eac2c2 109
feunoir 1:5f21b0eac2c2 110 /** Configure data pin
feunoir 1:5f21b0eac2c2 111 * @param data SDA and SCL pins
feunoir 1:5f21b0eac2c2 112 * @param device address LPS22HB(SA0=0 or 1), LPS22HB_G_CHIP_ADDR or LPS22HB_V_CHIP_ADDR
feunoir 1:5f21b0eac2c2 113 * @param Operation mode FIFO_HW_FILTER(default) or FIFO_BYPASS (Option parameter)
feunoir 1:5f21b0eac2c2 114 */
feunoir 1:5f21b0eac2c2 115 LPS22HB(PinName p_sda, PinName p_scl, uint8_t addr);
feunoir 3:755ac86eb6fd 116
feunoir 1:5f21b0eac2c2 117 /** Configure data pin (with other devices on I2C line)
feunoir 1:5f21b0eac2c2 118 * @param I2C previous definition
feunoir 1:5f21b0eac2c2 119 * @param device address LPS22HB(SA0=0 or 1), LPS22HB_G_CHIP_ADDR or LPS22HB_V_CHIP_ADDR
feunoir 1:5f21b0eac2c2 120 * @param Operation mode FIFO_HW_FILTER(default) or FIFO_BYPASS (Option parameter)
feunoir 1:5f21b0eac2c2 121 */
feunoir 1:5f21b0eac2c2 122 LPS22HB(I2C& p_i2c, uint8_t addr);
feunoir 3:755ac86eb6fd 123
feunoir 3:755ac86eb6fd 124 ~LPS22HB();
feunoir 1:5f21b0eac2c2 125
feunoir 1:5f21b0eac2c2 126 /** Start convertion & data save
feunoir 1:5f21b0eac2c2 127 * @param none
feunoir 1:5f21b0eac2c2 128 * @return none
feunoir 1:5f21b0eac2c2 129 */
feunoir 1:5f21b0eac2c2 130 void get(void);
feunoir 1:5f21b0eac2c2 131
feunoir 1:5f21b0eac2c2 132 /** Read pressure data
feunoir 1:5f21b0eac2c2 133 * @param none
feunoir 3:755ac86eb6fd 134 * @return pressure
feunoir 1:5f21b0eac2c2 135 */
feunoir 1:5f21b0eac2c2 136 float pressure(void);
feunoir 3:755ac86eb6fd 137
feunoir 3:755ac86eb6fd 138 /** Read raw pressure data
feunoir 3:755ac86eb6fd 139 * @param none
feunoir 3:755ac86eb6fd 140 * @return raw pressure
feunoir 3:755ac86eb6fd 141 */
feunoir 3:755ac86eb6fd 142 uint32_t pressure_raw(void); // add by user
feunoir 1:5f21b0eac2c2 143
feunoir 1:5f21b0eac2c2 144 /** Read temperature data
feunoir 1:5f21b0eac2c2 145 * @param none
feunoir 1:5f21b0eac2c2 146 * @return temperature
feunoir 1:5f21b0eac2c2 147 */
feunoir 1:5f21b0eac2c2 148 float temperature(void);
feunoir 3:755ac86eb6fd 149
feunoir 3:755ac86eb6fd 150 /** Read raw temperature data
feunoir 3:755ac86eb6fd 151 * @param none
feunoir 3:755ac86eb6fd 152 * @return raw temperature
feunoir 3:755ac86eb6fd 153 */
feunoir 3:755ac86eb6fd 154 int16_t temperature_raw(void); // add by user
feunoir 1:5f21b0eac2c2 155
feunoir 1:5f21b0eac2c2 156 /** Read a ID number
feunoir 1:5f21b0eac2c2 157 * @param none
feunoir 1:5f21b0eac2c2 158 * @return if STM MEMS LPS22HB, it should be I_AM_ LPS22HB
feunoir 1:5f21b0eac2c2 159 */
feunoir 1:5f21b0eac2c2 160 uint8_t read_id(void);
feunoir 1:5f21b0eac2c2 161
feunoir 1:5f21b0eac2c2 162 /** Read Data Ready flag
feunoir 1:5f21b0eac2c2 163 * @param none
feunoir 1:5f21b0eac2c2 164 * @return 1 = Ready
feunoir 1:5f21b0eac2c2 165 */
feunoir 1:5f21b0eac2c2 166 uint8_t data_ready(void);
feunoir 1:5f21b0eac2c2 167
feunoir 1:5f21b0eac2c2 168 /** Set I2C clock frequency
feunoir 1:5f21b0eac2c2 169 * @param freq.
feunoir 1:5f21b0eac2c2 170 * @return none
feunoir 1:5f21b0eac2c2 171 */
feunoir 1:5f21b0eac2c2 172 void frequency(int hz);
feunoir 1:5f21b0eac2c2 173
feunoir 1:5f21b0eac2c2 174 /** Read register (general purpose)
feunoir 1:5f21b0eac2c2 175 * @param register's address
feunoir 1:5f21b0eac2c2 176 * @return register data
feunoir 1:5f21b0eac2c2 177 */
feunoir 1:5f21b0eac2c2 178 uint8_t read_reg(uint8_t addr);
feunoir 1:5f21b0eac2c2 179
feunoir 1:5f21b0eac2c2 180 /** Write register (general purpose)
feunoir 1:5f21b0eac2c2 181 * @param register's address
feunoir 1:5f21b0eac2c2 182 * @param data
feunoir 1:5f21b0eac2c2 183 * @return none
feunoir 1:5f21b0eac2c2 184 */
feunoir 1:5f21b0eac2c2 185 void write_reg(uint8_t addr, uint8_t data);
feunoir 1:5f21b0eac2c2 186
feunoir 2:b6cb5c37b974 187 /** Set output data rate
feunoir 1:5f21b0eac2c2 188 * @param data rate config
feunoir 1:5f21b0eac2c2 189 * @return none
feunoir 1:5f21b0eac2c2 190 */
feunoir 2:b6cb5c37b974 191 void set_odr(lps22hb_odr odrcfg = LPS22HB_ODR_75HZ); //add by user
feunoir 1:5f21b0eac2c2 192
feunoir 2:b6cb5c37b974 193 /** LPF
feunoir 1:5f21b0eac2c2 194 * @param LPF config
feunoir 1:5f21b0eac2c2 195 * @return none
feunoir 1:5f21b0eac2c2 196 */
feunoir 2:b6cb5c37b974 197 void set_lpf(lps22hb_lpf lpfcfg = LPS22HB_LPF_DISABLE); //add by user
feunoir 1:5f21b0eac2c2 198
feunoir 2:b6cb5c37b974 199 /** DRDY
feunoir 1:5f21b0eac2c2 200 * @param DRDY config
feunoir 1:5f21b0eac2c2 201 * @return none
feunoir 1:5f21b0eac2c2 202 */
feunoir 2:b6cb5c37b974 203 void drdy(lps22hb_drdy drdycfg = LPS22HB_DRDY_DISABLE); //add by user
feunoir 1:5f21b0eac2c2 204
feunoir 1:5f21b0eac2c2 205 protected:
feunoir 3:755ac86eb6fd 206 I2C* i2c_p;
feunoir 3:755ac86eb6fd 207 I2C& _i2c;
feunoir 1:5f21b0eac2c2 208
feunoir 1:5f21b0eac2c2 209 void init(void);
feunoir 1:5f21b0eac2c2 210
feunoir 1:5f21b0eac2c2 211 private:
feunoir 1:5f21b0eac2c2 212 char dt[6]; // working buffer
feunoir 1:5f21b0eac2c2 213 uint8_t LPS22HB_addr; // Sensor address
feunoir 1:5f21b0eac2c2 214 uint8_t LPS22HB_id; // ID
feunoir 1:5f21b0eac2c2 215 uint8_t LPS22HB_ready; // Device is on I2C line = 1, not = 0
feunoir 1:5f21b0eac2c2 216 uint8_t LPS22HB_mode; // Operation mode
feunoir 1:5f21b0eac2c2 217 uint32_t press; // pressure raw data
feunoir 1:5f21b0eac2c2 218 int16_t temp; // temperature raw data
feunoir 1:5f21b0eac2c2 219 };
feunoir 1:5f21b0eac2c2 220
feunoir 3:755ac86eb6fd 221 #endif // LPS22HB_H