charger8  2.0.0.0
charger8.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 CHARGER8_H
36 #define CHARGER8_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 
53 // -------------------------------------------------------------- PUBLIC MACROS
63 #define CHARGER8_M5REG_STATUS 0x00
64 #define CHARGER8_M5REG_VALRTTH 0x01
65 #define CHARGER8_M5REG_TALRTTH 0x02
66 #define CHARGER8_M5REG_SALRTTH 0x03
67 #define CHARGER8_M5REG_ATRATE 0x04
68 #define CHARGER8_M5REG_REP_CAP 0x05
69 #define CHARGER8_M5REG_REP_SOC 0x06
70 #define CHARGER8_M5REG_AGE 0x07
71 #define CHARGER8_M5REG_TEMPERATURE 0x08
72 #define CHARGER8_M5REG_VCELL 0x09
73 #define CHARGER8_M5REG_CURRENT 0x0A
74 #define CHARGER8_M5REG_AVE_CURRENT 0x0B
75 #define CHARGER8_M5REG_QRESIDUAL 0x0C
76 #define CHARGER8_M5REG_MIX_SOC 0x0D
77 #define CHARGER8_M5REG_AV_SOC 0x0E
78 #define CHARGER8_M5REG_MIX_CAP 0x0F
79 #define CHARGER8_M5REG_FULL_CAP 0x10
80 #define CHARGER8_M5REG_TIME_TO_EMPTY 0x11
81 #define CHARGER8_M5REG_QRTABLE00 0x12
82 #define CHARGER8_M5REG_FULL_SOC_THR 0x13
83 #define CHARGER8_M5REG_RCALL 0x14
84 #define CHARGER8_M5REG_RFAST 0x15
85 #define CHARGER8_M5REG_AVG_TA 0x16
86 #define CHARGER8_M5REG_BATTERY_CYCLES 0x17
87 #define CHARGER8_M5REG_DESIGN_CAP 0x18
88 #define CHARGER8_M5REG_AVG_VCALL 0x19
89 #define CHARGER8_M5REG_MAX_MIN_TEMP 0x1A
90 #define CHARGER8_M5REG_MAX_MIN_VOLT 0x1B
91 #define CHARGER8_M5REG_MAX_MIN_CURRENT 0x1C
92 #define CHARGER8_M5REG_CONFIG 0x1D
93 #define CHARGER8_M5REG_ICHGTERM 0x1E
94 #define CHARGER8_M5REG_AV_CAP 0x1F
95 #define CHARGER8_M5REG_TIME_TO_FULL 0x20
96 #define CHARGER8_M5REG_DEVICE_NAME 0x21
97 #define CHARGER8_M5REG_QRTABLE10 0x22
98 #define CHARGER8_M5REG_FULL_CAP_NOM 0x23
99 #define CHARGER8_M5REG_AIN0 0x27
100 #define CHARGER8_M5REG_LEARN_CFG 0x28
101 #define CHARGER8_M5REG_FILTER_CFG 0x29
102 #define CHARGER8_M5REG_RELAX_CFG 0x2A
103 #define CHARGER8_M5REG_MISC_CFG 0x2B
104 #define CHARGER8_M5REG_T_GAIN 0x2C
105 #define CHARGER8_M5REG_T_OFF 0x2D
106 #define CHARGER8_M5REG_C_GAIN 0x2E
107 #define CHARGER8_M5REG_C_OFF 0x2F
108 #define CHARGER8_M5REG_QRTABLE20 0x32
109 #define CHARGER8_M5REG_FULL_CAP_REP 0x35
110 #define CHARGER8_M5REG_IAVG_EMPTY 0x36
111 #define CHARGER8_M5REG_RCOMP0 0x38
112 #define CHARGER8_M5REG_TEMPCO 0x39
113 #define CHARGER8_M5REG_V_EMPTY 0x3A
114 #define CHARGER8_M5REG_FSTAT 0x3D
115 #define CHARGER8_M5REG_TIMER 0x3E
116 #define CHARGER8_M5REG_SHDN_TIMER 0x3F
117 #define CHARGER8_M5REG_QRTABLE30 0x42
118 #define CHARGER8_M5REG_DQACC 0x45
119 #define CHARGER8_M5REG_DPACC 0x46
120 #define CHARGER8_M5REG_VF_REM_CAP 0x4A
121 #define CHARGER8_M5REG_QH 0x4D
122 #define CHARGER8_M5REG_STATUS_2 0xB0
123 #define CHARGER8_M5REG_IALRTTH 0xB4
124 #define CHARGER8_M5REG_VSHDN_CFG 0xB8
125 #define CHARGER8_M5REG_AGE_FORECAST 0xB9
126 #define CHARGER8_M5REG_HIB_CFG 0xBA
127 #define CHARGER8_M5REG_CONFIG_2 0xBB
128 #define CHARGER8_M5REG_VRIPPLE 0xBC
129 #define CHARGER8_M5REG_PACK_CFG 0xBD
130 #define CHARGER8_M5REG_TIMER_H 0xBE
131 #define CHARGER8_M5REG_AVG_CELL_4 0xD1
132 #define CHARGER8_M5REG_AVG_CELL_3 0xD2
133 #define CHARGER8_M5REG_AVG_CELL_2 0xD3
134 #define CHARGER8_M5REG_AVG_CELL_1 0xD4
135 #define CHARGER8_M5REG_CELL_4 0xD5
136 #define CHARGER8_M5REG_CELL_3 0xD6
137 #define CHARGER8_M5REG_CELL_2 0xD7
138 #define CHARGER8_M5REG_CELL_1 0xD8
139 #define CHARGER8_M5REG_CELL_X 0xD9
140 #define CHARGER8_M5REG_BATTERY_VOLTAGE 0xDA
141 #define CHARGER8_M5REG_ATQ_RESIDUAL 0xDC
142 #define CHARGER8_M5REG_AT_TTE 0xDD
143 #define CHARGER8_M5REG_ATAV_SOC 0xDE
144 #define CHARGER8_M5REG_ATAV_CAP 0xDF
145 
151 #define CHARGER8_NVREG_X_TABLE0 0x80
152 #define CHARGER8_NVREG_X_TABLE1 0x81
153 #define CHARGER8_NVREG_X_TABLE2 0x82
154 #define CHARGER8_NVREG_X_TABLE3 0x83
155 #define CHARGER8_NVREG_X_TABLE4 0x84
156 #define CHARGER8_NVREG_X_TABLE5 0x85
157 #define CHARGER8_NVREG_X_TABLE6 0x86
158 #define CHARGER8_NVREG_X_TABLE7 0x87
159 #define CHARGER8_NVREG_X_TABLE8 0x88
160 #define CHARGER8_NVREG_X_TABLE9 0x89
161 #define CHARGER8_NVREG_X_TABLE10 0x8A
162 #define CHARGER8_NVREG_X_TABLE11 0x8B
163 #define CHARGER8_NVREG_USER_18C 0x8C
164 #define CHARGER8_NVREG_USER_18D 0x8D
165 #define CHARGER8_NVREG_ODSCTH 0x8E
166 #define CHARGER8_NVREG_ODSCCFG 0x8F
167 #define CHARGER8_NVREG_OCV_TABLE0 0x90
168 #define CHARGER8_NVREG_OCV_TABLE1 0x91
169 #define CHARGER8_NVREG_OCV_TABLE2 0x92
170 #define CHARGER8_NVREG_OCV_TABLE3 0x93
171 #define CHARGER8_NVREG_OCV_TABLE4 0x94
172 #define CHARGER8_NVREG_OCV_TABLE5 0x95
173 #define CHARGER8_NVREG_OCV_TABLE6 0x96
174 #define CHARGER8_NVREG_OCV_TABLE7 0x97
175 #define CHARGER8_NVREG_OCV_TABLE8 0x98
176 #define CHARGER8_NVREG_OCV_TABLE9 0x99
177 #define CHARGER8_NVREG_OCV_TABLE10 0x9A
178 #define CHARGER8_NVREG_OCV_TABLE11 0x9B
179 #define CHARGER8_NVREG_ICHG_TERM 0x9C
180 #define CHARGER8_NVREG_FILTER_CFG 0x9D
181 #define CHARGER8_NVREG_V_EMPTY 0x9E
182 #define CHARGER8_NVREG_LEARN_CFG 0x9F
183 #define CHARGER8_NVREG_QR_TABLE00 0xA0
184 #define CHARGER8_NVREG_QR_TABLE10 0xA1
185 #define CHARGER8_NVREG_QR_TABLE20 0xA2
186 #define CHARGER8_NVREG_QR_TABLE30 0xA3
187 #define CHARGER8_NVREG_CYCLES 0xA4
188 #define CHARGER8_NVREG_FULL_CAP_NOM 0xA5
189 #define CHARGER8_NVREG_R_COMP_0 0xA6
190 #define CHARGER8_NVREG_TEMP_CO 0xA7
191 #define CHARGER8_NVREG_IAVG_EMPTY 0xA8
192 #define CHARGER8_NVREG_FULL_CAP_REP 0xA9
193 #define CHARGER8_NVREG_VOLT_TEMP 0xAA
194 #define CHARGER8_NVREG_MIN_MAX_CURRENT 0xAB
195 #define CHARGER8_NVREG_MIN_MAX_VOLT 0xAC
196 #define CHARGER8_NVREG_MIN_MAX_TEMP 0xAD
197 #define CHARGER8_NVREG_SOC 0xAE
198 #define CHARGER8_NVREG_TIMER_H 0xAF
199 #define CHARGER8_NVREG_CONFIG 0xB0
200 #define CHARGER8_NVREG_RIPPLE_CFG 0xB1
201 #define CHARGER8_NVREG_MISC_CFG 0xB2
202 #define CHARGER8_NVREG_DESIGN_CFG 0xB3
203 #define CHARGER8_NVREG_HIB_CFG 0xB4
204 #define CHARGER8_NVREG_PACK_CFG 0xB5
205 #define CHARGER8_NVREG_RELAX_CFG 0xB6
206 #define CHARGER8_NVREG_CONVG_CFG 0xB7
207 #define CHARGER8_NVREG_NV_CONFIG_0 0xB8
208 #define CHARGER8_NVREG_NV_CONFIG_1 0xB9
209 #define CHARGER8_NVREG_NV_CONFIG_2 0xBA
210 #define CHARGER8_NVREG_SBS_CFG 0xBB
211 #define CHARGER8_NVREG_ROM_ID_0 0xBC
212 #define CHARGER8_NVREG_ROM_ID_1 0xBD
213 #define CHARGER8_NVREG_ROM_ID_2 0xBE
214 #define CHARGER8_NVREG_ROM_ID_3 0xBF
215 #define CHARGER8_NVREG_V_ALRT_TH 0xC0
216 #define CHARGER8_NVREG_T_ALRT_TH 0xC1
217 #define CHARGER8_NVREG_S_ALRT_TH 0xC2
218 #define CHARGER8_NVREG_I_ALRT_TH 0xC3
219 #define CHARGER8_NVREG_USER_1C4 0xC4
220 #define CHARGER8_NVREG_USER_1C5 0xC5
221 #define CHARGER8_NVREG_FULL_SOC_THR 0xC6
222 #define CHARGER8_NVREG_TTF_CFG 0xC7
223 #define CHARGER8_NVREG_C_GAIN 0xC8
224 #define CHARGER8_NVREG_T_CURVE 0xC9
225 #define CHARGER8_NVREG_T_GAIN 0xCA
226 #define CHARGER8_NVREG_T_OFF 0xCB
227 #define CHARGER8_NVREG_MANIFCTURE_NAME_0 0xCC
228 #define CHARGER8_NVREG_MANIFCTURE_NAME_1 0xCD
229 #define CHARGER8_NVREG_MANIFCTURE_NAME_2 0xCE
230 #define CHARGER8_NVREG_R_SENSE 0xCF
231 #define CHARGER8_NVREG_USER_1D0 0xD0
232 #define CHARGER8_NVREG_USER_1D1 0xD1
233 #define CHARGER8_NVREG_AGE_FC_CFG 0xD2
234 #define CHARGER8_NVREG_DESIGN_VOLTAGE 0xD3
235 #define CHARGER8_NVREG_USER_1D4 0xD4
236 #define CHARGER8_NVREG_R_FAST_V_SHDN 0xD5
237 #define CHARGER8_NVREG_MANIFACTURE_DATE 0xD6
238 #define CHARGER8_NVREG_FIRST_USED 0xD7
239 #define CHARGER8_NVREG_SERIAL_NUMBER_0 0xD8
240 #define CHARGER8_NVREG_SERIAL_NUMBER_1 0xD9
241 #define CHARGER8_NVREG_SERIAL_NUMBER_2 0xDA
242 #define CHARGER8_NVREG_DEVICE_NUMBER_0 0xDB
243 #define CHARGER8_NVREG_DEVICE_NUMBER_1 0xDC
244 #define CHARGER8_NVREG_DEVICE_NUMBER_2 0xDD
245 #define CHARGER8_NVREG_DEVICE_NUMBER_3 0xDE
246 #define CHARGER8_NVREG_DEVICE_NUMBER_4 0xDF
247 
253 #define CHARGER8_COMMAND 0x60
254 #define CHARGER8_CMD_COPY_NV_BLOCK_MSB 0xE9
255 #define CHARGER8_CMD_NV_RECALL_MSB 0xE0
256 #define CHARGER8_CMD_NV_RECALL_LSB 0x01
257 
263 #define CHARGER8_CHARGER_ENABLE 0x00
264 #define CHARGER8_CHARGER_DISABLE 0x01
265 
271 #define CHARGER8_ALERT_ENABLE 0x01
272 #define CHARGER8_ALERT_DISABLE 0x00
273 
278 #define CHARGER8_USB_SUSPAND_MODE_ENABLE 0x01
279 #define CHARGER8_USB_SUSPAND_MODE_DISABLE 0x00
280 
286 #define CHARGER8_DEVICE_SLAVE_ADDRESS 0x36
287 #define CHARGER8_DEVICE_NV_SLAVE_ADDRESS 0x0B
288 
294 #define CHARGER8_MAP_MIKROBUS( cfg, mikrobus ) \
295  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
296  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
297  cfg.dok = MIKROBUS( mikrobus, MIKROBUS_AN ); \
298  cfg.alt = MIKROBUS( mikrobus, MIKROBUS_RST ); \
299  cfg.us = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
300  cfg.flt = MIKROBUS( mikrobus, MIKROBUS_INT );
301 
307 #define CHARGER8_RETVAL uint8_t
308 
309 #define CHARGER8_OK 0x00
310 #define CHARGER8_INIT_ERROR 0xFF
311  // End group macro
314 // --------------------------------------------------------------- PUBLIC TYPES
323 typedef struct
324 {
325  // Output pins
326 
327  digital_out_t dok;
328  digital_out_t alt;
329  digital_out_t en;
330  digital_out_t us;
331 
332  // Input pins
333 
334  digital_in_t flt;
335 
336  // Modules
337 
338  i2c_master_t i2c;
339 
340  // ctx variable
341 
342  uint8_t slave_address;
345 
346 } charger8_t;
347 
351 typedef struct
352 {
353  // Communication gpio pins
354 
355  pin_name_t scl;
356  pin_name_t sda;
357 
358  // Additional gpio pins
359 
360  pin_name_t dok;
361  pin_name_t alt;
362  pin_name_t en;
363  pin_name_t us;
364  pin_name_t flt;
365 
366  // static variable
367 
368  uint32_t i2c_speed;
369  uint8_t i2c_address;
370  uint8_t i2c_nv_address;
371 
373  // End types group
375 // ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
376 
382 #ifdef __cplusplus
383 extern "C"{
384 #endif
385 
395 
404 
413 
423 void charger8_generic_write ( charger8_t *ctx, uint8_t reg, uint16_t data_wr );
424 
436 uint16_t charger8_generic_read ( charger8_t *ctx, uint8_t reg );
437 
446 void charger8_enable ( charger8_t *ctx, uint8_t enable );
447 
458 
469 
480 
490 uint8_t charger8_get_soc ( charger8_t *ctx );
491 
503 
514 
525 
536 uint16_t charger8_get_status ( charger8_t *ctx );
537 
547 
558 
569 void charger8_set_usb_suspend ( charger8_t *ctx, uint8_t mode );
570 
580 void charger8_set_alert ( charger8_t *ctx, uint8_t state );
581 
592 
601 void charger8_set_max_battery_capacity ( charger8_t *ctx, uint16_t capacity );
602 
604 #ifdef __cplusplus
605 }
606 #endif
607 #endif // _CHARGER8_H_
608  // End public_function group
611 
612 // ------------------------------------------------------------------------- END
charger8_set_alert
void charger8_set_alert(charger8_t *ctx, uint8_t state)
Function for set Alert pin state.
charger8_cfg_setup
void charger8_cfg_setup(charger8_cfg_t *cfg)
Config Object Initialization function.
charger8_set_max_battery_capacity
void charger8_set_max_battery_capacity(charger8_t *ctx, uint16_t capacity)
Function for set Max battery capacity in [mAh].
charger8_get_time_to_full
float charger8_get_time_to_full(charger8_t *ctx)
Function for reads the Time to Full data.
charger8_default_cfg
void charger8_default_cfg(charger8_t *ctx)
Click Default Configuration function.
charger8_t::slave_address
uint8_t slave_address
Definition: charger8.h:342
charger8_cfg_t
Click configuration structure definition.
Definition: charger8.h:352
charger8_t::dok
digital_out_t dok
Definition: charger8.h:327
charger8_t::nv_slave_address
uint8_t nv_slave_address
Definition: charger8.h:343
CHARGER8_RETVAL
#define CHARGER8_RETVAL
Definition: charger8.h:307
charger8_get_temperature
float charger8_get_temperature(charger8_t *ctx)
Functions for read Temperature of the chip.
charger8_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: charger8.h:368
charger8_cfg_t::sda
pin_name_t sda
Definition: charger8.h:356
charger8_enable
void charger8_enable(charger8_t *ctx, uint8_t enable)
Functions for enable or disable device.
charger8_get_time_to_empty
float charger8_get_time_to_empty(charger8_t *ctx)
Function for reads the Time to Empty data.
charger8_t::i2c
i2c_master_t i2c
Definition: charger8.h:338
charger8_get_capacity
uint16_t charger8_get_capacity(charger8_t *ctx)
Function for reads the current capacity of the battery.
charger8_generic_write
void charger8_generic_write(charger8_t *ctx, uint8_t reg, uint16_t data_wr)
Generic write function.
charger8_cfg_t::flt
pin_name_t flt
Definition: charger8.h:364
charger8_init
CHARGER8_RETVAL charger8_init(charger8_t *ctx, charger8_cfg_t *cfg)
Initialization function.
charger8_t::us
digital_out_t us
Definition: charger8.h:330
charger8_get_status
uint16_t charger8_get_status(charger8_t *ctx)
Function for reads the Status register.
charger8_cfg_t::dok
pin_name_t dok
Definition: charger8.h:360
charger8_cfg_t::i2c_address
uint8_t i2c_address
Definition: charger8.h:369
charger8_cfg_t::en
pin_name_t en
Definition: charger8.h:362
charger8_cfg_t::i2c_nv_address
uint8_t i2c_nv_address
Definition: charger8.h:370
charger8_t
Click ctx object definition.
Definition: charger8.h:324
charger8_reset
void charger8_reset(charger8_t *ctx)
General reset procedure.
charger8_t::max_bat_capacity
uint16_t max_bat_capacity
Definition: charger8.h:344
charger8_cfg_t::alt
pin_name_t alt
Definition: charger8.h:361
charger8_cfg_t::scl
pin_name_t scl
Definition: charger8.h:355
charger8_t::alt
digital_out_t alt
Definition: charger8.h:328
charger8_get_soc
uint8_t charger8_get_soc(charger8_t *ctx)
Function for reads the percentage of the battery charge.
charger8_get_fault_output
uint8_t charger8_get_fault_output(charger8_t *ctx)
Function for reads FAULT pin state.
charger8_t::flt
digital_in_t flt
Definition: charger8.h:334
charger8_t::en
digital_out_t en
Definition: charger8.h:329
charger8_get_dc_power_ok
uint8_t charger8_get_dc_power_ok(charger8_t *ctx)
Function for reads DC power pin state.
charger8_cfg_t::us
pin_name_t us
Definition: charger8.h:363
charger8_set_usb_suspend
void charger8_set_usb_suspend(charger8_t *ctx, uint8_t mode)
Function for set USB Suspand pin.
charger8_get_current
float charger8_get_current(charger8_t *ctx)
Functions for reading the current charging battery.
charger8_generic_read
uint16_t charger8_generic_read(charger8_t *ctx, uint8_t reg)
Generic read function.
charger8_get_voltage
float charger8_get_voltage(charger8_t *ctx)
Functions for reading the voltage of the battery.