pac1954  2.0.0.0
pac1954.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 PAC1954_H
29 #define PAC1954_H
30 
31 #ifdef __cplusplus
32 extern "C"{
33 #endif
34 
39 #ifdef PREINIT_SUPPORTED
40 #include "preinit.h"
41 #endif
42 
43 #ifdef MikroCCoreVersion
44  #if MikroCCoreVersion >= 1
45  #include "delays.h"
46  #endif
47 #endif
48 
49 #include "drv_digital_out.h"
50 #include "drv_digital_in.h"
51 #include "drv_i2c_master.h"
52 
73 #define PAC1954_REG_REFRESH 0x00
74 #define PAC1954_REG_CTRL 0x01
75 #define PAC1954_REG_ACC_COUNT 0x02
76 #define PAC1954_REG_VACC_CH1 0x03
77 #define PAC1954_REG_VACC_CH2 0x04
78 #define PAC1954_REG_VACC_CH3 0x05
79 #define PAC1954_REG_VACC_CH4 0x06
80 #define PAC1954_REG_VBUS_CH1 0x07
81 #define PAC1954_REG_VBUS_CH2 0x08
82 #define PAC1954_REG_VBUS_CH3 0x09
83 #define PAC1954_REG_VBUS_CH4 0x0A
84 #define PAC1954_REG_VSENSE_CH1 0x0B
85 #define PAC1954_REG_VSENSE_CH2 0x0C
86 #define PAC1954_REG_VSENSE_CH3 0x0D
87 #define PAC1954_REG_VSENSE_CH4 0x0E
88 #define PAC1954_REG_VBUS_CH1_AVG 0x0F
89 #define PAC1954_REG_VBUS_CH2_AVG 0x10
90 #define PAC1954_REG_VBUS_CH3_AVG 0x11
91 #define PAC1954_REG_VBUS_CH4_AVG 0x12
92 #define PAC1954_REG_VSENSE_CH1_AVG 0x13
93 #define PAC1954_REG_VSENSE_CH2_AVG 0x14
94 #define PAC1954_REG_VSENSE_CH3_AVG 0x15
95 #define PAC1954_REG_VSENSE_CH4_AVG 0x16
96 #define PAC1954_REG_VPOWER_CH1 0x17
97 #define PAC1954_REG_VPOWER_CH2 0x18
98 #define PAC1954_REG_VPOWER_CH3 0x19
99 #define PAC1954_REG_VPOWER_CH4 0x1A
100 #define PAC1954_REG_SMBUS_CFG 0x1C
101 #define PAC1954_REG_NEG_PWR_FSR 0x1D
102 #define PAC1954_REG_REFRESH_G 0x1E
103 #define PAC1954_REG_REFRESH_V 0x1F
104 #define PAC1954_REG_SLOW 0x20
105 #define PAC1954_REG_CTRL_ACT 0x21
106 #define PAC1954_REG_NEG_PWR_FSR_ACT 0x22
107 #define PAC1954_REG_CTRL_LAT 0x23
108 #define PAC1954_REG_NEG_PWR_FSR_LAT 0x24
109 #define PAC1954_REG_ACC_CFG 0x25
110 #define PAC1954_REG_ALERT_STATUS 0x26
111 #define PAC1954_REG_SLOW_ALERT1 0x27
112 #define PAC1954_REG_GPIO_ALERT2 0x28
113 #define PAC1954_REG_ACC_FULLNESS_LIM 0x29
114 #define PAC1954_REG_OC_LIM_CH1 0x30
115 #define PAC1954_REG_OC_LIM_CH2 0x31
116 #define PAC1954_REG_OC_LIM_CH3 0x32
117 #define PAC1954_REG_OC_LIM_CH4 0x33
118 #define PAC1954_REG_UC_LIM_CH1 0x34
119 #define PAC1954_REG_UC_LIM_CH2 0x35
120 #define PAC1954_REG_UC_LIM_CH3 0x36
121 #define PAC1954_REG_UC_LIM_CH4 0x37
122 #define PAC1954_REG_OP_LIM_CH1 0x38
123 #define PAC1954_REG_OP_LIM_CH2 0x39
124 #define PAC1954_REG_OP_LIM_CH3 0x3A
125 #define PAC1954_REG_OP_LIM_CH4 0x3B
126 #define PAC1954_REG_OV_LIM_CH1 0x3C
127 #define PAC1954_REG_OV_LIM_CH2 0x3D
128 #define PAC1954_REG_OV_LIM_CH3 0x3E
129 #define PAC1954_REG_OV_LIM_CH4 0x3F
130 #define PAC1954_REG_UV_LIM_CH1 0x40
131 #define PAC1954_REG_UV_LIM_CH2 0x41
132 #define PAC1954_REG_UV_LIM_CH3 0x42
133 #define PAC1954_REG_UV_LIM_CH4 0x43
134 #define PAC1954_REG_OC_LIM_NSAMPLES 0x44
135 #define PAC1954_REG_UC_LIM_NSAMPLES 0x45
136 #define PAC1954_REG_OP_LIM_NSAMPLES 0x46
137 #define PAC1954_REG_OV_LIM_NSAMPLES 0x47
138 #define PAC1954_REG_UV_LIM_NSAMPLES 0x48
139 #define PAC1954_REG_ALERT_ENABLE 0x49
140 #define PAC1954_REG_ACC_CFG_ACT 0x4A
141 #define PAC1954_REG_ACC_CFG_LAT 0x4B
142 #define PAC1954_REG_ID_PRODUCT 0xFD
143 #define PAC1954_REG_ID_MANUFACTURER 0xFE
144 #define PAC1954_REG_ID_REVISION 0xFF
145  // pac1954_reg
147 
162 #define PAC1954_CTRLH_SPS_1024_ADAPT_ACC 0x00
163 #define PAC1954_CTRLH_SPS_256_ADAPT_ACC 0x10
164 #define PAC1954_CTRLH_SPS_64_ADAPT_ACC 0x20
165 #define PAC1954_CTRLH_SPS_8_ADAPT_ACC 0x30
166 #define PAC1954_CTRLH_SPS_1024 0x40
167 #define PAC1954_CTRLH_SPS_256 0x50
168 #define PAC1954_CTRLH_SPS_64 0x60
169 #define PAC1954_CTRLH_SPS_8 0x70
170 #define PAC1954_CTRLH_SINGLE_SHOT_MODE 0x80
171 #define PAC1954_CTRLH_SINGLE_SHOT_8X 0x90
172 #define PAC1954_CTRLH_FAST_MODE 0xA0
173 #define PAC1954_CTRLH_BURST_MODE 0xB0
174 #define PAC1954_CTRLH_SLEEP 0xF0
175 #define PAC1954_CTRLH_INT_PIN_ALERT 0x00
176 #define PAC1954_CTRLH_INT_PIN_DIG_IN 0x04
177 #define PAC1954_CTRLH_INT_PIN_DIG_OUT 0x08
178 #define PAC1954_CTRLH_INT_PIN_SLOW 0x0C
179 #define PAC1954_CTRLH_SLW_PIN_ALERT 0x00
180 #define PAC1954_CTRLH_SLW_PIN_DIG_IN 0x01
181 #define PAC1954_CTRLH_SLW_PIN_DIG_OUT 0x02
182 #define PAC1954_CTRLH_SLW_PIN_SLOW 0x03
183 #define PAC1954_CTRLL_CH1_OFF 0x80
184 #define PAC1954_CTRLL_CH2_OFF 0x40
185 #define PAC1954_CTRLL_CH3_OFF 0x20
186 #define PAC1954_CTRLL_CH4_OFF 0x10
187 #define PAC1954_CTRLL_ALL_CH_OFF 0xF0
188 #define PAC1954_CTRLL_ALL_CH_ON 0x00
189 
194 #define PAC1954_NEG_PWR_FSR_CH1_OFFSET 6
195 #define PAC1954_NEG_PWR_FSR_CH2_OFFSET 4
196 #define PAC1954_NEG_PWR_FSR_CH3_OFFSET 2
197 #define PAC1954_NEG_PWR_FSR_CH4_OFFSET 0
198 
203 #define PAC1954_SMBUS_INT_PIN_MASK 0x80
204 #define PAC1954_SMBUS_SLW_PIN_MASK 0x40
205 #define PAC1954_SMBUS_ALERT_MASK 0x20
206 #define PAC1954_SMBUS_POR_MASK 0x10
207 #define PAC1954_SMBUS_TIMEOUT_OFF 0x00
208 #define PAC1954_SMBUS_TIMEOUT_ON 0x08
209 #define PAC1954_SMBUS_BYTE_COUNT_OFF 0x00
210 #define PAC1954_SMBUS_BYTE_COUNT_ON 0x04
211 #define PAC1954_SMBUS_AUTO_INC_SKIP_ON 0x00
212 #define PAC1954_SMBUS_AUTO_INC_SKIP_OFF 0x02
213 #define PAC1954_SMBUS_I2C_HIGH_SPEED 0x01
214 
219 #define PAC1954_MEAS_SEL_V_SOURCE 0
220 #define PAC1954_MEAS_SEL_I_SENSE 1
221 #define PAC1954_MEAS_SEL_P_SENSE 2
222 
227 #define PAC1954_CH_SEL_CH_1 1
228 #define PAC1954_CH_SEL_CH_2 2
229 #define PAC1954_CH_SEL_CH_3 3
230 #define PAC1954_CH_SEL_CH_4 4
231 
236 #define PAC1954_AVG_SEL_DISABLE 0
237 #define PAC1954_AVG_SEL_ENABLE 1
238 
243 #define PAC1954_MEAS_MODE_UNIPOLAR_FSR 0
244 #define PAC1954_MEAS_MODE_BIPOLAR_FSR 1
245 #define PAC1954_MEAS_MODE_BIPOLAR_HALF_FSR 2
246 
251 #define PAC1954_ALL_CH_SAMPLE_8SPS_ON 1
252 #define PAC1954_ALL_CH_SAMPLE_8SPS_OFF 0
253 
258 #define PAC1954_DEV_ENABLE 1
259 #define PAC1954_DEV_PWR_DWN 0
260 
265 #define PAC1954_ALERT_ACTIVE 0
266 #define PAC1954_ALERT_INACTIVE 1
267 
273 #define PAC1954_DEV_ADDR_0 0x10
274 #define PAC1954_DEV_ADDR_1 0x1F
275  // pac1954_set
277 
292 #define PAC1954_MAP_MIKROBUS( cfg, mikrobus ) \
293  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
294  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
295  cfg.en = MIKROBUS( mikrobus, MIKROBUS_CS ); \
296  cfg.slw = MIKROBUS( mikrobus, MIKROBUS_RST ); \
297  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
298  // pac1954_map // pac1954
301 
306 typedef struct
307 {
308  // Output pins
309  digital_out_t en;
310  digital_out_t slw;
312  // Input pins
313  digital_in_t int_pin;
315  // Modules
316  i2c_master_t i2c;
318  // I2C slave address
319  uint8_t slave_address;
321 } pac1954_t;
322 
327 typedef struct
328 {
329  pin_name_t scl;
330  pin_name_t sda;
332  pin_name_t en;
333  pin_name_t slw;
334  pin_name_t int_pin;
336  uint32_t i2c_speed;
337  uint8_t i2c_address;
339 } pac1954_cfg_t;
340 
345 typedef enum
346 {
348  PAC1954_ERROR = -1
349 
351 
368 
383 err_t pac1954_init ( pac1954_t *ctx, pac1954_cfg_t *cfg );
384 
399 
415 err_t pac1954_generic_write ( pac1954_t *ctx, uint8_t reg, uint8_t *tx_buf, uint8_t tx_len );
416 
432 err_t pac1954_generic_read ( pac1954_t *ctx, uint8_t reg, uint8_t *rx_buf, uint8_t rx_len );
433 
447 err_t pac1954_single_write ( pac1954_t *ctx, uint8_t reg, uint8_t data_in );
448 
462 err_t pac1954_single_read ( pac1954_t *ctx, uint8_t reg, uint8_t *data_out );
463 
477 err_t pac1954_set_address_pointer ( pac1954_t *ctx, uint8_t reg );
478 
492 err_t pac1954_read_last_access_reg ( pac1954_t *ctx, uint8_t *data_out );
493 
510 
526 
544 err_t pac1954_get_measurement ( pac1954_t *ctx, uint8_t meas_sel, uint8_t ch_sel,
545  uint8_t avg_sel, uint32_t *data_out );
546 
559 err_t pac1954_get_acc_count ( pac1954_t *ctx, uint32_t *data_out );
560 
575 err_t pac1954_get_acc_output ( pac1954_t *ctx, uint8_t ch_sel, uint8_t *data_out );
576 
596 err_t pac1954_get_calc_measurement ( pac1954_t *ctx, uint8_t meas_sel, uint8_t ch_sel,
597  uint8_t avg_sel, uint8_t meas_mode, float *data_out );
598 
609 void pac1954_set_ch_8_sps ( pac1954_t *ctx, uint8_t state );
610 
621 void pac1954_enable ( pac1954_t *ctx, uint8_t state );
622 
633 
634 #ifdef __cplusplus
635 }
636 #endif
637 #endif // PAC1954_H
638  // pac1954
640 
641 // ------------------------------------------------------------------------ END
pac1954_set_address_pointer
err_t pac1954_set_address_pointer(pac1954_t *ctx, uint8_t reg)
PAC1954 Set Address Pointer Function.
pac1954_cfg_setup
void pac1954_cfg_setup(pac1954_cfg_t *cfg)
PAC1954 configuration object setup function.
pac1954_get_measurement
err_t pac1954_get_measurement(pac1954_t *ctx, uint8_t meas_sel, uint8_t ch_sel, uint8_t avg_sel, uint32_t *data_out)
PAC1954 Get Measurement Function.
pac1954_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: pac1954.h:336
pac1954_t::slw
digital_out_t slw
Definition: pac1954.h:310
pac1954_set_ch_8_sps
void pac1954_set_ch_8_sps(pac1954_t *ctx, uint8_t state)
PAC1954 Slow Down Sampling Freq Of All Channels Function.
pac1954_t::int_pin
digital_in_t int_pin
Definition: pac1954.h:313
pac1954_t
PAC1954 Click context object.
Definition: pac1954.h:307
pac1954_single_read
err_t pac1954_single_read(pac1954_t *ctx, uint8_t reg, uint8_t *data_out)
PAC1954 Single Byte Read Function.
pac1954_generic_write
err_t pac1954_generic_write(pac1954_t *ctx, uint8_t reg, uint8_t *tx_buf, uint8_t tx_len)
PAC1954 I2C writing function.
pac1954_default_cfg
err_t pac1954_default_cfg(pac1954_t *ctx)
PAC1954 default configuration function.
pac1954_t::i2c
i2c_master_t i2c
Definition: pac1954.h:316
pac1954_enable
void pac1954_enable(pac1954_t *ctx, uint8_t state)
PAC1954 Power Control Function.
pac1954_cfg_t
PAC1954 Click configuration object.
Definition: pac1954.h:328
pac1954_cfg_t::sda
pin_name_t sda
Definition: pac1954.h:330
pac1954_cfg_t::scl
pin_name_t scl
Definition: pac1954.h:329
pac1954_get_calc_measurement
err_t pac1954_get_calc_measurement(pac1954_t *ctx, uint8_t meas_sel, uint8_t ch_sel, uint8_t avg_sel, uint8_t meas_mode, float *data_out)
PAC1954 Get Calculated Measurement Function.
pac1954_get_acc_output
err_t pac1954_get_acc_output(pac1954_t *ctx, uint8_t ch_sel, uint8_t *data_out)
PAC1954 Get Accumulator Output Function.
pac1954_cfg_t::slw
pin_name_t slw
Definition: pac1954.h:333
pac1954_get_acc_count
err_t pac1954_get_acc_count(pac1954_t *ctx, uint32_t *data_out)
PAC1954 Get Accumulator Count Function.
pac1954_init
err_t pac1954_init(pac1954_t *ctx, pac1954_cfg_t *cfg)
PAC1954 initialization function.
pac1954_t::en
digital_out_t en
Definition: pac1954.h:309
pac1954_get_alert2_status
uint8_t pac1954_get_alert2_status(pac1954_t *ctx)
PAC1954 Get INT Pin State Function.
PAC1954_OK
@ PAC1954_OK
Definition: pac1954.h:347
PAC1954_ERROR
@ PAC1954_ERROR
Definition: pac1954.h:348
pac1954_single_write
err_t pac1954_single_write(pac1954_t *ctx, uint8_t reg, uint8_t data_in)
PAC1954 Single Byte Write Function.
pac1954_generic_read
err_t pac1954_generic_read(pac1954_t *ctx, uint8_t reg, uint8_t *rx_buf, uint8_t rx_len)
PAC1954 I2C reading function.
pac1954_refresh_cmd
err_t pac1954_refresh_cmd(pac1954_t *ctx)
PAC1954 Refresh Command.
pac1954_return_value_t
pac1954_return_value_t
PAC1954 Click return value data.
Definition: pac1954.h:346
pac1954_cfg_t::en
pin_name_t en
Definition: pac1954.h:332
pac1954_cfg_t::int_pin
pin_name_t int_pin
Definition: pac1954.h:334
pac1954_read_last_access_reg
err_t pac1954_read_last_access_reg(pac1954_t *ctx, uint8_t *data_out)
PAC1954 Last Accessed Register Read Function.
pac1954_vol_refresh_cmd
err_t pac1954_vol_refresh_cmd(pac1954_t *ctx)
PAC1954 Volatile Refresh Command.
pac1954_cfg_t::i2c_address
uint8_t i2c_address
Definition: pac1954.h:337
pac1954_t::slave_address
uint8_t slave_address
Definition: pac1954.h:319