pressure5  2.0.0.0
pressure5.h
Go to the documentation of this file.
1 /*
2  * MikroSDK - MikroE Software Development Kit
3  * Copyright (c) 2019, MikroElektronika - www.mikroe.com
4  * All rights reserved.
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to deal
8  * in the Software without restriction, including without limitation the rights
9  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10  * copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in
14  * all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22  * SOFTWARE.
23  */
24 
33 // ----------------------------------------------------------------------------
34 
35 #ifndef PRESSURE5_H
36 #define PRESSURE5_H
37 
38 #include "drv_digital_out.h"
39 #include "drv_digital_in.h"
40 #include "drv_i2c_master.h"
41 #include "drv_spi_master.h"
42 
43 // -------------------------------------------------------------- PUBLIC MACROS
54 #define PRESSURE5_MAP_MIKROBUS( cfg, mikrobus ) \
55  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
56  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
57  cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
58  cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
59  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
60  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
61  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
62 
68 #define PRESSURE5_MASTER_I2C 0
69 #define PRESSURE5_MASTER_SPI 1
70 
76 #define PRESSURE5_RETVAL uint8_t
77 
78 #define PRESSURE5_OK 0x00
79 #define PRESSURE5_INIT_ERROR 0xFF
80 
86 #define PRESSURE5_REG_DEVICE_ID 0x00
87 #define PRESSURE5_REG_ERROR 0x02
88 #define PRESSURE5_REG_PRESSURE_DATA_0 0x04
89 #define PRESSURE5_REG_PRESSURE_DATA_1 0x05
90 #define PRESSURE5_REG_PRESSURE_DATA_2 0x06
91 #define PRESSURE5_REG_TEMPERATURE_DATA_0 0x07
92 #define PRESSURE5_REG_TEMPERATURE_DATA_1 0x08
93 #define PRESSURE5_REG_TEMPERATURE_DATA_2 0x09
94 #define PRESSURE5_REG_SENSOR_TIME_0 0x0C
95 #define PRESSURE5_REG_SENSOR_TIME_1 0x0D
96 #define PRESSURE5_REG_SENSOR_TIME_2 0x0E
97 #define PRESSURE5_REG_EVENT 0x10
98 #define PRESSURE5_REG_INT_STATUS 0x11
99 #define PRESSURE5_REG_FIFO_LENGTH 0x13
100 #define PRESSURE5_REG_FIFO_DATA 0x14
101 #define PRESSURE5_REG_FIFO_WATERMARK_0 0x15
102 #define PRESSURE5_REG_FIFO_WATERMARK_1 0x16
103 #define PRESSURE5_REG_FIFO_CONFIG_1 0x17
104 #define PRESSURE5_REG_FIFO_CONFIG_2 0x18
105 #define PRESSURE5_REG_INT_CTRL 0x19
106 #define PRESSURE5_REG_IF_CONFIG 0x1A
107 #define PRESSURE5_REG_POWER_CTRL 0x1B
108 #define PRESSURE5_REG_OSR 0x1C
109 #define PRESSURE5_REG_ODR 0x1D
110 #define PRESSURE5_REG_CONFIGURATION 0x1F
111 #define PRESSURE5_REG_COMMAND 0x7E
112 
118 #define PRESSURE5_FCFG_FIFO_ENABLE 0x01
119 #define PRESSURE5_FCFG_FIFO_DISABLE 0x00
120 #define PRESSURE5_FCFG_FIFO_STOP_ON_FULL_ENABLE 0x02
121 #define PRESSURE5_FCFG_FIFO_STOP_ON_FULL_DISABLE 0x00
122 #define PRESSURE5_FCFG_FIFO_TIME_ENABLE 0x04
123 #define PRESSURE5_FCFG_FIFO_TIME_DISABLE 0x00
124 #define PRESSURE5_FCFG_FIFO_PRESSURE_STORE_ENABLE 0x08
125 #define PRESSURE5_FCFG_FIFO_PRESSURE_STORE_DISABLE 0x00
126 #define PRESSURE5_FCFG_FIFO_TEMP_STORE_ENABLE 0x10
127 #define PRESSURE5_FCFG_FIFO_TEMP_STORE_DISABLE 0x00
128 
134 #define PRESSURE5_INTCFG_INT_OUTPUT_PUSH_PULL 0x00
135 #define PRESSURE5_INTCFG_INT_OUTPUT_OPEN_DRAIN 0x01
136 #define PRESSURE5_INTCFG_INT_LEVEL_ACTIVE_HIGH 0x02
137 #define PRESSURE5_INTCFG_INT_LEVEL_ACTIVE_LOW 0x00
138 #define PRESSURE5_INTCFG_INT_LATCH_ENABLE 0x04
139 #define PRESSURE5_INTCFG_INT_LATCH_DISABLE 0x00
140 #define PRESSURE5_INTCFG_FIFO_WTM_ENABLE 0x08
141 #define PRESSURE5_INTCFG_FIFO_WTM_DISABLE 0x00
142 #define PRESSURE5_INTCFG_FIFO_FULL_ENABLE 0x10
143 #define PRESSURE5_INTCFG_FIFO_FULL_DISABLE 0x00
144 #define PRESSURE5_INTCFG_DATA_READY_ENABLE 0x20
145 #define PRESSURE5_INTCFG_DATA_READY_DISABLE 0x00
146 
152 #define PRESSURE5_IFCFG_SPI_4_WIRE 0x00
153 #define PRESSURE5_IFCFG_SPI_3_WIRE 0x01
154 #define PRESSURE5_IFCFG_I2C_WATCHDOG_ENABLE 0x02
155 #define PRESSURE5_IFCFG_I2C_WATCHDOG_DISABLE 0x00
156 #define PRESSURE5_IFCFG_I2C_WATCHDOG_SHORT_1p25ms 0x00
157 #define PRESSURE5_IFCFG_I2C_WATCHDOG_LONG_40ms 0x04
158 
164 #define PRESSURE5_PCTRL_PRESSURE_SENSOR_DISABLE 0x00
165 #define PRESSURE5_PCTRL_PRESSURE_SENSOR_ENABLE 0x01
166 #define PRESSURE5_PCTRL_TEMP_SENSOR_DISABLE 0x00
167 #define PRESSURE5_PCTRL_TEMP_SENSOR_ENABLE 0x02
168 #define PRESSURE5_PCTRL_MODE_SLEEP 0x00
169 #define PRESSURE5_PCTRL_MODE_FORCED 0x10
170 #define PRESSURE5_PCTRL_MODE_NORMAL 0x30
171 
177 #define PRESSURE5_OSR_PRESSURE_x1 0x00
178 #define PRESSURE5_OSR_PRESSURE_x2 0x01
179 #define PRESSURE5_OSR_PRESSURE_x4 0x02
180 #define PRESSURE5_OSR_PRESSURE_x8 0x03
181 #define PRESSURE5_OSR_PRESSURE_x16 0x04
182 #define PRESSURE5_OSR_PRESSURE_x32 0x05
183 #define PRESSURE5_OSR_TEMP_x1 0x00 >> 1
184 #define PRESSURE5_OSR_TEMP_x2 0x10 >> 1
185 #define PRESSURE5_OSR_TEMP_x4 0x20 >> 1
186 #define PRESSURE5_OSR_TEMP_x8 0x30 >> 1
187 #define PRESSURE5_OSR_TEMP_x16 0x40 >> 1
188 #define PRESSURE5_OSR_TEMP_x32 0x50 >> 1
189 
195 #define PRESSURE5_ODR_200 0x00
196 #define PRESSURE5_ODR_100 0x01
197 #define PRESSURE5_ODR_50 0x02
198 #define PRESSURE5_ODR_25 0x03
199 #define PRESSURE5_ODR_12p5 0x04
200 #define PRESSURE5_ODR_6p25 0x05
201 #define PRESSURE5_ODR_3p1 0x06
202 #define PRESSURE5_ODR_1p5 0x07
203 #define PRESSURE5_ODR_0p75 0x08
204 #define PRESSURE5_ODR_0p39 0x09
205 #define PRESSURE5_ODR_0p2 0x0A
206 #define PRESSURE5_ODR_0p1 0x0B
207 #define PRESSURE5_ODR_0p05 0x0C
208 #define PRESSURE5_ODR_0p02 0x0D
209 #define PRESSURE5_ODR_0p01 0x0E
210 #define PRESSURE5_ODR_0p006 0x0F
211 #define PRESSURE5_ODR_0p003 0x10
212 #define PRESSURE5_ODR_0p0015 0x11
213 
219 #define PRESSURE5_CFG_FILTER_COEFF_0 0x00
220 #define PRESSURE5_CFG_FILTER_COEFF_1 0x01 << 1
221 #define PRESSURE5_CFG_FILTER_COEFF_3 0x02 << 1
222 #define PRESSURE5_CFG_FILTER_COEFF_7 0x03 << 1
223 #define PRESSURE5_CFG_FILTER_COEFF_15 0x04 << 1
224 #define PRESSURE5_CFG_FILTER_COEFF_31 0x05 << 1
225 #define PRESSURE5_CFG_FILTER_COEFF_63 0x06 << 1
226 #define PRESSURE5_CFG_FILTER_COEFF_127 0x07 << 1
227 
233 #define PRESSURE5_CMD_EXTMODE_EN_MIDDLE 0x34
234 #define PRESSURE5_CMD_FIFO_FLUSH 0xB0
235 #define PRESSURE5_CMD_SOFTWARE_RESET 0xB6
236 
242 #define PRESSURE5_DEVICE_SLAVE_ADDR_GND 0x76
243 #define PRESSURE5_DEVICE_SLAVE_ADDR_VCC 0x77
244 
250 #define PRESSURE5_TEMPERATURE_RAW_DATA 0x07
251 #define PRESSURE5_PRESSURE_RAW_DATA 0x04
252 
258 #define PRESSURE5_DEVICE_ID 0x50
259  // End group macro
263 // --------------------------------------------------------------- PUBLIC TYPES
272 typedef uint8_t pressure5_select_t;
273 
277 typedef void ( *pressure5_master_io_t )( struct pressure5_s*, uint8_t, uint8_t*, uint8_t );
278 
282 typedef struct pressure5_s
283 {
284  // Input pins
285 
286  digital_in_t int_pin;
287 
288  // Modules
289 
290  i2c_master_t i2c;
291  spi_master_t spi;
292 
293  // ctx variable
294 
295  hal_i2c_address_t slave_address;
299 
300 } pressure5_t;
301 
305 typedef struct
306 {
307  // Communication gpio pins
308 
309  pin_name_t scl;
310  pin_name_t sda;
311  pin_name_t miso;
312  pin_name_t mosi;
313  pin_name_t sck;
314  pin_name_t cs;
315 
316  // Additional gpio pins
317 
318  pin_name_t int_pin;
319 
320  // static variable
321 
322  hal_i2c_speed_t i2c_speed;
323  hal_i2c_address_t i2c_address;
324  hal_spi_speed_t spi_speed;
325  hal_spi_mode_t spi_mode;
326 
328 
330 
331 
332 typedef struct
333 {
334  uint16_t T1;
335  uint16_t T2;
336  int8_t T3;
337 
338  int16_t P1;
339  int16_t P2;
340  int8_t P3;
341  int8_t P4;
342  uint16_t P5;
343  uint16_t P6;
344  int8_t P7;
345  int8_t P8;
346  int16_t P9;
347  int8_t P10;
348  int8_t P11;
349 
350 } T_NVM_PAR;
351 
352 
353 typedef struct
354 {
355  float T1;
356  float T2;
357  float T3;
358 
359  float P1;
360  float P2;
361  float P3;
362  float P4;
363  float P5;
364  float P6;
365  float P7;
366  float P8;
367  float P9;
368  float P10;
369  float P11;
370 
371 } T_PAR_COEFF;
372  // End types group
374 
375 // ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
381 #ifdef __cplusplus
382 extern "C"{
383 #endif
384 
394 
403 
411 void pressure5_default_cfg ( pressure5_t *ctx );
412 
423 void pressure5_generic_write ( pressure5_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len );
424 
435 void pressure5_generic_read ( pressure5_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len );
436 
446 void pressure5_write_byte ( pressure5_t *ctx, uint8_t reg_addr, uint8_t data_in );
447 
455 uint8_t pressure5_read_byte ( pressure5_t *ctx, uint8_t reg_addr );
456 
465 
474 
484 uint32_t pressure5_get_raw_data ( pressure5_t *ctx, uint8_t data_addr );
485 
496 
507 
518 
519 
520 #ifdef __cplusplus
521 }
522 #endif
523 #endif // _PRESSURE5_H_
524  // End public_function group
527 
528 // ------------------------------------------------------------------------- END
uint16_t T1
Definition: pressure5.h:334
hal_spi_mode_t spi_mode
Definition: pressure5.h:325
pin_name_t mosi
Definition: pressure5.h:312
uint32_t pressure5_get_raw_data(pressure5_t *ctx, uint8_t data_addr)
Get (Temperature or Pressure) Raw data.
hal_i2c_address_t slave_address
Definition: pressure5.h:295
pin_name_t miso
Definition: pressure5.h:311
PRESSURE5_RETVAL pressure5_init(pressure5_t *ctx, pressure5_cfg_t *cfg)
Initialization function.
int8_t P7
Definition: pressure5.h:344
Definition: pressure5.h:353
int8_t T3
Definition: pressure5.h:336
hal_i2c_address_t i2c_address
Definition: pressure5.h:323
float P4
Definition: pressure5.h:362
float P5
Definition: pressure5.h:363
pin_name_t cs
Definition: pressure5.h:314
uint16_t P5
Definition: pressure5.h:342
pressure5_select_t sel
Definition: pressure5.h:327
int8_t P3
Definition: pressure5.h:340
float P6
Definition: pressure5.h:364
int8_t P11
Definition: pressure5.h:348
i2c_master_t i2c
Definition: pressure5.h:290
int16_t P1
Definition: pressure5.h:338
float P9
Definition: pressure5.h:367
float P2
Definition: pressure5.h:360
pin_name_t scl
Definition: pressure5.h:309
float T2
Definition: pressure5.h:356
int16_t P2
Definition: pressure5.h:339
float T3
Definition: pressure5.h:357
pin_name_t int_pin
Definition: pressure5.h:318
hal_i2c_speed_t i2c_speed
Definition: pressure5.h:322
void pressure5_generic_write(pressure5_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len)
Generic write function.
void pressure5_default_cfg(pressure5_t *ctx)
Click Default Configuration function.
uint16_t T2
Definition: pressure5.h:335
void pressure5_cfg_setup(pressure5_cfg_t *cfg)
Config Object Initialization function.
int8_t P4
Definition: pressure5.h:341
float P10
Definition: pressure5.h:368
void pressure5_software_reset(pressure5_t *ctx)
Software Reset.
float pressure5_get_temperature_data(pressure5_t *ctx)
Get Temperature data in C.
Definition: pressure5.h:332
void(* pressure5_master_io_t)(struct pressure5_s *, uint8_t, uint8_t *, uint8_t)
Master Input/Output type.
Definition: pressure5.h:277
float P11
Definition: pressure5.h:369
digital_in_t int_pin
Definition: pressure5.h:286
float T1
Definition: pressure5.h:355
Click configuration structure definition.
Definition: pressure5.h:305
uint8_t pressure5_get_interrupt_state(pressure5_t *ctx)
Get Interrupt pin state.
spi_master_t spi
Definition: pressure5.h:291
uint8_t pressure5_select_t
Communication type.
Definition: pressure5.h:272
void pressure5_generic_read(pressure5_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len)
Generic read function.
float P3
Definition: pressure5.h:361
pressure5_master_io_t read_f
Definition: pressure5.h:297
int8_t P8
Definition: pressure5.h:345
float pressure5_get_pressure_data(pressure5_t *ctx)
Get Pressure data in mBar.
uint8_t pressure5_read_byte(pressure5_t *ctx, uint8_t reg_addr)
Function for read one byte from register.
float P1
Definition: pressure5.h:359
Click ctx object definition.
Definition: pressure5.h:282
int8_t P10
Definition: pressure5.h:347
float P7
Definition: pressure5.h:365
pin_name_t sda
Definition: pressure5.h:310
struct pressure5_s pressure5_t
Click ctx object definition.
pin_name_t sck
Definition: pressure5.h:313
#define PRESSURE5_RETVAL
Definition: pressure5.h:76
void pressure5_write_byte(pressure5_t *ctx, uint8_t reg_addr, uint8_t data_in)
Function for write one byte to the register.
float P8
Definition: pressure5.h:366
int16_t P9
Definition: pressure5.h:346
uint16_t P6
Definition: pressure5.h:343
pressure5_select_t master_sel
Definition: pressure5.h:298
pressure5_master_io_t write_f
Definition: pressure5.h:296
hal_spi_speed_t spi_speed
Definition: pressure5.h:324
void pressure5_update_coefficient(pressure5_t *ctx)
Update calibration coefficients.