current6  2.0.0.0
current6.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 CURRENT6_H
29 #define CURRENT6_H
30 
31 #ifdef __cplusplus
32 extern "C"{
33 #endif
34 
35 #include "drv_digital_out.h"
36 #include "drv_digital_in.h"
37 #include "drv_i2c_master.h"
38 
59 #define CURRENT6_REG_CONFIGURATION 0x00
60 #define CURRENT6_REG_STATUS 0x02
61 #define CURRENT6_REG_THRESHOLD_OVER_CURRENT 0x04
62 #define CURRENT6_REG_THRESHOLD_OVER_VOLTAGE 0x05
63 #define CURRENT6_REG_THRESHOLD_UNDER_VOLTAGE 0x06
64 #define CURRENT6_REG_WAKE_UP_CURRENT 0x07
65 #define CURRENT6_REG_MAX_PEAK_CURRENT 0x08
66 #define CURRENT6_REG_FIFO_CONFIGURATION 0x0A
67 #define CURRENT6_REG_CURRENT_MEASUREMENT 0x0C
68 #define CURRENT6_REG_VOLTAGE_MEASUREMENT 0x0E
69 #define CURRENT6_REG_CURRENT_VOLTAGE_MEASUREMENT 0x10
70 #define CURRENT6_REG_INT_EN 0x14
71  // current6_reg
73 
88 #define CURRENT6_OPMODE_STANDBY 0x0000
89 #define CURRENT6_OPMODE_LOW_POWER 0x0001
90 #define CURRENT6_OPMODE_SINGLE_CONVERSION 0x0002
91 #define CURRENT6_OPMODE_CONTINUOUS_MEASUREMENT 0x0003
92 #define CURRENT6_OPMODE_ACTIVE_MODE_4_SPS 0x0004
93 #define CURRENT6_OPMODE_ACTIVE_MODE_1_SPS 0x0005
94 #define CURRENT6_OPMODE_ACTIVE_MODE_0p25_SPS 0x0006
95 #define CURRENT6_OPMODE_ACTIVE_MODE_0p0625_SPS 0x0007
96 #define CURRENT6_OPMODE_ACTIVE_MODE_0p25_SPS 0x0006
97 #define CURRENT6_I2C_TIMEOUT_DISABLE 0x0008
98 #define CURRENT6_I2C_TIMEOUT_ENABLE 0x0000
99 #define CURRENT6_ALERT_UNFILTERED 0x0000
100 #define CURRENT6_ALERT_FILTERED 0x0010
101 #define CURRENT6_PEC_ENABLE 0x0020
102 #define CURRENT6_PEC_DISABLE 0x0000
103 #define CURRENT6_INPUT_RANGE_10mV 0x0040
104 #define CURRENT6_INPUT_RANGE_50mV 0x0000
105 #define CURRENT6_ENTER_HS_MODE 0x0080
106 #define CURRENT6_EXIT_HS_MODE 0x0000
107 #define CURRENT6_ADC_SAMPLE_RATE_15_KSPS 0x0000
108 #define CURRENT6_ADC_SAMPLE_RATE_23p45_KSPS 0x0200
109 #define CURRENT6_ADC_SAMPLE_RATE_30_KSPS 0x0300
110 #define CURRENT6_ADC_SAMPLE_RATE_37p5_KSPS 0x0400
111 #define CURRENT6_ADC_SAMPLE_RATE_47p1_KSPS 0x0500
112 #define CURRENT6_ADC_SAMPLE_RATE_60_KSPS 0x0600
113 #define CURRENT6_ADC_SAMPLE_RATE_93p5_KSPS 0x0700
114 #define CURRENT6_ADC_SAMPLE_RATE_120_KSPS 0x0800
115 #define CURRENT6_ADC_SAMPLE_RATE_150_KSPS 0x0900
116 #define CURRENT6_ADC_SAMPLE_RATE_234p5_KSPS 0x0A00
117 #define CURRENT6_ADC_SAMPLE_RATE_375_KSPS 0x0B00
118 #define CURRENT6_ADC_SAMPLE_RATE_468p5_KSPS 0x0C00
119 #define CURRENT6_ADC_SAMPLE_RATE_750_KSPS 0x0D00
120 #define CURRENT6_ADC_SAMPLE_RATE_1000_KSPS 0x0E00
121 #define CURRENT6_ADC_SAMPLE_RATE_0p5_KSPS 0x0F00
122 #define CURRENT6_DIGITAL_FILTER_NO_AVG 0x0000
123 #define CURRENT6_DIGITAL_FILTER_AVG_8_SAMPLES 0x1000
124 #define CURRENT6_DIGITAL_FILTER_AVG_16_SAMPLES 0x2000
125 #define CURRENT6_DIGITAL_FILTER_AVG_32_SAMPLES 0x3000
126 #define CURRENT6_DIGITAL_FILTER_AVG_64_SAMPLES 0x4000
127 #define CURRENT6_DIGITAL_FILTER_AVG_128_SAMPLES 0x5000
128 
133 #define CURRENT6_STATUS_WAKE_UP 0x0001
134 #define CURRENT6_STATUS_CONVERSION_READY 0x0002
135 #define CURRENT6_STATUS_OVERFLOW_CURRENT 0x0004
136 #define CURRENT6_STATUS_OVERFLOW_VOLTAGE 0x0008
137 #define CURRENT6_STATUS_UNDERFLOW_VOLTAGE 0x0010
138 #define CURRENT6_STATUS_I2C_TIMEOUT 0x0020
139 #define CURRENT6_STATUS_FIFO_ALARM 0x0040
140 #define CURRENT6_STATUS_FIFO_OVERFLOW 0x0080
141 #define CURRENT6_STATUS_FIFO_DATA_COUNT_MASK 0x3F00
142 
147 #define CURRENT6_FIFO_CFG_STORE_CURRENT_ONLY 0x0000
148 #define CURRENT6_FIFO_CFG_STORE_VOLTAGE_ONLY 0x0001
149 #define CURRENT6_FIFO_CFG_STORE_ALL 0x0002
150 #define CURRENT6_FIFO_CFG_DATA_OVERFLOW_MASK 0x3F00
151 #define CURRENT6_FIFO_CFG_DATA_OVERFLOW_DEFAULT 0x0100
152 #define CURRENT6_FIFO_CFG_ROLL_OVER 0x4000
153 #define CURRENT6_FIFO_CFG_FLUSH 0x8000
154 
159 #define CURRENT6_FIFO_DATA_VALID_32 0x80000000
160 #define CURRENT6_FIFO_DATA_VALID_16 0x8000
161 #define CURRENT6_FIFO_DATA_SIGN_BIT 0x1000
162 #define CURRENT6_FIFO_DATA_RESOLUTION 0x0FFF
163 
168 #define CURRENT6_INT_EN_WAKE_UP 0x01
169 #define CURRENT6_INT_EN_CONVERSION_READY 0x02
170 #define CURRENT6_INT_EN_OVERFLOW_CURRENT 0x04
171 #define CURRENT6_INT_EN_OVERFLOW_VOLTAGE 0x08
172 #define CURRENT6_INT_EN_UNDERFLOW_VOLTAGE 0x10
173 #define CURRENT6_INT_EN_I2C_TIMEOUT 0x20
174 #define CURRENT6_INT_EN_ALARM 0x40
175 #define CURRENT6_INT_EN_OVERFLOW 0x80
176 
181 #define CURRENT6_VOLTAGE_CALCULATION_COEFFICIENT 0.00917
182 #define CURRENT6_CURRENT_CALCULATION_COEFFICIENT 0.00125
183 
189 #define CURRENT6_SET_DEV_ADDR 0x21
190  // current6_set
192 
207 #define CURRENT6_MAP_MIKROBUS( cfg, mikrobus ) \
208  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
209  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
210  cfg.en = MIKROBUS( mikrobus, MIKROBUS_CS ); \
211  cfg.alr = MIKROBUS( mikrobus, MIKROBUS_INT )
212  // current6_map // current6
215 
220 typedef struct
221 {
222  // Output pins
223  digital_out_t en;
225  // Input pins
226  digital_in_t alr;
228  // Modules
229  i2c_master_t i2c;
231  // I2C slave address
232  uint8_t slave_address;
234  uint8_t pec_enable;
236 } current6_t;
237 
242 typedef struct
243 {
244  pin_name_t scl;
245  pin_name_t sda;
247  pin_name_t alr;
248  pin_name_t en;
250  uint32_t i2c_speed;
251  uint8_t i2c_address;
254 
259 typedef enum
260 {
262  CURRENT6_ERROR = -1
263 
265 
282 
298 
313 
328 err_t current6_write_byte ( current6_t *ctx, uint8_t reg, uint8_t data_in );
329 
344 err_t current6_read_byte ( current6_t *ctx, uint8_t reg, uint8_t *data_out );
345 
360 err_t current6_write_word ( current6_t *ctx, uint8_t reg, uint16_t data_in );
361 
376 err_t current6_read_word ( current6_t *ctx, uint8_t reg, uint16_t *data_out );
377 
391 err_t current6_read_32 ( current6_t *ctx, uint32_t *data_out );
392 
402 
416 err_t current6_read_data ( current6_t *ctx, float *voltage, float *current );
417 
430 err_t current6_get_status ( current6_t *ctx, uint16_t *status );
431 
442 
453 
463 
473 
474 #ifdef __cplusplus
475 }
476 #endif
477 #endif // CURRENT6_H
478  // current6
480 
481 // ------------------------------------------------------------------------ END
current6_cfg_t::i2c_address
uint8_t i2c_address
Definition: current6.h:251
current6_enable_device
void current6_enable_device(current6_t *ctx)
Current 6 enable device function.
current6_enable_pec
err_t current6_enable_pec(current6_t *ctx)
PEC Enable function.
CURRENT6_OK
@ CURRENT6_OK
Definition: current6.h:261
current6_t::slave_address
uint8_t slave_address
Definition: current6.h:232
current6_t::en
digital_out_t en
Definition: current6.h:223
current6_cfg_t
Current 6 Click configuration object.
Definition: current6.h:243
current6_read_byte
err_t current6_read_byte(current6_t *ctx, uint8_t reg, uint8_t *data_out)
Current 6 read byte function.
current6_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: current6.h:250
current6_cfg_t::en
pin_name_t en
Definition: current6.h:248
current6_write_word
err_t current6_write_word(current6_t *ctx, uint8_t reg, uint16_t data_in)
Current 6 write word function.
current6_write_byte
err_t current6_write_byte(current6_t *ctx, uint8_t reg, uint8_t data_in)
Current 6 write byte function.
current6_t::i2c
i2c_master_t i2c
Definition: current6.h:229
current6_t::pec_enable
uint8_t pec_enable
Definition: current6.h:234
current6_cfg_t::sda
pin_name_t sda
Definition: current6.h:245
current6_t::alr
digital_in_t alr
Definition: current6.h:226
current6_cfg_t::scl
pin_name_t scl
Definition: current6.h:244
current6_read_data
err_t current6_read_data(current6_t *ctx, float *voltage, float *current)
Current 6 read data function.
current6_cfg_t::alr
pin_name_t alr
Definition: current6.h:247
current6_return_value_t
current6_return_value_t
Current 6 Click return value data.
Definition: current6.h:260
current6_disable_pec
err_t current6_disable_pec(current6_t *ctx)
PEC Disable function.
current6_read_32
err_t current6_read_32(current6_t *ctx, uint32_t *data_out)
Current 6 read 32-bit function.
current6_init
err_t current6_init(current6_t *ctx, current6_cfg_t *cfg)
Current 6 initialization function.
current6_cfg_setup
void current6_cfg_setup(current6_cfg_t *cfg)
Current 6 configuration object setup function.
current6_read_word
err_t current6_read_word(current6_t *ctx, uint8_t reg, uint16_t *data_out)
Current 6 read word function.
current6_t
Current 6 Click context object.
Definition: current6.h:221
current6_default_cfg
err_t current6_default_cfg(current6_t *ctx)
Current 6 default configuration function.
current6_get_status
err_t current6_get_status(current6_t *ctx, uint16_t *status)
Current 6 get status function.
current6_get_alert_pin
uint8_t current6_get_alert_pin(current6_t *ctx)
Current 6 get alert pin function.
current6_disable_device
void current6_disable_device(current6_t *ctx)
Current 6 disable device function.
CURRENT6_ERROR
@ CURRENT6_ERROR
Definition: current6.h:262