pac1921  2.0.0.0
pac1921.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  */
32 // ----------------------------------------------------------------------------
33 
34 #ifndef PAC1921_H
35 #define PAC1921_H
36 
37 #include "mikrosdk_version.h"
38 
39 #ifdef __GNUC__
40 #if mikroSDK_GET_VERSION < 20800ul
41 #include "rcu_delays.h"
42 #else
43 #include "delays.h"
44 #endif
45 #endif
46 
47 #include "drv_digital_out.h"
48 #include "drv_digital_in.h"
49 #include "drv_i2c_master.h"
50 
51 // -------------------------------------------------------------- PUBLIC MACROS
61 #define PAC1921_MAP_MIKROBUS( cfg, mikrobus ) \
62  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
63  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
64  cfg.an = MIKROBUS( mikrobus, MIKROBUS_AN ); \
65  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
66 
72 #define PAC1921_RETVAL uint8_t
73 
74 #define PAC1921_OK 0x00
75 #define PAC1921_INIT_ERROR 0xFF
76 
82 #define PAC1921_SLAVE_ADDRESS 0x4C
83 
89 #define PAC1921_GAIN_CFG_REG 0x00
90 #define PAC1921_INTEGRATION_CFG_REG 0x01
91 #define PAC1921_CONTROL_REG 0x02
92 #define PAC1921_VBUS_RESULT_HIGH 0x10
93 #define PAC1921_VBUS_RESULT_LOW 0x11
94 #define PAC1921_VSENSE_RESULT_HIGH 0x12
95 #define PAC1921_VSENSE_RESULT_LOW 0x13
96 #define PAC1921_VSUM_ACCUMULATOR_HIGH 0x14
97 #define PAC1921_VSUM_ACCUMULATOR_MID_H 0x15
98 #define PAC1921_VSUM_ACCUMULATOR_MID_L 0x16
99 #define PAC1921_VSUM_ACCUMULATOR_LOW 0x17
100 #define PAC1921_ISUM_ACCUMULATOR_HIGH 0x18
101 #define PAC1921_ISUM_ACCUMULATOR_MID_H 0x19
102 #define PAC1921_ISUM_ACCUMULATOR_MID_L 0x1A
103 #define PAC1921_ISUM_ACCUMULATOR_LOW 0x1B
104 #define PAC1921_OVERFLOW_STATUS 0x1C
105 #define PAC1921_VPOWER_RESULT_HIGH 0x1D
106 #define PAC1921_VPOWER_RESULT_LOW 0x1E
107 #define PAC1921_SAMPLES_HIGH 0x21
108 #define PAC1921_SAMPLES_LOW 0x22
109 #define PAC1921_PSUM_ACCUMULATOR_HIGH 0x23
110 #define PAC1921_PSUM_ACCUMULATOR_MID_H 0x24
111 #define PAC1921_PSUM_ACCUMULATOR_MID_M 0x25
112 #define PAC1921_PSUM_ACCUMULATOR_MID_L 0x26
113 #define PAC1921_PSUM_ACCUMULATOR_LOW 0x27
114 #define PAC1921_PRODUCT_ID 0xFD
115 #define PAC1921_MANUFACTURER_ID 0xFE
116 #define PAC1921_REVISION 0xFF
117 
123 #define PAC1921_I_RESOLUTION_11_BIT 0x80
124 #define PAC1921_I_RESOLUTION_14_BIT 0x00
125 #define PAC1921_V_RESOLUTION_11_BIT 0x40
126 #define PAC1921_V_RESOLUTION_14_BIT 0x00
127 #define PAC1921_DIGITAL_I_GAIN_1X 0x00
128 #define PAC1921_DIGITAL_I_GAIN_2X 0x08
129 #define PAC1921_DIGITAL_I_GAIN_4X 0x10
130 #define PAC1921_DIGITAL_I_GAIN_8X 0x18
131 #define PAC1921_DIGITAL_I_GAIN_16X 0x20
132 #define PAC1921_DIGITAL_I_GAIN_32X 0x28
133 #define PAC1921_DIGITAL_I_GAIN_64X 0x30
134 #define PAC1921_DIGITAL_I_GAIN_128X 0x38
135 #define PAC1921_DIGITAL_V_GAIN_1X 0x00
136 #define PAC1921_DIGITAL_V_GAIN_2X 0x01
137 #define PAC1921_DIGITAL_V_GAIN_4X 0x02
138 #define PAC1921_DIGITAL_V_GAIN_8X 0x03
139 #define PAC1921_DIGITAL_V_GAIN_16X 0x04
140 #define PAC1921_DIGITAL_V_GAIN_32X 0x05
141 #define PAC1921_DIGITAL_V_GAIN_64X 0x06
142 #define PAC1921_DIGITAL_V_GAIN_128X 0x07
143 
149 #define PAC1921_SAMPLE_RATE_1 0x00
150 #define PAC1921_SAMPLE_RATE_2 0x10
151 #define PAC1921_SAMPLE_RATE_4 0x20
152 #define PAC1921_SAMPLE_RATE_8 0x30
153 #define PAC1921_SAMPLE_RATE_16 0x40
154 #define PAC1921_SAMPLE_RATE_32 0x50
155 #define PAC1921_SAMPLE_RATE_64 0x60
156 #define PAC1921_SAMPLE_RATE_128 0x70
157 #define PAC1921_SAMPLE_RATE_256 0x80
158 #define PAC1921_SAMPLE_RATE_512 0x90
159 #define PAC1921_SAMPLE_RATE_1024 0xA0
160 #define PAC1921_SAMPLE_RATE_2048 0xB0
161 #define PAC1921_V_SENSE_FILTER_ON 0x08
162 #define PAC1921_V_SENSE_FILTER_OFF 0x00
163 #define PAC1921_V_BUS_FILTER_ON 0x04
164 #define PAC1921_V_BUS_FILTER_OFF 0x00
165 #define PAC1921_READ_INT_OVERRIDE_ON 0x02
166 #define PAC1921_READ_INT_OVERRIDE_OFF 0x00
167 #define PAC1921_FORCED_INTEGRATE_MODE_ON 0x01
168 #define PAC1921_FORCED_INTEGRATE_MODE_OFF 0x00
169 
175 #define PAC1921_MEASUREMENT_MODE_V_POWER_PIN_CTRL 0x00
176 #define PAC1921_MEASUREMENT_MODE_V_SENSE_FREE_RUN 0x40
177 #define PAC1921_MEASUREMENT_MODE_V_BUS_FREE_RUN 0x80
178 #define PAC1921_MEASUREMENT_MODE_V_POWER_FREE_RUN 0xC0
179 #define PAC1921_MEASUREMENT_MODE_MASK 0xC0
180 #define PAC1921_OUT_PIN_FULL_SCALE_RANGE_3V 0x00
181 #define PAC1921_OUT_PIN_FULL_SCALE_RANGE_2V 0x10
182 #define PAC1921_OUT_PIN_FULL_SCALE_RANGE_1_5_V 0x20
183 #define PAC1921_OUT_PIN_FULL_SCALE_RANGE_1V 0x30
184 #define PAC1921_TIMEOUT_ON 0x08
185 #define PAC1921_TIMEOUT_OFF 0x00
186 #define PAC1921_SLEEP_ON 0x04
187 #define PAC1921_SLEEP_OFF 0x00
188 #define PAC1921_FORCED_READ_MODE_ON 0x02
189 #define PAC1921_FORCED_READ_MODE_OFF 0x00
190 #define PAC1921_FORCED_RECALCULATE_MODE_ON 0x01
191 #define PAC1921_FORCED_RECALCULATE_MODE_OFF 0x00
192 
198 #define PAC1921_VOLTAGE_MAX 10
199 #define PAC1921_CURRENT_MAX 32
200  // End group macro
203 // --------------------------------------------------------------- PUBLIC TYPES
212 typedef struct
213 {
214  uint8_t ctrl_byte;
215  uint8_t cfg_byte;
217  uint8_t sample_num_old;
218  uint8_t iarp;
219  uint16_t output_fsr;
220 
221 } aux_vars_t;
222 
226 typedef struct
227 {
228  uint8_t ctrl_byte;
229  uint8_t cfg_byte;
231  uint8_t sample_num_old;
232  uint8_t iarp;
233  uint16_t output_fsr;
234 
235 } aux_cfg_t;
236 
240 typedef struct
241 {
242  // Output pins
243 
244  digital_out_t int_pin;
245 
246  // Input pins
247 
248  digital_in_t an;
249 
250  // Modules
251 
252  i2c_master_t i2c;
253 
254  // ctx variable
255 
256  uint8_t slave_address;
258 
259 } pac1921_t;
260 
264 typedef struct
265 {
266  // Communication gpio pins
267 
268  pin_name_t scl;
269  pin_name_t sda;
270 
271  // Additional gpio pins
272 
273  pin_name_t an;
274  pin_name_t int_pin;
275 
276  // static variable
277 
278  uint32_t i2c_speed;
279  uint8_t i2c_address;
281 
282 } pac1921_cfg_t;
283  // End types group
285 // ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
286 
292 #ifdef __cplusplus
293 extern "C"{
294 #endif
295 
305 
315 
324 
335 void pac1921_generic_write ( pac1921_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len );
336 
348 void pac1921_generic_read ( pac1921_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len );
349 
361 void pac1921_write_to_reg ( pac1921_t *ctx, uint8_t reg_addr, uint8_t *write_data, uint8_t len );
362 
373 float pac1921_get_measured_data ( pac1921_t *ctx, uint8_t measurement_mode, uint8_t sample_num );
374 
383 void pac1921_set_int_pin ( pac1921_t *ctx, uint8_t output );
384 
392 uint8_t pac1921_get_an_pin ( pac1921_t *ctx );
393 
394 #ifdef __cplusplus
395 }
396 #endif
397 #endif // _PAC1921_H_
398  // End public_function group
401 
402 // ------------------------------------------------------------------------- END
aux_vars_t::measurement_mode_old
uint8_t measurement_mode_old
Definition: pac1921.h:216
pac1921_t::aux
aux_vars_t aux
Definition: pac1921.h:257
pac1921_t::slave_address
uint8_t slave_address
Definition: pac1921.h:256
pac1921_default_cfg
void pac1921_default_cfg(pac1921_t *ctx)
Click Default Configuration function.
PAC1921_RETVAL
#define PAC1921_RETVAL
Definition: pac1921.h:72
aux_cfg_t::cfg_byte
uint8_t cfg_byte
Definition: pac1921.h:229
pac1921_cfg_t::i2c_address
uint8_t i2c_address
Definition: pac1921.h:279
pac1921_get_an_pin
uint8_t pac1921_get_an_pin(pac1921_t *ctx)
AN pin get input function.
pac1921_t::i2c
i2c_master_t i2c
Definition: pac1921.h:252
aux_vars_t::sample_num_old
uint8_t sample_num_old
Definition: pac1921.h:217
aux_cfg_t::sample_num_old
uint8_t sample_num_old
Definition: pac1921.h:231
aux_cfg_t::ctrl_byte
uint8_t ctrl_byte
Definition: pac1921.h:228
pac1921_get_measured_data
float pac1921_get_measured_data(pac1921_t *ctx, uint8_t measurement_mode, uint8_t sample_num)
Measured data read function.
pac1921_generic_write
void pac1921_generic_write(pac1921_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len)
Generic write function.
pac1921_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: pac1921.h:278
aux_cfg_t
Auxiliary variables default cfg.
Definition: pac1921.h:227
pac1921_set_int_pin
void pac1921_set_int_pin(pac1921_t *ctx, uint8_t output)
INT pin set output function.
pac1921_cfg_t
Click configuration structure definition.
Definition: pac1921.h:265
pac1921_cfg_t::scl
pin_name_t scl
Definition: pac1921.h:268
pac1921_t::int_pin
digital_out_t int_pin
Definition: pac1921.h:244
pac1921_write_to_reg
void pac1921_write_to_reg(pac1921_t *ctx, uint8_t reg_addr, uint8_t *write_data, uint8_t len)
Register write function.
pac1921_cfg_t::an
pin_name_t an
Definition: pac1921.h:273
aux_vars_t::cfg_byte
uint8_t cfg_byte
Definition: pac1921.h:215
aux_vars_t
Auxiliary variables structure.
Definition: pac1921.h:213
aux_vars_t::output_fsr
uint16_t output_fsr
Definition: pac1921.h:219
aux_cfg_t::iarp
uint8_t iarp
Definition: pac1921.h:232
pac1921_cfg_setup
void pac1921_cfg_setup(pac1921_cfg_t *cfg)
Config Object Initialization function.
pac1921_cfg_t::int_pin
pin_name_t int_pin
Definition: pac1921.h:274
pac1921_generic_read
void pac1921_generic_read(pac1921_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len)
Generic read function.
pac1921_init
PAC1921_RETVAL pac1921_init(pac1921_t *ctx, pac1921_cfg_t *cfg)
Initialization function.
pac1921_cfg_t::sda
pin_name_t sda
Definition: pac1921.h:269
pac1921_t
Click ctx object definition.
Definition: pac1921.h:241
aux_vars_t::iarp
uint8_t iarp
Definition: pac1921.h:218
aux_vars_t::ctrl_byte
uint8_t ctrl_byte
Definition: pac1921.h:214
pac1921_cfg_t::aux_cfg
aux_cfg_t aux_cfg
Definition: pac1921.h:280
aux_cfg_t::output_fsr
uint16_t output_fsr
Definition: pac1921.h:233
aux_cfg_t::measurement_mode_old
uint8_t measurement_mode_old
Definition: pac1921.h:230
pac1921_t::an
digital_in_t an
Definition: pac1921.h:248