pac1934  2.0.0.0
pac1934.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 PAC1934_H
36 #define PAC1934_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 
52 // -------------------------------------------------------------- PUBLIC MACROS
62 #define PAC1934_MAP_MIKROBUS( cfg, mikrobus ) \
63  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
64  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
65  cfg.rst = MIKROBUS( mikrobus, MIKROBUS_RST ); \
66  cfg.ale = MIKROBUS( mikrobus, MIKROBUS_INT )
67 
73 #define PAC1934_RETVAL uint8_t
74 
75 #define PAC1934_OK 0x00
76 #define PAC1934_INIT_ERROR 0xFF
77 
83 #define PAC1934_I2C_ADDR 0x10
84 
90 #define PAC1934_REFRESH_CMD 0x00
91 
97 #define PAC1934_CTRL_REG 0x01
98 
99 #define PAC1934_CTRL_SAMPLE_RATE_8 0xC0
100 #define PAC1934_CTRL_SAMPLE_RATE_64 0x80
101 #define PAC1934_CTRL_SAMPLE_RATE_256 0x40
102 #define PAC1934_CTRL_SAMPLE_RATE_1024 0x00
103 #define PAC1934_CTRL_SINGLE_SHOT_MODE 0x10
104 
110 #define PAC1934_ACC_COUNT 0x02
111 
117 #define PAC1934_VPOWER1_ACC 0x03
118 #define PAC1934_VPOWER2_ACC 0x04
119 #define PAC1934_VPOWER3_ACC 0x05
120 #define PAC1934_VPOWER4_ACC 0x06
121 
127 #define PAC1934_VBUS1 0x07
128 #define PAC1934_VBUS2 0x08
129 #define PAC1934_VBUS3 0x09
130 #define PAC1934_VBUS4 0x0A
131 
137 #define PAC1934_VSENSE1 0x0B
138 #define PAC1934_VSENSE2 0x0C
139 #define PAC1934_VSENSE3 0x0D
140 #define PAC1934_VSENSE4 0x0E
141 
147 #define PAC1934_VBUS1_AVG 0x0F
148 #define PAC1934_VBUS2_AVG 0x10
149 #define PAC1934_VBUS3_AVG 0x11
150 #define PAC1934_VBUS4_AVG 0x12
151 
157 #define PAC1934_VSENSE1_AVG 0x13
158 #define PAC1934_VSENSE2_AVG 0x14
159 #define PAC1934_VSENSE3_AVG 0x15
160 #define PAC1934_VSENSE4_AVG 0x16
161 
167 #define PAC1934_VPOWER1 0x17
168 #define PAC1934_VPOWER2 0x18
169 #define PAC1934_VPOWER3 0x19
170 #define PAC1934_VPOWER4 0x1A
171 
177 #define PAC1934_CHANNEL_DIS 0x1C
178 #define PAC1934_CHANNEL_DIS_ALL_CHA 0xF0
179 
185 #define PAC1934_NEG_PWR 0x1D
186 
192 #define PAC1934_REFRESH_G_CMD 0x1E
193 
199 #define PAC1934_REFRESH_V_CMD 0x1F
200 
207 #define PAC1934_SLOW 0x20
208 
214 #define PAC1934_CTRL_ACT 0x21
215 
221 #define PAC1934_DIS_ACT 0x22
222 
228 #define PAC1934_NEG_PWR_ACT 0x23
229 
235 #define PAC1934_CTRL_LAT 0x24
236 
242 #define PAC1934_DIS_LAT 0x25
243 
249 #define PAC1934_NEG_PWR_LAT 0x26
250 
256 #define PAC1934_PRODUCT_ID 0xFD
257 
263 #define PAC1934_MANUFACT_ID 0xFE
264 
270 #define PAC1934_REVISION_ID 0xFF
271  // End group macro
274 // --------------------------------------------------------------- PUBLIC TYPES
283 typedef struct
284 {
285  // Output pins
286 
287  digital_out_t rst;
288 
289  // Input pins
290 
291  digital_in_t ale;
292 
293  // Modules
294 
295  i2c_master_t i2c;
296 
297  // ctx variable
298 
299  uint8_t slave_address;
300 
301 
302 } pac1934_t;
303 
307 typedef struct
308 {
309  // Communication gpio pins
310 
311  pin_name_t scl;
312  pin_name_t sda;
313 
314  // Additional gpio pins
315 
316  pin_name_t rst;
317 
318  pin_name_t ale;
319 
320  // static variable
321 
322  uint32_t i2c_speed;
323  uint8_t i2c_address;
324 
325 } pac1934_cfg_t;
326  // End types group
328 
329 // ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
330 
336 #ifdef __cplusplus
337 extern "C"{
338 #endif
339 
349 
369 void pac1934_generic_write ( pac1934_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len );
370 
381 void pac1934_generic_read ( pac1934_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len );
382 
393 void pac1934_write_byte ( pac1934_t *ctx, uint8_t wr_addr, uint8_t wr_data );
394 
405 uint8_t pac1934_read_byte ( pac1934_t *ctx, uint8_t rd_addr );
406 
417 uint16_t pac1934_read_two_byte ( pac1934_t *ctx, uint8_t rd_addr );
418 
429 uint32_t pac1934_read_four_byte ( pac1934_t *ctx, uint8_t rd_addr );
430 
441 void pac1934_read_reg( pac1934_t *ctx, uint8_t reg_addr, uint8_t *output_data, uint8_t cnt );
442 
454 void pac1934_send_command ( pac1934_t *ctx, uint8_t wr_cmd );
455 
471 float pac1934_measure_voltage ( pac1934_t *ctx, uint8_t channel );
472 
488 float pac1934_measure_current ( pac1934_t *ctx, uint8_t channel );
489 
505 float pac1934_measure_power ( pac1934_t *ctx, uint8_t channel );
506 
518 float pac1934_calc_power ( pac1934_t *ctx, float voltage, float amperage );
519 
534 float pac1934_measure_energy ( pac1934_t *ctx, uint8_t chann, uint16_t samp_rate );
535 
544 
553 
564 
575 
576 #ifdef __cplusplus
577 }
578 #endif
579 #endif // _PAC1934_H_
580  // End public_function group
583 
584 // ------------------------------------------------------------------------- END
pac1934_t::slave_address
uint8_t slave_address
Definition: pac1934.h:299
pac1934_init
PAC1934_RETVAL pac1934_init(pac1934_t *ctx, pac1934_cfg_t *cfg)
Initialization function.
pac1934_check_interrupt
uint8_t pac1934_check_interrupt(pac1934_t *ctx)
Check Interrupt function.
pac1934_calc_power
float pac1934_calc_power(pac1934_t *ctx, float voltage, float amperage)
Calculate Power function.
pac1934_cfg_t::i2c_address
uint8_t i2c_address
Definition: pac1934.h:323
pac1934_write_byte
void pac1934_write_byte(pac1934_t *ctx, uint8_t wr_addr, uint8_t wr_data)
Write one byte function.
pac1934_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: pac1934.h:322
pac1934_dev_disable
void pac1934_dev_disable(pac1934_t *ctx)
Disable device function.
pac1934_cfg_t::ale
pin_name_t ale
Definition: pac1934.h:318
pac1934_cfg_t::rst
pin_name_t rst
Definition: pac1934.h:316
pac1934_send_command
void pac1934_send_command(pac1934_t *ctx, uint8_t wr_cmd)
Send Command.
pac1934_t::i2c
i2c_master_t i2c
Definition: pac1934.h:295
pac1934_cfg_t
Click configuration structure definition.
Definition: pac1934.h:308
pac1934_cfg_t::scl
pin_name_t scl
Definition: pac1934.h:311
PAC1934_RETVAL
#define PAC1934_RETVAL
Definition: pac1934.h:73
pac1934_read_byte
uint8_t pac1934_read_byte(pac1934_t *ctx, uint8_t rd_addr)
Read one byte function.
pac1934_dev_enable
void pac1934_dev_enable(pac1934_t *ctx)
Enable device function.
pac1934_read_reg
void pac1934_read_reg(pac1934_t *ctx, uint8_t reg_addr, uint8_t *output_data, uint8_t cnt)
Read chosen number of bytes function.
pac1934_cfg_t::sda
pin_name_t sda
Definition: pac1934.h:312
pac1934_cfg_setup
void pac1934_cfg_setup(pac1934_cfg_t *cfg)
Config Object Initialization function.
pac1934_t::ale
digital_in_t ale
Definition: pac1934.h:291
pac1934_measure_power
float pac1934_measure_power(pac1934_t *ctx, uint8_t channel)
Measure Power function.
pac1934_read_four_byte
uint32_t pac1934_read_four_byte(pac1934_t *ctx, uint8_t rd_addr)
Read four bytes function.
pac1934_measure_current
float pac1934_measure_current(pac1934_t *ctx, uint8_t channel)
Measure Current function.
pac1934_t
Click ctx object definition.
Definition: pac1934.h:284
pac1934_dev_reset
void pac1934_dev_reset(pac1934_t *ctx)
Reset device function.
pac1934_read_two_byte
uint16_t pac1934_read_two_byte(pac1934_t *ctx, uint8_t rd_addr)
Read two bytes function.
pac1934_measure_voltage
float pac1934_measure_voltage(pac1934_t *ctx, uint8_t channel)
Measure Voltage function.
pac1934_generic_read
void pac1934_generic_read(pac1934_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len)
Generic read function.
pac1934_measure_energy
float pac1934_measure_energy(pac1934_t *ctx, uint8_t chann, uint16_t samp_rate)
Measure Energy function.
pac1934_t::rst
digital_out_t rst
Definition: pac1934.h:287
pac1934_generic_write
void pac1934_generic_write(pac1934_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len)
Generic write function.