pressure5  2.0.0.0
pressure5.h
Go to the documentation of this file.
1 /*
2  * MikroSDK - MikroE Software Development Kit
3  * Copyright© 2020 MikroElektronika d.o.o.
4  *
5  * Permission is hereby granted, free of charge, to any person
6  * obtaining a copy of this software and associated documentation
7  * files (the "Software"), to deal in the Software without restriction,
8  * including without limitation the rights to use, copy, modify, merge,
9  * publish, distribute, sublicense, and/or sell copies of the Software,
10  * and to permit persons to whom the Software is furnished to do so,
11  * subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be
14  * included in all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
22  * OR OTHER DEALINGS IN THE SOFTWARE.
23  */
24 
33 // ----------------------------------------------------------------------------
34 
35 #ifndef PRESSURE5_H
36 #define PRESSURE5_H
37 
38 #include "mikrosdk_version.h"
39 
40 #ifdef __GNUC__
41 #if mikroSDK_GET_VERSION < 20800ul
42 #include "rcu_delays.h"
43 #else
44 #include "delays.h"
45 #endif
46 #endif
47 
48 #include "drv_digital_out.h"
49 #include "drv_digital_in.h"
50 #include "drv_i2c_master.h"
51 #include "drv_spi_master.h"
52 
53 // -------------------------------------------------------------- PUBLIC MACROS
64 #define PRESSURE5_MAP_MIKROBUS( cfg, mikrobus ) \
65  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
66  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
67  cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
68  cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
69  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
70  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
71  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
72 
79 #define PRESSURE5_MASTER_I2C 0
80 #define PRESSURE5_MASTER_SPI 1
81 
87 #define PRESSURE5_RETVAL uint8_t
88 
89 #define PRESSURE5_OK 0x00
90 #define PRESSURE5_INIT_ERROR 0xFF
91 
97 #define PRESSURE5_REG_DEVICE_ID 0x00
98 #define PRESSURE5_REG_ERROR 0x02
99 #define PRESSURE5_REG_PRESSURE_DATA_0 0x04
100 #define PRESSURE5_REG_PRESSURE_DATA_1 0x05
101 #define PRESSURE5_REG_PRESSURE_DATA_2 0x06
102 #define PRESSURE5_REG_TEMPERATURE_DATA_0 0x07
103 #define PRESSURE5_REG_TEMPERATURE_DATA_1 0x08
104 #define PRESSURE5_REG_TEMPERATURE_DATA_2 0x09
105 #define PRESSURE5_REG_SENSOR_TIME_0 0x0C
106 #define PRESSURE5_REG_SENSOR_TIME_1 0x0D
107 #define PRESSURE5_REG_SENSOR_TIME_2 0x0E
108 #define PRESSURE5_REG_EVENT 0x10
109 #define PRESSURE5_REG_INT_STATUS 0x11
110 #define PRESSURE5_REG_FIFO_LENGTH 0x13
111 #define PRESSURE5_REG_FIFO_DATA 0x14
112 #define PRESSURE5_REG_FIFO_WATERMARK_0 0x15
113 #define PRESSURE5_REG_FIFO_WATERMARK_1 0x16
114 #define PRESSURE5_REG_FIFO_CONFIG_1 0x17
115 #define PRESSURE5_REG_FIFO_CONFIG_2 0x18
116 #define PRESSURE5_REG_INT_CTRL 0x19
117 #define PRESSURE5_REG_IF_CONFIG 0x1A
118 #define PRESSURE5_REG_POWER_CTRL 0x1B
119 #define PRESSURE5_REG_OSR 0x1C
120 #define PRESSURE5_REG_ODR 0x1D
121 #define PRESSURE5_REG_CONFIGURATION 0x1F
122 #define PRESSURE5_REG_COMMAND 0x7E
123 
129 #define PRESSURE5_FCFG_FIFO_ENABLE 0x01
130 #define PRESSURE5_FCFG_FIFO_DISABLE 0x00
131 #define PRESSURE5_FCFG_FIFO_STOP_ON_FULL_ENABLE 0x02
132 #define PRESSURE5_FCFG_FIFO_STOP_ON_FULL_DISABLE 0x00
133 #define PRESSURE5_FCFG_FIFO_TIME_ENABLE 0x04
134 #define PRESSURE5_FCFG_FIFO_TIME_DISABLE 0x00
135 #define PRESSURE5_FCFG_FIFO_PRESSURE_STORE_ENABLE 0x08
136 #define PRESSURE5_FCFG_FIFO_PRESSURE_STORE_DISABLE 0x00
137 #define PRESSURE5_FCFG_FIFO_TEMP_STORE_ENABLE 0x10
138 #define PRESSURE5_FCFG_FIFO_TEMP_STORE_DISABLE 0x00
139 
145 #define PRESSURE5_INTCFG_INT_OUTPUT_PUSH_PULL 0x00
146 #define PRESSURE5_INTCFG_INT_OUTPUT_OPEN_DRAIN 0x01
147 #define PRESSURE5_INTCFG_INT_LEVEL_ACTIVE_HIGH 0x02
148 #define PRESSURE5_INTCFG_INT_LEVEL_ACTIVE_LOW 0x00
149 #define PRESSURE5_INTCFG_INT_LATCH_ENABLE 0x04
150 #define PRESSURE5_INTCFG_INT_LATCH_DISABLE 0x00
151 #define PRESSURE5_INTCFG_FIFO_WTM_ENABLE 0x08
152 #define PRESSURE5_INTCFG_FIFO_WTM_DISABLE 0x00
153 #define PRESSURE5_INTCFG_FIFO_FULL_ENABLE 0x10
154 #define PRESSURE5_INTCFG_FIFO_FULL_DISABLE 0x00
155 #define PRESSURE5_INTCFG_DATA_READY_ENABLE 0x20
156 #define PRESSURE5_INTCFG_DATA_READY_DISABLE 0x00
157 
163 #define PRESSURE5_IFCFG_SPI_4_WIRE 0x00
164 #define PRESSURE5_IFCFG_SPI_3_WIRE 0x01
165 #define PRESSURE5_IFCFG_I2C_WATCHDOG_ENABLE 0x02
166 #define PRESSURE5_IFCFG_I2C_WATCHDOG_DISABLE 0x00
167 #define PRESSURE5_IFCFG_I2C_WATCHDOG_SHORT_1p25ms 0x00
168 #define PRESSURE5_IFCFG_I2C_WATCHDOG_LONG_40ms 0x04
169 
175 #define PRESSURE5_PCTRL_PRESSURE_SENSOR_DISABLE 0x00
176 #define PRESSURE5_PCTRL_PRESSURE_SENSOR_ENABLE 0x01
177 #define PRESSURE5_PCTRL_TEMP_SENSOR_DISABLE 0x00
178 #define PRESSURE5_PCTRL_TEMP_SENSOR_ENABLE 0x02
179 #define PRESSURE5_PCTRL_MODE_SLEEP 0x00
180 #define PRESSURE5_PCTRL_MODE_FORCED 0x10
181 #define PRESSURE5_PCTRL_MODE_NORMAL 0x30
182 
188 #define PRESSURE5_OSR_PRESSURE_x1 0x00
189 #define PRESSURE5_OSR_PRESSURE_x2 0x01
190 #define PRESSURE5_OSR_PRESSURE_x4 0x02
191 #define PRESSURE5_OSR_PRESSURE_x8 0x03
192 #define PRESSURE5_OSR_PRESSURE_x16 0x04
193 #define PRESSURE5_OSR_PRESSURE_x32 0x05
194 #define PRESSURE5_OSR_TEMP_x1 0x00 >> 1
195 #define PRESSURE5_OSR_TEMP_x2 0x10 >> 1
196 #define PRESSURE5_OSR_TEMP_x4 0x20 >> 1
197 #define PRESSURE5_OSR_TEMP_x8 0x30 >> 1
198 #define PRESSURE5_OSR_TEMP_x16 0x40 >> 1
199 #define PRESSURE5_OSR_TEMP_x32 0x50 >> 1
200 
206 #define PRESSURE5_ODR_200 0x00
207 #define PRESSURE5_ODR_100 0x01
208 #define PRESSURE5_ODR_50 0x02
209 #define PRESSURE5_ODR_25 0x03
210 #define PRESSURE5_ODR_12p5 0x04
211 #define PRESSURE5_ODR_6p25 0x05
212 #define PRESSURE5_ODR_3p1 0x06
213 #define PRESSURE5_ODR_1p5 0x07
214 #define PRESSURE5_ODR_0p75 0x08
215 #define PRESSURE5_ODR_0p39 0x09
216 #define PRESSURE5_ODR_0p2 0x0A
217 #define PRESSURE5_ODR_0p1 0x0B
218 #define PRESSURE5_ODR_0p05 0x0C
219 #define PRESSURE5_ODR_0p02 0x0D
220 #define PRESSURE5_ODR_0p01 0x0E
221 #define PRESSURE5_ODR_0p006 0x0F
222 #define PRESSURE5_ODR_0p003 0x10
223 #define PRESSURE5_ODR_0p0015 0x11
224 
230 #define PRESSURE5_CFG_FILTER_COEFF_0 0x00
231 #define PRESSURE5_CFG_FILTER_COEFF_1 0x01 << 1
232 #define PRESSURE5_CFG_FILTER_COEFF_3 0x02 << 1
233 #define PRESSURE5_CFG_FILTER_COEFF_7 0x03 << 1
234 #define PRESSURE5_CFG_FILTER_COEFF_15 0x04 << 1
235 #define PRESSURE5_CFG_FILTER_COEFF_31 0x05 << 1
236 #define PRESSURE5_CFG_FILTER_COEFF_63 0x06 << 1
237 #define PRESSURE5_CFG_FILTER_COEFF_127 0x07 << 1
238 
244 #define PRESSURE5_CMD_EXTMODE_EN_MIDDLE 0x34
245 #define PRESSURE5_CMD_FIFO_FLUSH 0xB0
246 #define PRESSURE5_CMD_SOFTWARE_RESET 0xB6
247 
253 #define PRESSURE5_DEVICE_SLAVE_ADDR_GND 0x76
254 #define PRESSURE5_DEVICE_SLAVE_ADDR_VCC 0x77
255 
261 #define PRESSURE5_TEMPERATURE_RAW_DATA 0x07
262 #define PRESSURE5_PRESSURE_RAW_DATA 0x04
263 
269 #define PRESSURE5_DEVICE_ID 0x50
270  // End group macro
273 // --------------------------------------------------------------- PUBLIC TYPES
282 typedef uint8_t pressure5_select_t;
283 
287 typedef void ( *pressure5_master_io_t )( struct pressure5_s*, uint8_t, uint8_t*, uint8_t );
288 
292 typedef struct pressure5_s
293 {
294  // Output pins
295 
296  digital_out_t cs;
297 
298  // Input pins
299 
300  digital_in_t int_pin;
301 
302  // Modules
303 
304  i2c_master_t i2c;
305  spi_master_t spi;
306 
307  // ctx variable
308 
309  uint8_t slave_address;
310  pin_name_t chip_select;
314 
316 
320 typedef struct
321 {
322  // Communication gpio pins
323 
324  pin_name_t scl;
325  pin_name_t sda;
326  pin_name_t miso;
327  pin_name_t mosi;
328  pin_name_t sck;
329  pin_name_t cs;
330 
331  // Additional gpio pins
332 
333  pin_name_t int_pin;
334 
335  // static variable
336 
337  uint32_t i2c_speed;
338  uint8_t i2c_address;
339 
340  uint32_t spi_speed;
341  spi_master_mode_t spi_mode;
342  spi_master_chip_select_polarity_t cs_polarity;
343 
345 
347 
348 typedef struct
349 {
350  uint16_t t1;
351  uint16_t t2;
352  int8_t t3;
353 
354  int16_t p1;
355  int16_t p2;
356  int8_t p3;
357  int8_t p4;
358  uint16_t p5;
359  uint16_t p6;
360  int8_t p7;
361  int8_t p8;
362  int16_t p9;
363  int8_t p10;
364  int8_t p11;
365 
367 
368 
369 typedef struct
370 {
371  float t1;
372  float t2;
373  float t3;
374 
375  float p1;
376  float p2;
377  float p3;
378  float p4;
379  float p5;
380  float p6;
381  float p7;
382  float p8;
383  float p9;
384  float p10;
385  float p11;
386 
388  // End types group
390 
391 // ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
397 #ifdef __cplusplus
398 extern "C"{
399 #endif
400 
410 
419 
428 
438 void pressure5_generic_write ( pressure5_t *ctx, uint8_t reg, uint8_t reg_data);
439 
448 uint8_t pressure5_generic_read ( pressure5_t *ctx, uint8_t reg );
460 void pressure5_read ( pressure5_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len );
486 uint32_t pressure5_get_raw_data ( pressure5_t *ctx, uint8_t data_addr );
517 
518 
519 
520 
521 #ifdef __cplusplus
522 }
523 #endif
524 #endif // _PRESSURE5_H_
525  // End public_function group
528 
529 // ------------------------------------------------------------------------- END
PRESSURE5_RETVAL
#define PRESSURE5_RETVAL
Definition: pressure5.h:87
pressure5_cfg_t::sck
pin_name_t sck
Definition: pressure5.h:328
pressure5_init
PRESSURE5_RETVAL pressure5_init(pressure5_t *ctx, pressure5_cfg_t *cfg)
Initialization function.
pressure5_cfg_t
Click configuration structure definition.
Definition: pressure5.h:321
pressure5_nvm_par_t::p11
int8_t p11
Definition: pressure5.h:364
pressure5_get_temperature_data
float pressure5_get_temperature_data(pressure5_t *ctx)
Get Temperature data in C.
pressure5_cfg_t::i2c_address
uint8_t i2c_address
Definition: pressure5.h:338
pressure5_cfg_t::spi_mode
spi_master_mode_t spi_mode
Definition: pressure5.h:341
pressure5_par_coeff_t::t3
float t3
Definition: pressure5.h:373
pressure5_s::i2c
i2c_master_t i2c
Definition: pressure5.h:304
pressure5_nvm_par_t::p5
uint16_t p5
Definition: pressure5.h:358
pressure5_nvm_par_t::p2
int16_t p2
Definition: pressure5.h:355
pressure5_par_coeff_t::p5
float p5
Definition: pressure5.h:379
pressure5_par_coeff_t
Definition: pressure5.h:370
pressure5_nvm_par_t::t1
uint16_t t1
Definition: pressure5.h:350
pressure5_cfg_setup
void pressure5_cfg_setup(pressure5_cfg_t *cfg)
Config Object Initialization function.
pressure5_nvm_par_t::p1
int16_t p1
Definition: pressure5.h:354
pressure5_s::master_sel
pressure5_select_t master_sel
Definition: pressure5.h:313
pressure5_generic_read
uint8_t pressure5_generic_read(pressure5_t *ctx, uint8_t reg)
Generic read function.
pressure5_nvm_par_t::p9
int16_t p9
Definition: pressure5.h:362
pressure5_nvm_par_t::p6
uint16_t p6
Definition: pressure5.h:359
pressure5_par_coeff_t::p9
float p9
Definition: pressure5.h:383
pressure5_nvm_par_t::p10
int8_t p10
Definition: pressure5.h:363
pressure5_nvm_par_t::p8
int8_t p8
Definition: pressure5.h:361
pressure5_get_interrupt_state
uint8_t pressure5_get_interrupt_state(pressure5_t *ctx)
Get Interrupt pin state.
pressure5_cfg_t::scl
pin_name_t scl
Definition: pressure5.h:324
pressure5_cfg_t::cs_polarity
spi_master_chip_select_polarity_t cs_polarity
Definition: pressure5.h:342
pressure5_generic_write
void pressure5_generic_write(pressure5_t *ctx, uint8_t reg, uint8_t reg_data)
Generic write function.
pressure5_s::chip_select
pin_name_t chip_select
Definition: pressure5.h:310
pressure5_par_coeff_t::t2
float t2
Definition: pressure5.h:372
pressure5_s::read_f
pressure5_master_io_t read_f
Definition: pressure5.h:312
pressure5_cfg_t::int_pin
pin_name_t int_pin
Definition: pressure5.h:333
pressure5_update_coefficient
void pressure5_update_coefficient(pressure5_t *ctx)
Update calibration coefficients.
pressure5_nvm_par_t::p4
int8_t p4
Definition: pressure5.h:357
pressure5_cfg_t::sda
pin_name_t sda
Definition: pressure5.h:325
pressure5_select_t
uint8_t pressure5_select_t
Communication type.
Definition: pressure5.h:282
pressure5_par_coeff_t::p10
float p10
Definition: pressure5.h:384
pressure5_software_reset
void pressure5_software_reset(pressure5_t *ctx)
Software Reset.
pressure5_par_coeff_t::p2
float p2
Definition: pressure5.h:376
pressure5_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: pressure5.h:337
pressure5_par_coeff_t::p4
float p4
Definition: pressure5.h:378
pressure5_nvm_par_t::t3
int8_t t3
Definition: pressure5.h:352
pressure5_par_coeff_t::p8
float p8
Definition: pressure5.h:382
pressure5_par_coeff_t::p6
float p6
Definition: pressure5.h:380
pressure5_s::cs
digital_out_t cs
Definition: pressure5.h:296
pressure5_cfg_t::spi_speed
uint32_t spi_speed
Definition: pressure5.h:340
pressure5_cfg_t::sel
pressure5_select_t sel
Definition: pressure5.h:344
pressure5_nvm_par_t::t2
uint16_t t2
Definition: pressure5.h:351
pressure5_s::spi
spi_master_t spi
Definition: pressure5.h:305
pressure5_default_cfg
void pressure5_default_cfg(pressure5_t *ctx)
Click Default Configuration function.
pressure5_s::slave_address
uint8_t slave_address
Definition: pressure5.h:309
pressure5_par_coeff_t::p7
float p7
Definition: pressure5.h:381
pressure5_par_coeff_t::p11
float p11
Definition: pressure5.h:385
pressure5_read
void pressure5_read(pressure5_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len)
Function for read more bytes from register.
pressure5_get_raw_data
uint32_t pressure5_get_raw_data(pressure5_t *ctx, uint8_t data_addr)
Get (Temperature or Pressure) Raw data.
pressure5_nvm_par_t::p7
int8_t p7
Definition: pressure5.h:360
pressure5_s
Click ctx object definition.
Definition: pressure5.h:293
pressure5_nvm_par_t
Definition: pressure5.h:349
pressure5_cfg_t::cs
pin_name_t cs
Definition: pressure5.h:329
pressure5_master_io_t
void(* pressure5_master_io_t)(struct pressure5_s *, uint8_t, uint8_t *, uint8_t)
Master Input/Output type.
Definition: pressure5.h:287
pressure5_s::int_pin
digital_in_t int_pin
Definition: pressure5.h:300
pressure5_cfg_t::mosi
pin_name_t mosi
Definition: pressure5.h:327
pressure5_t
struct pressure5_s pressure5_t
Click ctx object definition.
pressure5_s::write_f
pressure5_master_io_t write_f
Definition: pressure5.h:311
pressure5_cfg_t::miso
pin_name_t miso
Definition: pressure5.h:326
pressure5_get_pressure_data
float pressure5_get_pressure_data(pressure5_t *ctx)
Get Pressure data in mBar.
pressure5_nvm_par_t::p3
int8_t p3
Definition: pressure5.h:356
pressure5_par_coeff_t::t1
float t1
Definition: pressure5.h:371
pressure5_par_coeff_t::p1
float p1
Definition: pressure5.h:375
pressure5_par_coeff_t::p3
float p3
Definition: pressure5.h:377