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

Fork of LPS25H by Kenji Arai

Committer:
feunoir
Date:
Wed Nov 30 18:17:32 2016 +0000
Revision:
2:b6cb5c37b974
Parent:
1:5f21b0eac2c2
Child:
3:755ac86eb6fd
????????????

Who changed what in which revision?

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