battmon2  2.0.0.0
battmon2.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 BATTMON2_H
29 #define BATTMON2_H
30 
31 #ifdef __cplusplus
32 extern "C"{
33 #endif
34 
35 #include "mikrosdk_version.h"
36 
37 #ifdef __GNUC__
38 #if mikroSDK_GET_VERSION < 20800ul
39 #include "rcu_delays.h"
40 #else
41 #include "delays.h"
42 #endif
43 #endif
44 
45 #include "drv_digital_out.h"
46 #include "drv_digital_in.h"
47 #include "drv_i2c_master.h"
48 
69 #define BATTMON2_REG_STATUS 0x00
70 #define BATTMON2_REG_V_ALRT_TH 0x01
71 #define BATTMON2_REG_T_ALRT_TH 0x02
72 #define BATTMON2_REG_S_ALRT_TH 0x03
73 #define BATTMON2_REG_AT_RATE 0x04
74 #define BATTMON2_REG_REP_CAP 0x05
75 #define BATTMON2_REG_REP_SOC 0x06
76 #define BATTMON2_REG_AGE 0x07
77 #define BATTMON2_REG_TEMP 0x08
78 #define BATTMON2_REG_V_CELL 0x09
79 #define BATTMON2_REG_CURRENT 0x0A
80 #define BATTMON2_REG_AVG_CURRENT 0x0B
81 #define BATTMON2_REG_Q_RESIDUAL 0x0C
82 #define BATTMON2_REG_MIX_SOC 0x0D
83 #define BATTMON2_REG_AV_SOC 0x0E
84 #define BATTMON2_REG_MIX_CAP 0x0F
85 #define BATTMON2_REG_FULL_CAP_REP 0x10
86 #define BATTMON2_REG_TTE 0x11
87 #define BATTMON2_REG_QR_TABLE_00 0x12
88 #define BATTMON2_REG_FULL_SOC_THR 0x13
89 #define BATTMON2_REG_R_CELL 0x14
90 #define BATTMON2_REG_AVG_TA 0x16
91 #define BATTMON2_REG_CYCLES 0x17
92 #define BATTMON2_REG_DESIGN_CAP 0x18
93 #define BATTMON2_REG_AVG_V_CELL 0x19
94 #define BATTMON2_REG_MAX_MIN_TEMP 0x1A
95 #define BATTMON2_REG_MAX_MIN_VOLT 0x1B
96 #define BATTMON2_REG_MAX_MIN_CURR 0x1C
97 #define BATTMON2_REG_CONFIG 0x1D
98 #define BATTMON2_REG_I_CHG_TERM 0x1E
99 #define BATTMON2_REG_AV_CAP 0x1F
100 #define BATTMON2_REG_TTF 0x20
101 #define BATTMON2_REG_DEV_NAME 0x21
102 #define BATTMON2_REG_QR_TABLE_10 0x22
103 #define BATTMON2_REG_FULL_CAP_NOM 0x23
104 #define BATTMON2_REG_AIN 0x27
105 #define BATTMON2_REG_LEARN_CFG 0x28
106 #define BATTMON2_REG_FILTER_CFG 0x29
107 #define BATTMON2_REG_RELAX_CFG 0x2A
108 #define BATTMON2_REG_MISC_CFG 0x2B
109 #define BATTMON2_REG_T_GAIN 0x2C
110 #define BATTMON2_REG_T_OFF 0x2D
111 #define BATTMON2_REG_C_GAIN 0x2E
112 #define BATTMON2_REG_C_OFF 0x2F
113 #define BATTMON2_REG_QR_TABLE_20 0x32
114 #define BATTMON2_REG_DIE_TEMP 0x34
115 #define BATTMON2_REG_FULL_CAP 0x35
116 #define BATTMON2_REG_R_COMP_0 0x38
117 #define BATTMON2_REG_TEMP_CO 0x39
118 #define BATTMON2_REG_V_EMPTY 0x3A
119 #define BATTMON2_REG_F_STAT 0x3D
120 #define BATTMON2_REG_TIMER 0x3E
121 #define BATTMON2_REG_SHDN_TIMER 0x3F
122 #define BATTMON2_REG_QR_TABLE_30 0x42
123 #define BATTMON2_REG_R_GAIN 0x43
124 #define BATTMON2_REG_DQ_ACC 0x45
125 #define BATTMON2_REG_DP_ACC 0x46
126 #define BATTMON2_REG_CONVG_CFG 0x49
127 #define BATTMON2_REG_V_F_REM_CAP 0x4A
128 #define BATTMON2_REG_QH 0x4D
129 #define BATTMON2_REG_SOFT_WAKEUP 0x60
130 #define BATTMON2_REG_STATUS_2 0xB0
131 #define BATTMON2_REG_POWER 0xB1
132 #define BATTMON2_REG_ID_USER_MEM_2 0xB2
133 #define BATTMON2_REG_AVG_POWER 0xB3
134 #define BATTMON2_REG_I_ALRT_TH 0xB4
135 #define BATTMON2_REG_TTF_CFG 0xB5
136 #define BATTMON2_REG_C_V_MIX_CAP 0xB6
137 #define BATTMON2_REG_C_V_HALF_TIME 0xB7
138 #define BATTMON2_REG_C_G_TEMP_CO 0xB8
139 #define BATTMON2_REG_CURVE 0xB9
140 #define BATTMON2_REG_HIB_CFG 0xBA
141 #define BATTMON2_REG_CONFIG_2 0xBB
142 #define BATTMON2_REG_V_RIPPLE 0xBC
143 #define BATTMON2_REG_RIPPLE_CFG 0xBD
144 #define BATTMON2_REG_TIMER_H 0xBE
145 #define BATTMON2_REG_R_SENSE_USER_MEM_3 0xD0
146 #define BATTMON2_REG_SC_OCV_LIM 0xD1
147 #define BATTMON2_REG_V_GAIN 0xD2
148 #define BATTMON2_REG_SOC_HOLD 0xD3
149 #define BATTMON2_REG_MAX_PEAK_POWER 0xD4
150 #define BATTMON2_REG_SUS_PEAK_POWER 0xD5
151 #define BATTMON2_REG_PACK_RESISTANCE 0xD6
152 #define BATTMON2_REG_SYS_RESISTANCE 0xD7
153 #define BATTMON2_REG_MIN_SYS_VOLTAGE 0xD8
154 #define BATTMON2_REG_MPP_CURRENT 0xD9
155 #define BATTMON2_REG_SPP_CURRENT 0xDA
156 #define BATTMON2_REG_MODEL_CFG 0xDB
157 #define BATTMON2_REG_AT_Q_RESIDUAL 0xDC
158 #define BATTMON2_REG_AT_TTE 0xDD
159 #define BATTMON2_REG_AT_AV_SOC 0xDE
160 #define BATTMON2_REG_AT_AV_CAP 0xDF
161  // battmon2_reg
163 
178 #define BATTMON2_CAPACITY_RESOLUTION 0.5
179 #define BATTMON2_PERCENTAGE_RESOLUTION ( 1.0 / 256.0 )
180 #define BATTMON2_VOLTAGE_RESOLUTION ( 1.25 / 16.0 )
181 #define BATTMON2_CURRENT_RESOLUTION 0.15625
182 #define BATTMON2_TEMPERATURE_RESOLUTION ( 1.0 / 256.0 )
183 #define BATTMON2_TIME_RESOLUTION 5.625
184 
189 #define BATTMON2_DEVICE_ID 0x4039
190 
196 #define BATTMON2_SET_DEV_ADDR 0x36
197  // battmon2_set
199 
214 #define BATTMON2_MAP_MIKROBUS( cfg, mikrobus ) \
215  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
216  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
217  cfg.alert = MIKROBUS( mikrobus, MIKROBUS_INT )
218  // battmon2_map // battmon2
221 
226 typedef struct
227 {
228  // Input pins
229  digital_in_t alert;
231  // Modules
232  i2c_master_t i2c;
234  // I2C slave address
235  uint8_t slave_address;
237 } battmon2_t;
238 
243 typedef struct
244 {
245  pin_name_t scl;
246  pin_name_t sda;
248  pin_name_t alert;
250  uint32_t i2c_speed;
251  uint8_t i2c_address;
254 
259 typedef enum
260 {
262  BATTMON2_ERROR = -1
263 
265 
282 
297 
312 err_t battmon2_generic_write ( battmon2_t *ctx, uint8_t reg, uint16_t *tx_buf, uint8_t tx_len );
313 
328 err_t battmon2_generic_read ( battmon2_t *ctx, uint8_t reg, uint16_t *rx_buf, uint8_t rx_len );
329 
343 err_t battmon2_write_register ( battmon2_t *ctx, uint8_t reg, uint16_t data_in );
344 
358 err_t battmon2_read_register ( battmon2_t *ctx, uint8_t reg, uint16_t *data_out );
359 
371 
381 
393 err_t battmon2_get_die_temperature ( battmon2_t *ctx, float *temperature );
394 
406 err_t battmon2_get_battery_capacity ( battmon2_t *ctx, float *capacity );
407 
419 err_t battmon2_get_battery_percentage ( battmon2_t *ctx, float *percentage );
420 
432 err_t battmon2_get_battery_voltage ( battmon2_t *ctx, float *voltage );
433 
445 err_t battmon2_get_battery_current ( battmon2_t *ctx, float *current );
446 
458 err_t battmon2_get_battery_tte ( battmon2_t *ctx, uint32_t *time_to_empty );
459 
471 err_t battmon2_get_battery_ttf ( battmon2_t *ctx, uint32_t *time_to_full );
472 
473 #ifdef __cplusplus
474 }
475 #endif
476 #endif // BATTMON2_H
477  // battmon2
479 
480 // ------------------------------------------------------------------------ END
battmon2_cfg_t::alert
pin_name_t alert
Definition: battmon2.h:248
battmon2_get_battery_tte
err_t battmon2_get_battery_tte(battmon2_t *ctx, uint32_t *time_to_empty)
BATT-MON 2 get battery tte function.
battmon2_generic_read
err_t battmon2_generic_read(battmon2_t *ctx, uint8_t reg, uint16_t *rx_buf, uint8_t rx_len)
BATT-MON 2 I2C reading function.
battmon2_t
BATT-MON 2 Click context object.
Definition: battmon2.h:227
battmon2_cfg_t
BATT-MON 2 Click configuration object.
Definition: battmon2.h:244
BATTMON2_OK
@ BATTMON2_OK
Definition: battmon2.h:261
battmon2_generic_write
err_t battmon2_generic_write(battmon2_t *ctx, uint8_t reg, uint16_t *tx_buf, uint8_t tx_len)
BATT-MON 2 I2C writing function.
battmon2_check_communication
err_t battmon2_check_communication(battmon2_t *ctx)
BATT-MON 2 check communication function.
battmon2_t::i2c
i2c_master_t i2c
Definition: battmon2.h:232
battmon2_t::slave_address
uint8_t slave_address
Definition: battmon2.h:235
battmon2_cfg_t::scl
pin_name_t scl
Definition: battmon2.h:245
battmon2_return_value_t
battmon2_return_value_t
BATT-MON 2 Click return value data.
Definition: battmon2.h:260
battmon2_get_battery_capacity
err_t battmon2_get_battery_capacity(battmon2_t *ctx, float *capacity)
BATT-MON 2 get battery capacity function.
battmon2_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: battmon2.h:250
battmon2_get_battery_voltage
err_t battmon2_get_battery_voltage(battmon2_t *ctx, float *voltage)
BATT-MON 2 get battery voltage function.
battmon2_get_battery_ttf
err_t battmon2_get_battery_ttf(battmon2_t *ctx, uint32_t *time_to_full)
BATT-MON 2 get battery ttf function.
battmon2_read_register
err_t battmon2_read_register(battmon2_t *ctx, uint8_t reg, uint16_t *data_out)
BATT-MON 2 read register function.
battmon2_cfg_setup
void battmon2_cfg_setup(battmon2_cfg_t *cfg)
BATT-MON 2 configuration object setup function.
battmon2_get_battery_percentage
err_t battmon2_get_battery_percentage(battmon2_t *ctx, float *percentage)
BATT-MON 2 get battery percentage function.
BATTMON2_ERROR
@ BATTMON2_ERROR
Definition: battmon2.h:262
battmon2_write_register
err_t battmon2_write_register(battmon2_t *ctx, uint8_t reg, uint16_t data_in)
BATT-MON 2 write register function.
battmon2_cfg_t::i2c_address
uint8_t i2c_address
Definition: battmon2.h:251
battmon2_init
err_t battmon2_init(battmon2_t *ctx, battmon2_cfg_t *cfg)
BATT-MON 2 initialization function.
battmon2_t::alert
digital_in_t alert
Definition: battmon2.h:229
battmon2_get_alert_pin
uint8_t battmon2_get_alert_pin(battmon2_t *ctx)
BATT-MON 2 get alert pin function.
battmon2_get_battery_current
err_t battmon2_get_battery_current(battmon2_t *ctx, float *current)
BATT-MON 2 get battery current function.
battmon2_get_die_temperature
err_t battmon2_get_die_temperature(battmon2_t *ctx, float *temperature)
BATT-MON 2 get die temperature function.
battmon2_cfg_t::sda
pin_name_t sda
Definition: battmon2.h:246