pressure21  2.1.0.0
pressure21.h
Go to the documentation of this file.
1 /****************************************************************************
2 ** Copyright (C) 2020 MikroElektronika d.o.o.
3 ** Contact: https://www.mikroe.com/contact
4 **
5 ** Permission is hereby granted, free of charge, to any person obtaining a copy
6 ** of this software and associated documentation files (the "Software"), to deal
7 ** in the Software without restriction, including without limitation the rights
8 ** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 ** copies of the Software, and to permit persons to whom the Software is
10 ** furnished to do so, subject to the following conditions:
11 ** The above copyright notice and this permission notice shall be
12 ** included in all copies or substantial portions of the Software.
13 **
14 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
16 ** OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17 ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18 ** DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
19 ** OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20 ** USE OR OTHER DEALINGS IN THE SOFTWARE.
21 ****************************************************************************/
22 
28 #ifndef PRESSURE21_H
29 #define PRESSURE21_H
30 
31 #ifdef __cplusplus
32 extern "C"{
33 #endif
34 
35 #include "drv_digital_out.h"
36 #include "drv_digital_in.h"
37 #include "drv_i2c_master.h"
38 #include "drv_spi_master.h"
39 #include "spi_specifics.h"
40 
61 #define PRESSURE21_REG_CHIP_ID 0x01
62 #define PRESSURE21_REG_REV_ID 0x02
63 #define PRESSURE21_REG_CHIP_STATUS 0x11
64 #define PRESSURE21_REG_DRIVE_CONFIG 0x13
65 #define PRESSURE21_REG_INT_CONFIG 0x14
66 #define PRESSURE21_REG_INT_SOURCE 0x15
67 #define PRESSURE21_REG_FIFO_CONFIG 0x16
68 #define PRESSURE21_REG_FIFO_COUNT 0x17
69 #define PRESSURE21_REG_FIFO_SEL 0x18
70 #define PRESSURE21_REG_TEMP_DATA_XLSB 0x1D
71 #define PRESSURE21_REG_TEMP_DATA_LSB 0x1E
72 #define PRESSURE21_REG_TEMP_DATA_MSB 0x1F
73 #define PRESSURE21_REG_PRESS_DATA_XLSB 0x20
74 #define PRESSURE21_REG_PRESS_DATA_LSB 0x21
75 #define PRESSURE21_REG_PRESS_DATA_MSB 0x22
76 #define PRESSURE21_REG_INT_STATUS 0x27
77 #define PRESSURE21_REG_STATUS 0x28
78 #define PRESSURE21_REG_FIFO_DATA 0x29
79 #define PRESSURE21_REG_NVM_ADDR 0x2B
80 #define PRESSURE21_REG_NVM_DATA_LSB 0x2C
81 #define PRESSURE21_REG_NVM_DATA_MSB 0x2D
82 #define PRESSURE21_REG_DSP_CONFIG 0x30
83 #define PRESSURE21_REG_DSP_IIR 0x31
84 #define PRESSURE21_REG_OOR_THR_P_LSB 0x32
85 #define PRESSURE21_REG_OOR_THR_P_MSB 0x33
86 #define PRESSURE21_REG_OOR_RANGE 0x34
87 #define PRESSURE21_REG_OOR_CONFIG 0x35
88 #define PRESSURE21_REG_OSR_CONFIG 0x36
89 #define PRESSURE21_REG_ODR_CONFIG 0x37
90 #define PRESSURE21_REG_OSR_EFF 0x38
91 #define PRESSURE21_REG_CMD 0x7E
92  // pressure21_reg
94 
109 #define PRESSURE21_CHIP_ID 0x50
110 
115 #define PRESSURE21_PAD_INT_DRV_DEFAULT 0x30
116 #define PRESSURE21_INT_ENABLE 0x08
117 #define PRESSURE21_INT_DISABLE 0x00
118 #define PRESSURE21_INT_OPEN_DRAIN 0x04
119 #define PRESSURE21_INT_PUSH_PULL 0x00
120 #define PRESSURE21_INT_ACTIVE_HIGH 0x02
121 #define PRESSURE21_INT_ACTIVE_LOW 0x00
122 #define PRESSURE21_INT_LATCHED 0x01
123 #define PRESSURE21_INT_PULSED 0x00
124 
129 #define PRESSURE21_OOR_P_EN 0x08
130 #define PRESSURE21_FIFO_THS_EN 0x04
131 #define PRESSURE21_FIFO_FULL_EN 0x02
132 #define PRESSURE21_DRDY_DATA_REG_EN 0x01
133 #define PRESSURE21_DISABLE_INT 0x00
134 
139 #define PRESSURE21_INT_STAT_POR 0x10
140 #define PRESSURE21_INT_STAT_OOR_P 0x08
141 #define PRESSURE21_INT_STAT_FIFO_THS 0x04
142 #define PRESSURE21_INT_STAT_FIFO_FULL 0x02
143 #define PRESSURE21_INT_STAT_DRDY_DATA_REG 0x01
144 
149 #define PRESSURE21_OOR_SEL_IIR_P 0x80
150 #define PRESSURE21_FIFO_SEL_IIR_P 0x40
151 #define PRESSURE21_SHDW_SEL_IIR_P 0x20
152 #define PRESSURE21_FIFO_SEL_IIR_T 0x10
153 #define PRESSURE21_SHDW_SEL_IIR_T 0x08
154 #define PRESSURE21_IIR_FLUSH_FORCED_EN 0x04
155 #define PRESSURE21_DSP_CFG_RESERVED_BITS 0x03
156 
161 #define PRESSURE21_SET_IIR_P_BYPASS 0x00
162 #define PRESSURE21_SET_IIR_P_FLT_COEF_1 0x08
163 #define PRESSURE21_SET_IIR_P_FLT_COEF_3 0x10
164 #define PRESSURE21_SET_IIR_P_FLT_COEF_7 0x18
165 #define PRESSURE21_SET_IIR_P_FLT_COEF_15 0x20
166 #define PRESSURE21_SET_IIR_P_FLT_COEF_31 0x28
167 #define PRESSURE21_SET_IIR_P_FLT_COEF_63 0x30
168 #define PRESSURE21_SET_IIR_P_FLT_COEF_127 0x38
169 #define PRESSURE21_SET_IIR_T_BYPASS 0x00
170 #define PRESSURE21_SET_IIR_T_FLT_COEF_1 0x01
171 #define PRESSURE21_SET_IIR_T_FLT_COEF_3 0x02
172 #define PRESSURE21_SET_IIR_T_FLT_COEF_7 0x03
173 #define PRESSURE21_SET_IIR_T_FLT_COEF_15 0x04
174 #define PRESSURE21_SET_IIR_T_FLT_COEF_31 0x05
175 #define PRESSURE21_SET_IIR_T_FLT_COEF_63 0x06
176 #define PRESSURE21_SET_IIR_T_FLT_COEF_127 0x07
177 
182 #define PRESSURE21_PRESS_EN 0x40
183 #define PRESSURE21_OSR_P_1X 0x00
184 #define PRESSURE21_OSR_P_2X 0x08
185 #define PRESSURE21_OSR_P_4X 0x10
186 #define PRESSURE21_OSR_P_8X 0x18
187 #define PRESSURE21_OSR_P_16X 0x20
188 #define PRESSURE21_OSR_P_32X 0x28
189 #define PRESSURE21_OSR_P_64X 0x30
190 #define PRESSURE21_OSR_P_128X 0x38
191 #define PRESSURE21_OSR_T_1X 0x00
192 #define PRESSURE21_OSR_T_2X 0x01
193 #define PRESSURE21_OSR_T_4X 0x02
194 #define PRESSURE21_OSR_T_8X 0x03
195 #define PRESSURE21_OSR_T_16X 0x04
196 #define PRESSURE21_OSR_T_32X 0x05
197 #define PRESSURE21_OSR_T_64X 0x06
198 #define PRESSURE21_OSR_T_128X 0x07
199 
204 #define PRESSURE21_DEEP_DIS 0x80
205 #define PRESSURE21_ODR_240_HZ 0x00
206 #define PRESSURE21_ODR_218p537_HZ 0x04
207 #define PRESSURE21_ODR_199p111_HZ 0x08
208 #define PRESSURE21_ODR_179p2_HZ 0x0C
209 #define PRESSURE21_ODR_160_HZ 0x10
210 #define PRESSURE21_ODR_149p333_HZ 0x14
211 #define PRESSURE21_ODR_140_HZ 0x18
212 #define PRESSURE21_ODR_129p855_HZ 0x1C
213 #define PRESSURE21_ODR_120_HZ 0x20
214 #define PRESSURE21_ODR_110p164_HZ 0x24
215 #define PRESSURE21_ODR_100p299_HZ 0x28
216 #define PRESSURE21_ODR_89p6_HZ 0x2C
217 #define PRESSURE21_ODR_80_HZ 0x30
218 #define PRESSURE21_ODR_70_HZ 0x34
219 #define PRESSURE21_ODR_60_HZ 0x38
220 #define PRESSURE21_ODR_50p056_HZ 0x3C
221 #define PRESSURE21_ODR_45p025_HZ 0x40
222 #define PRESSURE21_ODR_40_HZ 0x44
223 #define PRESSURE21_ODR_35_HZ 0x48
224 #define PRESSURE21_ODR_30_HZ 0x4C
225 #define PRESSURE21_ODR_25p005_HZ 0x50
226 #define PRESSURE21_ODR_20_HZ 0x54
227 #define PRESSURE21_ODR_15_HZ 0x58
228 #define PRESSURE21_ODR_10_HZ 0x5C
229 #define PRESSURE21_ODR_5_HZ 0x60
230 #define PRESSURE21_ODR_4_HZ 0x64
231 #define PRESSURE21_ODR_3_HZ 0x68
232 #define PRESSURE21_ODR_2_HZ 0x6C
233 #define PRESSURE21_ODR_1_HZ 0x70
234 #define PRESSURE21_ODR_0p5_HZ 0x74
235 #define PRESSURE21_ODR_0p25_HZ 0x78
236 #define PRESSURE21_ODR_0p125_HZ 0x7C
237 #define PRESSURE21_PWR_MODE_STANDBY 0x00
238 #define PRESSURE21_PWR_MODE_NORMAL 0x01
239 #define PRESSURE21_PWR_MODE_FORCE 0x02
240 #define PRESSURE21_PWR_MODE_NON_STOP 0x03
241 
246 #define PRESSURE21_PRESS_RESOLUTION 64.0
247 #define PRESSURE21_TEMP_RESOLUTION 65536.0
248 #define PRESSURE21_PA_TO_MBAR 0.01
249 
255 #define PRESSURE21_DEVICE_ADDRESS_0 0x46
256 #define PRESSURE21_DEVICE_ADDRESS_1 0x47
257 
266 #define PRESSURE21_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
267 #define PRESSURE21_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
268  // pressure21_set
270 
285 #define PRESSURE21_MAP_MIKROBUS( cfg, mikrobus ) \
286  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
287  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
288  cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
289  cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
290  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
291  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
292  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
293  // pressure21_map // pressure21
296 
301 typedef enum
302 {
307 
312 typedef err_t ( *pressure21_master_io_t )( struct pressure21_s*, uint8_t, uint8_t*, uint8_t );
318 typedef struct pressure21_s
319 {
320  digital_in_t int_pin;
322  i2c_master_t i2c;
323  spi_master_t spi;
325  uint8_t slave_address;
326  pin_name_t chip_select;
333 
338 typedef struct
339 {
340  pin_name_t scl;
341  pin_name_t sda;
342  pin_name_t miso;
343  pin_name_t mosi;
344  pin_name_t sck;
345  pin_name_t cs;
346  pin_name_t int_pin;
348  uint32_t i2c_speed;
349  uint8_t i2c_address;
351  uint32_t spi_speed;
352  spi_master_mode_t spi_mode;
353  spi_master_chip_select_polarity_t cs_polarity;
358 
363 typedef enum
364 {
366  PRESSURE21_ERROR = -1
367 
369 
386 
402 
417 
431 
446 err_t pressure21_generic_write ( pressure21_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len );
447 
462 err_t pressure21_generic_read ( pressure21_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len );
463 
476 err_t pressure21_write_register ( pressure21_t *ctx, uint8_t reg, uint8_t data_in );
477 
490 err_t pressure21_read_register ( pressure21_t *ctx, uint8_t reg, uint8_t *data_out );
491 
503 
513 
526 err_t pressure21_get_sensor_data ( pressure21_t *ctx, float *pressure, float *temperature );
527 
528 #ifdef __cplusplus
529 }
530 #endif
531 #endif // PRESSURE21_H
532  // pressure21
534 
535 // ------------------------------------------------------------------------ END
pressure21_s::i2c
i2c_master_t i2c
Definition: pressure21.h:322
pressure21_check_communication
err_t pressure21_check_communication(pressure21_t *ctx)
Pressure 21 check communication function.
pressure21_cfg_t::mosi
pin_name_t mosi
Definition: pressure21.h:343
pressure21_cfg_t::int_pin
pin_name_t int_pin
Definition: pressure21.h:346
pressure21_default_cfg
err_t pressure21_default_cfg(pressure21_t *ctx)
Pressure 21 default configuration function.
pressure21_s::read_f
pressure21_master_io_t read_f
Definition: pressure21.h:330
pressure21_cfg_t::sck
pin_name_t sck
Definition: pressure21.h:344
pressure21_s::spi
spi_master_t spi
Definition: pressure21.h:323
pressure21_drv_t
pressure21_drv_t
Pressure 21 Click driver selector.
Definition: pressure21.h:302
pressure21_cfg_t::spi_mode
spi_master_mode_t spi_mode
Definition: pressure21.h:352
pressure21_cfg_t::miso
pin_name_t miso
Definition: pressure21.h:342
pressure21_init
err_t pressure21_init(pressure21_t *ctx, pressure21_cfg_t *cfg)
Pressure 21 initialization function.
spi_specifics.h
This file contains SPI specific macros, functions, etc.
pressure21_read_register
err_t pressure21_read_register(pressure21_t *ctx, uint8_t reg, uint8_t *data_out)
Pressure 21 read register function.
pressure21_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: pressure21.h:348
pressure21_cfg_setup
void pressure21_cfg_setup(pressure21_cfg_t *cfg)
Pressure 21 configuration object setup function.
pressure21_s::write_f
pressure21_master_io_t write_f
Definition: pressure21.h:329
pressure21_s::chip_select
pin_name_t chip_select
Definition: pressure21.h:326
pressure21_cfg_t::drv_sel
pressure21_drv_t drv_sel
Definition: pressure21.h:355
pressure21_cfg_t
Pressure 21 Click configuration object.
Definition: pressure21.h:339
pressure21_generic_read
err_t pressure21_generic_read(pressure21_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len)
Pressure 21 data reading function.
pressure21_master_io_t
err_t(* pressure21_master_io_t)(struct pressure21_s *, uint8_t, uint8_t *, uint8_t)
Pressure 21 Click driver interface.
Definition: pressure21.h:312
pressure21_get_sensor_data
err_t pressure21_get_sensor_data(pressure21_t *ctx, float *pressure, float *temperature)
Pressure 21 get sensor data function.
pressure21_cfg_t::cs
pin_name_t cs
Definition: pressure21.h:345
PRESSURE21_ERROR
@ PRESSURE21_ERROR
Definition: pressure21.h:366
pressure21_cfg_t::scl
pin_name_t scl
Definition: pressure21.h:340
pressure21_t
struct pressure21_s pressure21_t
Pressure 21 Click context object.
pressure21_s::int_pin
digital_in_t int_pin
Definition: pressure21.h:320
pressure21_generic_write
err_t pressure21_generic_write(pressure21_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len)
Pressure 21 data writing function.
pressure21_s::drv_sel
pressure21_drv_t drv_sel
Definition: pressure21.h:327
pressure21_s::slave_address
uint8_t slave_address
Definition: pressure21.h:325
PRESSURE21_DRV_SEL_I2C
@ PRESSURE21_DRV_SEL_I2C
Definition: pressure21.h:304
pressure21_cfg_t::cs_polarity
spi_master_chip_select_polarity_t cs_polarity
Definition: pressure21.h:353
PRESSURE21_OK
@ PRESSURE21_OK
Definition: pressure21.h:365
pressure21_drv_interface_selection
void pressure21_drv_interface_selection(pressure21_cfg_t *cfg, pressure21_drv_t drv_sel)
Pressure 21 driver interface setup function.
pressure21_s
Pressure 21 Click context object.
Definition: pressure21.h:319
pressure21_get_int_pin
uint8_t pressure21_get_int_pin(pressure21_t *ctx)
Pressure 21 get int pin function.
pressure21_cfg_t::i2c_address
uint8_t i2c_address
Definition: pressure21.h:349
pressure21_cfg_t::sda
pin_name_t sda
Definition: pressure21.h:341
pressure21_cfg_t::spi_speed
uint32_t spi_speed
Definition: pressure21.h:351
pressure21_return_value_t
pressure21_return_value_t
Pressure 21 Click return value data.
Definition: pressure21.h:364
pressure21_write_register
err_t pressure21_write_register(pressure21_t *ctx, uint8_t reg, uint8_t data_in)
Pressure 21 write register function.
PRESSURE21_DRV_SEL_SPI
@ PRESSURE21_DRV_SEL_SPI
Definition: pressure21.h:303