pressure22  2.1.0.0
pressure22.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 PRESSURE22_H
29 #define PRESSURE22_H
30 
31 #ifdef __cplusplus
32 extern "C"{
33 #endif
34 
35 #include "mikrosdk_version.h"
36 
37 #ifdef __GNUC__
38 #if mikroSDK_GET_VERSION < 20800ul
39 #include "rcu_delays.h"
40 #else
41 #include "delays.h"
42 #endif
43 #endif
44 
45 #include "drv_digital_out.h"
46 #include "drv_digital_in.h"
47 #include "drv_i2c_master.h"
48 
69 #define PRESSURE22_CMD_ADC_READ 0x00
70 #define PRESSURE22_CMD_RESET 0x1E
71 #define PRESSURE22_CMD_PROM_VERSION 0xA0
72 #define PRESSURE22_CMD_PROM_READ_C1 0xA2
73 #define PRESSURE22_CMD_PROM_READ_C2 0xA4
74 #define PRESSURE22_CMD_PROM_READ_C3 0xA6
75 #define PRESSURE22_CMD_PROM_READ_C4 0xA8
76 #define PRESSURE22_CMD_PROM_READ_C5 0xAA
77 #define PRESSURE22_CMD_PROM_READ_C6 0xAC
78 #define PRESSURE22_CMD_PROM_END 0xAE
79  // pressure22_cmd
81 
96 #define PRESSURE22_CRC4_BIT_MASK 0x000Fu
97 #define PRESSURE22_VER_DEF_BIT_MASK 0x007Fu
98 #define PRESSURE22_FCT_DEF_BIT_MASK 0x001Fu
99 
104 #define PRESSURE22_TEMPERATURE_20_C 40.0f
105 #define PRESSURE22_TEMPERATURE_10_C 10.0f
106 #define PRESSURE22_TEMP_TYPICAL 2000.0f
107 #define PRESSURE22_TEMP_DIV 100.0f
108 #define PRESSURE22_OFF_ACT_TEMP_MULTP 131072.0f
109 #define PRESSURE22_OFF_ACT_TEMP_DIV 64.0f
110 #define PRESSURE22_SENS_ACT_TEMP_MULTP 65536.0f
111 #define PRESSURE22_SENS_ACT_TEMP_DIV 128.0f
112 #define PRESSURE22_TEMP_COMP_PRESS_DIV 2097152.0f
113 #define PRESSURE22_COMP_PRESS_DIV 32768.0f
114 #define PRESSURE22_PRESS_CONVERT_PA_MBAR 100.0f
115 #define PRESSURE22_SEC_COMP_TI_DIV 34359738368.0f
116 #define PRESSURE22_SEC_COMP_TI_1_MULTP 14.0f
117 #define PRESSURE22_SEC_COMP_OFFI_1_MULTP 35.0f
118 #define PRESSURE22_SEC_COMP_SENS_MULTP 63.0f
119 #define PRESSURE22_SEC_COMP_OFFI_1_DIV 8.0f
120 #define PRESSURE22_SEC_COMP_TI_2_MULTP 12.0f
121 #define PRESSURE22_SEC_COMP_OFFI_2_MULTP 30.0f
122 #define PRESSURE22_SEC_COMP_OFFI_2_DIV 256.0f
123 #define PRESSURE22_SEC_COMP_SENSI_DIV 32.0f
124 
130 #define PRESSURE22_DEVICE_ADDRESS 0x76
131  // pressure22_set
133 
148 #define PRESSURE22_MAP_MIKROBUS( cfg, mikrobus ) \
149  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
150  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA )
151  // pressure22_map // pressure22
154 
159 typedef enum
160 {
167 
169 
174 typedef enum
175 {
182 
184 
189 typedef struct
190 {
191  // Modules
192  i2c_master_t i2c;
194  // I2C slave address
195  uint8_t slave_address;
197  // Calibration data (factory calibrated) from PROM
198  uint16_t prom_pt;
199  uint8_t prom_crc;
200  uint8_t prom_ver;
201  uint8_t prom_fct;
202  uint16_t prom_c1;
203  uint16_t prom_c2;
204  uint16_t prom_c3;
205  uint16_t prom_c4;
206  uint16_t prom_c5;
207  uint16_t prom_c6;
209  // Conversions
213 } pressure22_t;
214 
219 typedef struct
220 {
221  pin_name_t scl;
222  pin_name_t sda;
224  uint32_t i2c_speed;
225  uint8_t i2c_address;
228 
233 typedef enum
234 {
236  PRESSURE22_ERROR = -1
237 
239 
256 
271 
285 
300 err_t pressure22_generic_write ( pressure22_t *ctx, uint8_t cmd, uint8_t *data_in, uint8_t len );
301 
316 err_t pressure22_generic_read ( pressure22_t *ctx, uint8_t cmd, uint8_t *data_out, uint8_t len );
317 
332 err_t pressure22_set_command ( pressure22_t *ctx, uint8_t cmd );
333 
348 
363 err_t pressure22_get_adc_data ( pressure22_t *ctx, uint32_t *adc );
364 
381 err_t pressure22_get_prom_data ( pressure22_t *ctx, uint8_t cmd_prom, uint16_t *prom );
382 
398 
413 
432  pressure22_temp_conv_t temp_conv );
433 
449 err_t pressure22_get_measurement_data ( pressure22_t *ctx, float *temperature, float *pressure );
450 
451 
452 
453 #ifdef __cplusplus
454 }
455 #endif
456 #endif // PRESSURE22_H
457  // pressure22
459 
460 // ------------------------------------------------------------------------ END
pressure22_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: pressure22.h:224
pressure22_set_command
err_t pressure22_set_command(pressure22_t *ctx, uint8_t cmd)
Pressure 22 set the command function.
pressure22_get_prom_data
err_t pressure22_get_prom_data(pressure22_t *ctx, uint8_t cmd_prom, uint16_t *prom)
Pressure 22 gets the PROM data function.
PRESSURE22_CMD_PRESS_OSR_4096
@ PRESSURE22_CMD_PRESS_OSR_4096
Definition: pressure22.h:165
pressure22_cfg_t::i2c_address
uint8_t i2c_address
Definition: pressure22.h:225
pressure22_t::prom_fct
uint8_t prom_fct
Definition: pressure22.h:201
pressure22_t::slave_address
uint8_t slave_address
Definition: pressure22.h:195
PRESSURE22_CMD_PRESS_OSR_2048
@ PRESSURE22_CMD_PRESS_OSR_2048
Definition: pressure22.h:164
PRESSURE22_CMD_TEMP_OSR_256
@ PRESSURE22_CMD_TEMP_OSR_256
Definition: pressure22.h:176
pressure22_t::prom_c1
uint16_t prom_c1
Definition: pressure22.h:202
pressure22_t::prom_c2
uint16_t prom_c2
Definition: pressure22.h:203
pressure22_t::prom_ver
uint8_t prom_ver
Definition: pressure22.h:200
pressure22_init
err_t pressure22_init(pressure22_t *ctx, pressure22_cfg_t *cfg)
Pressure 22 initialization function.
pressure22_t::prom_crc
uint8_t prom_crc
Definition: pressure22.h:199
pressure22_cfg_t
Pressure 22 Click configuration object.
Definition: pressure22.h:220
pressure22_t
Pressure 22 Click context object.
Definition: pressure22.h:190
pressure22_get_calibration_data
err_t pressure22_get_calibration_data(pressure22_t *ctx)
Pressure 22 gets the calibration data function.
pressure22_t::prom_c3
uint16_t prom_c3
Definition: pressure22.h:204
pressure22_t::i2c
i2c_master_t i2c
Definition: pressure22.h:192
PRESSURE22_CMD_PRESS_OSR_256
@ PRESSURE22_CMD_PRESS_OSR_256
Definition: pressure22.h:161
PRESSURE22_ERROR
@ PRESSURE22_ERROR
Definition: pressure22.h:236
PRESSURE22_CMD_TEMP_OSR_8192
@ PRESSURE22_CMD_TEMP_OSR_8192
Definition: pressure22.h:181
pressure22_get_adc_data
err_t pressure22_get_adc_data(pressure22_t *ctx, uint32_t *adc)
Pressure 22 gets the ADC data function.
pressure22_return_value_t
pressure22_return_value_t
Pressure 22 Click return value data.
Definition: pressure22.h:234
PRESSURE22_CMD_PRESS_OSR_1024
@ PRESSURE22_CMD_PRESS_OSR_1024
Definition: pressure22.h:163
pressure22_generic_write
err_t pressure22_generic_write(pressure22_t *ctx, uint8_t cmd, uint8_t *data_in, uint8_t len)
Pressure 22 I2C writing function.
PRESSURE22_CMD_PRESS_OSR_512
@ PRESSURE22_CMD_PRESS_OSR_512
Definition: pressure22.h:162
PRESSURE22_CMD_TEMP_OSR_2048
@ PRESSURE22_CMD_TEMP_OSR_2048
Definition: pressure22.h:179
pressure22_cfg_t::sda
pin_name_t sda
Definition: pressure22.h:222
pressure22_temp_conv_t
pressure22_temp_conv_t
Pressure 22 Click temperature conversion value data.
Definition: pressure22.h:175
PRESSURE22_CMD_TEMP_OSR_4096
@ PRESSURE22_CMD_TEMP_OSR_4096
Definition: pressure22.h:180
pressure22_t::prom_c4
uint16_t prom_c4
Definition: pressure22.h:205
pressure22_get_measurement_data
err_t pressure22_get_measurement_data(pressure22_t *ctx, float *temperature, float *pressure)
Pressure 22 get the measurement data function.
pressure22_t::prom_c6
uint16_t prom_c6
Definition: pressure22.h:207
pressure22_cfg_t::scl
pin_name_t scl
Definition: pressure22.h:221
PRESSURE22_CMD_PRESS_OSR_8192
@ PRESSURE22_CMD_PRESS_OSR_8192
Definition: pressure22.h:166
PRESSURE22_CMD_TEMP_OSR_1024
@ PRESSURE22_CMD_TEMP_OSR_1024
Definition: pressure22.h:178
pressure22_set_conversion
void pressure22_set_conversion(pressure22_t *ctx, pressure22_press_conv_t press_conv, pressure22_temp_conv_t temp_conv)
Pressure 22 set conversion function.
PRESSURE22_CMD_TEMP_OSR_512
@ PRESSURE22_CMD_TEMP_OSR_512
Definition: pressure22.h:177
pressure22_cfg_setup
void pressure22_cfg_setup(pressure22_cfg_t *cfg)
Pressure 22 configuration object setup function.
pressure22_t::prom_pt
uint16_t prom_pt
Definition: pressure22.h:198
pressure22_generic_read
err_t pressure22_generic_read(pressure22_t *ctx, uint8_t cmd, uint8_t *data_out, uint8_t len)
Pressure 22 I2C reading function.
pressure22_t::temp_conv
pressure22_temp_conv_t temp_conv
Definition: pressure22.h:211
pressure22_default_cfg
err_t pressure22_default_cfg(pressure22_t *ctx)
Pressure 22 default configuration function.
pressure22_check_data_validity
err_t pressure22_check_data_validity(pressure22_t *ctx)
Pressure 22 checks data validity function.
pressure22_press_conv_t
pressure22_press_conv_t
Pressure 22 Click pressure conversion value data.
Definition: pressure22.h:160
pressure22_sw_reset
err_t pressure22_sw_reset(pressure22_t *ctx)
Pressure 22 sw reset function.
PRESSURE22_OK
@ PRESSURE22_OK
Definition: pressure22.h:235
pressure22_t::prom_c5
uint16_t prom_c5
Definition: pressure22.h:206
pressure22_t::press_conv
pressure22_press_conv_t press_conv
Definition: pressure22.h:210