current3  2.0.0.0
current3.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 CURRENT3_H
36 #define CURRENT3_H
37 
38 #include "drv_digital_out.h"
39 #include "drv_digital_in.h"
40 #include "drv_i2c_master.h"
41 
42 // -------------------------------------------------------------- PUBLIC MACROS
52 #define CURRENT3_MAP_MIKROBUS( cfg, mikrobus ) \
53  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
54  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
55  cfg.trm = MIKROBUS( mikrobus, MIKROBUS_RST ); \
56  cfg.alr = MIKROBUS( mikrobus, MIKROBUS_INT )
57 
63 #define CURRENT3_RETVAL uint8_t
64 
65 #define CURRENT3_OK 0x00
66 #define CURRENT3_INIT_ERROR 0xFF
67 
73 #define CURRENT3_I2C_SLAVE_ADDR 0x4C
74 #define CURRENT3_ALERT_RESPONSE_ADDRESS 0x0C
75 
81 #define CURRENT3_REG_INT_DIODE_DATA_HIGH_BYTE 0x00
82 #define CURRENT3_REG_EXT_DIODE_1_DATA_HIGH_BYTE 0x01
83 #define CURRENT3_REG_STATUS 0x02
84 #define CURRENT3_REG_CFG 0x03
85 #define CURRENT3_REG_CONVERSION_RATE 0x04
86 #define CURRENT3_REG_INT_DIODE_HIGH_LIMIT 0x05
87 #define CURRENT3_REG_INT_DIODE_LOW_LIMIT 0x06
88 #define CURRENT3_REG_EXT_DIODE_1_HIGH_LIMIT_HIGH_BYTE 0x07
89 #define CURRENT3_REG_EXT_DIODE_1_LOW_LIMIT_HIGH_BYTE 0x08
90 #define CURRENT3_REG_ONE_SHOT 0x0F
91 #define CURRENT3_REG_EXT_DIODE_1_DATA_LOW_BYTE 0x10
92 #define CURRENT3_REG_EXT_DIODE_1_HIGH_LIMIT_LOW_BYTE 0x13
93 #define CURRENT3_REG_EXT_DIODE_1_LOW_LIMIT_LOW_BYTE 0x14
94 #define CURRENT3_REG_EXT_DIODE_1_TCRIT_LIMIT 0x19
95 #define CURRENT3_REG_EXT_DIODE_FAULT 0x1B
96 #define CURRENT3_REG_CHANNEL_MASK_REGISTER 0x1F
97 #define CURRENT3_REG_INT_DIODE_TCRIT_LIMIT 0x20
98 #define CURRENT3_REG_TCRIT_HYSTERESIS 0x21
99 #define CURRENT3_REG_CONSECUTIVE_ALERT 0x22
100 #define CURRENT3_REG_EXT_DIODE_1_BETA_CFG 0x25
101 #define CURRENT3_REG_EXT_DIODE_1_IDEALITY_FACTOR 0x27
102 #define CURRENT3_REG_INT_DIODE_DATA_LOW_BYTE 0x29
103 #define CURRENT3_REG_HIGH_LIMIT_STATUS 0x35
104 #define CURRENT3_REG_LOW_LIMIT_STATUS 0x36
105 #define CURRENT3_REG_CRIT_LIMIT_STATUS 0x37
106 #define CURRENT3_REG_INT_DIODE_HIGH_BYTE 0x38
107 #define CURRENT3_REG_INT_DIODE_LOW_BYTE 0x39
108 #define CURRENT3_REG_EXT_DIODE_1_HIGH_BYTE 0x3A
109 #define CURRENT3_REG_EXT_DIODE_1_LOW_BYTE 0x3B
110 #define CURRENT3_REG_AVERAGING_CONTROL 0x40
111 
117 #define CURRENT3_REG_VOLTAGE_SAMPLING_CFG 0x50
118 #define CURRENT3_REG_CURRENT_SENSE_SAMPLING_CFG 0x51
119 #define CURRENT3_REG_PEAK_DETECTION_CONFIG 0x52
120 #define CURRENT3_REG_SENSE_VOLTAGE_HIGH_BYTE 0x54
121 #define CURRENT3_REG_SENSE_VOLTAGE_LOW_BYTE 0x55
122 #define CURRENT3_REG_SOURCE_VOLTAGE_HIGH_BYTE 0x58
123 #define CURRENT3_REG_SOURCE_VOLTAGE_LOW_BYTE 0x59
124 #define CURRENT3_REG_POWER_RATIO_HIGH_BYTE 0x5B
125 #define CURRENT3_REG_POWER_RATIO_LOW_BYTE 0x5C
126 
132 #define CURRENT3_REG_SENSE_VOLTAGE_HIGH_LIMIT 0x60
133 #define CURRENT3_REG_SENSE_VOLTAGE_LOW_LIMIT 0x61
134 #define CURRENT3_REG_SOURCE_VOLTAGE_HIGH_LIMIT 0x64
135 #define CURRENT3_REG_SOURCE_VOLTAGE_LOW_LIMIT 0x65
136 #define CURRENT3_REG_SENSE_VOLTAGE_VCRIT_LIMIT 0x66
137 #define CURRENT3_REG_SOURCE_VOLTAGE_VCRIT_LIMIT 0x68
138 #define CURRENT3_REG_SENSE_VCRIT_HYSTERESIS 0x69
139 #define CURRENT3_REG_SOURCE_VOLTAGE_VCRIT_HYSTERESIS 0x6A
140 #define CURRENT3_REG_PRODUCT_FEATURES 0xFC
141 #define CURRENT3_REG_PRODUCT_ID 0xFD
142 #define CURRENT3_REG_SMSC_ID 0xFE
143 #define CURRENT3_REG_REVISION 0xFF
144 
150 #define CURRENT3_DEV_ID 0x39
151 
157 #define CURRENT3_TEMP_INTERNAL_DIODE 0x00
158 #define CURRENT3_TEMP_EXTERNAL_DIODE 0x01
159 
170 #define CURRENT3_PK_ALERT 0x00
171 #define CURRENT3_PK_THERM 0x01
172 
178 #define CURRENT3_V_QUEUE_1 0x00
179 #define CURRENT3_V_QUEUE_2 0x01
180 #define CURRENT3_V_QUEUE_3 0x02
181 #define CURRENT3_V_QUEUE_4 0x03
182 
183 #define CURRENT3_V_AVG_DISABLE 0x00
184 #define CURRENT3_V_AVG_2x 0x01
185 #define CURRENT3_V_AVG_4x 0x02
186 #define CURRENT3_V_AVG_8x 0x03
187 
199 #define CURRENT3_NUM_OF_CONS_OUT_LIMIT_MEASUR_1 0x00
200 #define CURRENT3_NUM_OF_CONS_OUT_LIMIT_MEASUR_2 0x01
201 #define CURRENT3_NUM_OF_CONS_OUT_LIMIT_MEASUR_3 0x02
202 #define CURRENT3_NUM_OF_CONS_OUT_LIMIT_MEASUR_4 0x03
203 
209 #define CURRENT3_CURRENT_SENSE_AVG_1X 0x00
210 #define CURRENT3_CURRENT_SENSE_AVG_2X 0x01
211 #define CURRENT3_CURRENT_SENSE_AVG_4X 0x02
212 #define CURRENT3_CURRENT_SENSE_AVG_8X 0x03
213 
219 #define CURRENT3_CS_SAMP_TIME_82ms 0x00
220 #define CURRENT3_CS_SAMP_TIME_164ms 0x02
221 #define CURRENT3_CS_SAMP_TIME_328ms 0x03
222 
228 #define CURRENT3_SENSOR_RANGE_BIT_MASK 0x03
229 #define CURRENT3_SENSOR_RANGE_10_mV 0x00
230 #define CURRENT3_SENSOR_RANGE_20_mV 0x01
231 #define CURRENT3_SENSOR_RANGE_40_mV 0x02
232 #define CURRENT3_SENSOR_RANGE_80_mV 0x03
233 
245 #define CURRENT3_MASK_ALL_ALERT_NOT_MASKED 0x00
246 #define CURRENT3_MASK_ALL_ALERT_INTERRUPT_MODE 0x01
247 
253 #define CURRENT3_TMEAS_STOP_MEASURING_ALL 0x00
254 #define CURRENT3_TMEAS_STOP_NOT_MEASURING 0x01
255 
261 #define CURRENT3_ALERT_COMP_MODE_INTERRUPT 0x00
262 #define CURRENT3_ALERT_COMP_MODE_COMPARATOR 0x01
263 
269 #define CURRENT3_DIS_REC1_ENABLED 0x00
270 #define CURRENT3_DIS_REC1_DISABLED 0x01
271 
277 #define CURRENT3_IMEAS_SOURCE_SENSE_VOLTAGE_STOP_MEASUR 0x00
278 #define CURRENT3_IMEAS_SOURCE_SENSE_VOLTAGE_START_MEASUR 0x01
279 
285 #define CURRENT3_DAVG_DIS_ENABLED 0x00
286 #define CURRENT3_DAVG_DIS_DISABLED 0x01
287 
293 #define CURRENT3_SENSOR_RANGE_VALUE_10_mV 10.0
294 #define CURRENT3_SENSOR_RANGE_VALUE_20_mV 20.0
295 #define CURRENT3_SENSOR_RANGE_VALUE_40_mV 40.0
296 #define CURRENT3_SENSOR_RANGE_VALUE_80_mV 80.0
297 #define CURRENT3_DEFAULT_RSENSE 10.0
298 #define CURRENT3_FULL_SCALE_SENSE_VOLTAGE 2047
299 #define CURRENT3_CON_FCT_mV_TO_V 1000
300 #define CURRENT3_SOURCE_VOLTAGE_CALC_FACT 0.0117
301 #define CURRENT3_TEMPERATURE_CALC_FACT 0.125
302  // End group macro
305 // --------------------------------------------------------------- PUBLIC TYPES
314 typedef struct
315 {
316  // Input pins
317 
318  digital_in_t trm;
319  digital_in_t alr;
320 
321  // Modules
322 
323  i2c_master_t i2c;
324 
325  // ctx variable
326 
327  uint8_t slave_address;
328 
329 } current3_t;
330 
334 typedef struct
335 {
336  // Communication gpio pins
337 
338  pin_name_t scl;
339  pin_name_t sda;
340 
341  // Additional gpio pins
342 
343  pin_name_t trm;
344  pin_name_t alr;
345 
346  // static variable
347 
348  uint32_t i2c_speed;
349  uint8_t i2c_address;
350 
352 
356 typedef struct
357 {
358  uint8_t mask_all;
359  uint8_t tmeas_stop;
360  uint8_t alert_comp;
361  uint8_t dis_rec1;
362  uint8_t imeas_stop;
363  uint8_t davg_dis;
364 }
366 
370 typedef struct
371 {
372  uint8_t busy_data;
373  uint8_t peak_data;
374  uint8_t high_data;
375  uint8_t low_data;
376  uint8_t fault_data;
377  uint8_t crit_data;
378 }
380 
384 typedef struct
385 {
386  uint8_t pk_alert_therm;
387  uint8_t v_queue;
388  uint8_t v_avg;
389 }
391 
395 typedef struct
396 {
397  uint8_t cs_queue;
398  uint8_t cs_samp_avg;
399  uint8_t cs_samp_time;
400  uint8_t cs_rng;
401 }
403  // End types group
405 // ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
406 
412 #ifdef __cplusplus
413 extern "C"{
414 #endif
415 
424 void current3_cfg_setup ( current3_cfg_t *cfg );
425 
435 
443 void current3_default_cfg ( current3_t *ctx, current3_sense_cfg_data_t sense_cfg_data );
444 
455 void current3_generic_write ( current3_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len );
456 
467 void current3_generic_read ( current3_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len );
468 
485 float current3_get_temperature ( current3_t *ctx, uint8_t temp_sel );
486 
496 void current3_get_status ( current3_t *ctx, current3_status_data_t *status_cfg );
497 
508 
519 
530 
541 
552 
563 
581 int16_t current3_get_sense_voltage ( current3_t *ctx );
582 
594 
606 float current3_get_current ( current3_t *ctx );
607 
618 uint8_t current3_check_therm ( current3_t *ctx );
619 
633 uint8_t current3_check_alert ( current3_t *ctx );
634 
635 #ifdef __cplusplus
636 }
637 #endif
638 #endif // _CURRENT3_H_
639  // End public_function group
642 
643 // ------------------------------------------------------------------------- END
current3_check_therm
uint8_t current3_check_therm(current3_t *ctx)
Check therm ststus function.
current3_status_data_t::busy_data
uint8_t busy_data
Definition: current3.h:372
current3_cfg_data_t::mask_all
uint8_t mask_all
Definition: current3.h:358
current3_default_cfg
void current3_default_cfg(current3_t *ctx, current3_sense_cfg_data_t sense_cfg_data)
Click Default Configuration function.
current3_set_configuration
void current3_set_configuration(current3_t *ctx, current3_cfg_data_t cfg_data)
Set configuration function.
current3_set_voltage_sampling_config
void current3_set_voltage_sampling_config(current3_t *ctx, current3_voltage_cfg_data_t vtg_cfg_data)
Set voltage sampling configuration function.
current3_status_data_t
Click status data structure definition.
Definition: current3.h:370
current3_get_sense_voltage
int16_t current3_get_sense_voltage(current3_t *ctx)
Get sense voltage function.
CURRENT3_RETVAL
#define CURRENT3_RETVAL
Definition: current3.h:63
current3_status_data_t::peak_data
uint8_t peak_data
Definition: current3.h:373
current3_cfg_t::trm
pin_name_t trm
Definition: current3.h:343
current3_get_current
float current3_get_current(current3_t *ctx)
Get current measurement function.
current3_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: current3.h:348
current3_cfg_t::sda
pin_name_t sda
Definition: current3.h:339
current3_t::alr
digital_in_t alr
Definition: current3.h:319
current3_generic_write
void current3_generic_write(current3_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len)
Generic write function.
current3_status_data_t::low_data
uint8_t low_data
Definition: current3.h:375
current3_status_data_t::crit_data
uint8_t crit_data
Definition: current3.h:377
current3_set_sense_sampling_config
void current3_set_sense_sampling_config(current3_t *ctx, current3_sense_cfg_data_t sense_cfg_data)
Set sense sampling configuration function.
current3_voltage_cfg_data_t::v_avg
uint8_t v_avg
Definition: current3.h:388
current3_get_temperature
float current3_get_temperature(current3_t *ctx, uint8_t temp_sel)
Get temperature function.
current3_voltage_cfg_data_t::pk_alert_therm
uint8_t pk_alert_therm
Definition: current3.h:386
current3_sense_cfg_data_t::cs_rng
uint8_t cs_rng
Definition: current3.h:400
current3_voltage_cfg_data_t::v_queue
uint8_t v_queue
Definition: current3.h:387
current3_cfg_data_t::imeas_stop
uint8_t imeas_stop
Definition: current3.h:362
current3_get_source_voltage
float current3_get_source_voltage(current3_t *ctx)
Get source voltage function.
current3_cfg_t
Click configuration structure definition.
Definition: current3.h:334
current3_get_voltage_sampling_config
void current3_get_voltage_sampling_config(current3_t *ctx, current3_voltage_cfg_data_t *vtg_cfg_data)
Get voltage sampling configuration function.
current3_cfg_t::scl
pin_name_t scl
Definition: current3.h:338
current3_voltage_cfg_data_t
Click voltage configuration structure definition.
Definition: current3.h:384
current3_t::slave_address
uint8_t slave_address
Definition: current3.h:327
current3_cfg_t::alr
pin_name_t alr
Definition: current3.h:344
current3_cfg_t::i2c_address
uint8_t i2c_address
Definition: current3.h:349
current3_t
Click ctx object definition.
Definition: current3.h:314
current3_check_alert
uint8_t current3_check_alert(current3_t *ctx)
Check alert ststus function.
current3_t::trm
digital_in_t trm
Definition: current3.h:318
current3_get_status
void current3_get_status(current3_t *ctx, current3_status_data_t *status_cfg)
Get status function.
current3_sense_cfg_data_t::cs_samp_time
uint8_t cs_samp_time
Definition: current3.h:399
current3_sense_cfg_data_t
Click sense configuration structure definition.
Definition: current3.h:395
current3_cfg_data_t
Click configuration data definition.
Definition: current3.h:356
current3_sense_cfg_data_t::cs_samp_avg
uint8_t cs_samp_avg
Definition: current3.h:398
current3_status_data_t::fault_data
uint8_t fault_data
Definition: current3.h:376
current3_generic_read
void current3_generic_read(current3_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len)
Generic read function.
current3_cfg_data_t::tmeas_stop
uint8_t tmeas_stop
Definition: current3.h:359
current3_sense_cfg_data_t::cs_queue
uint8_t cs_queue
Definition: current3.h:397
current3_get_sense_sampling_config
void current3_get_sense_sampling_config(current3_t *ctx, current3_sense_cfg_data_t *sense_cfg_data)
Get sense sampling configuration function.
current3_status_data_t::high_data
uint8_t high_data
Definition: current3.h:374
current3_t::i2c
i2c_master_t i2c
Definition: current3.h:323
current3_init
CURRENT3_RETVAL current3_init(current3_t *ctx, current3_cfg_t *cfg)
Initialization function.
current3_cfg_setup
void current3_cfg_setup(current3_cfg_t *cfg)
Config Object Initialization function.
current3_cfg_data_t::davg_dis
uint8_t davg_dis
Definition: current3.h:363
current3_get_configuration
void current3_get_configuration(current3_t *ctx, current3_cfg_data_t *cfg_data)
Get configuration function.
current3_cfg_data_t::alert_comp
uint8_t alert_comp
Definition: current3.h:360
current3_cfg_data_t::dis_rec1
uint8_t dis_rec1
Definition: current3.h:361