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