M5 POWER BANK with IP5108
- 
					
					
					
					
 Under this link IP3506 AUTOMATIC STANDBY was discussed the M5 Power Bank module. 
 Here is the inspiration from the realization of this module:- 
Schema 
  
- 
BOM 
  
- 
PCB for hand soldering 
  
- 
Case - 3D printed 
  
- 
Final functional module 
  
 M5 Power Bank with IP5108 fully replaces M5 BOTTOM: - The module also contains a magnet (big one)
- External M-bus (fully) is on the right side (female 2x15)
- LED indicator and On/Off button is on the left side
- LED functionality can be selected (5V, On/Off=IRQ, GPIO00 or GPIO01 software control)
- On/Off button functionality can also be programmed thru IP5108 registers
 WARNING: 
 The module is designed to be connected directly to the M5 CORE because the components enter the space of M5 CORE!
- 
- 
					
					
					
					
 Nice desing jikuch.... I am trying to adapt it for a solar powered system, but am unable to find information in english about the ip5108 i2c register. 
 Could you help me?
 Thanks
- 
					
					
					
					
 IP5108 I2C description: 7-bit slave address IP5108 is 0x75 (byte with write bit = 0xEA; byte with read bit = 0xEB) 
 400 Kbps speed of I2C supported
 1 byte data = 8-bit data (bits from 7 to 0)WRITE Arduino example: 
 Wire.beginTransmission(0x75);
 Wire.write(register_address_byte);
 Wire.write(data_byte);
 Wire.endTransmission();READ Arduino example: 
 Wire.beginTransmission(0x75);
 Wire.write(register_address_byte);
 Wire.endTransmission();
 Wire.requestFrom(0x75,1);
 data_byte = Wire.read();REGISTERS: 1. Enable / disable functions: 
 SYS_CTL0 = 0x01:- bit 4 (read/write): 0 = disbale / 1 = enable (1 = after reset) detection ??? (I do not understand.)
- bit 3 (read/write): 0 = disbale / 1 = enable (1 = after reset) light
- bit 2 (read/write): 0 = disbale / 1 = enable (1 = after reset) booster
- bit 1 (read/write): 0 = disable / 1 = enable (1 = after reset) charger
 SYS_CTL1 = 0x02: - bit 1 (read/write): 0 = disable / 1 = enable (1 = after reset) auto-standby
- bit 0 (read/write): 0 = disable / 1 = enable (1 = after reset) auto ??? (I do not understand.)
 SYS_CTL3 = 0x03: - bit 5 (read/write): 0 = disable / 1 = enable (1 = after reset) off by button
 2. General setup features: 
 SYS_CTL2 = 0x0C:- bits 7-3 (read/write): (01010 = after reset) auto-standby current limit as multiple 12 mA
 SYS_CTL4 = 0x04: - bits 7-6 (read/write): (10 = after reset) time for auto-standby: 00=8s, 01=16s, 10=32s, 11=64s
 SYS_CTL3 = 0x03: - bits 7-6 (read/write): (01 = after reset) time for recognition button press: 00=1s, 01=2s, 10=3s, 11=4s
 SYS_CTL5 = 0x07: - bit 1 (read/write): (0 = after reset) control of light by button: 0=press, 1=double click
- bit 0 (read/write): (0 = after reset) off by button: 0=double click, 1=press
 3. Charging setup features: 
 CHARGER_CTL1 = 0x22:- bits 3-2 (read/write): (01 = after reset) VOUT undervoltage limit during chargig: 00=4.53V, 01=4.63V, 10=4.73V, 11=4.83V
 CHARGER_CTL2 = 0x24: - bits 6-5 (read/write): (00 = after reset) battery type = charging voltage: 00=4.2V, 01=4.3V, 10=4.35V
- bits 2-1 (read/write): (10 = after reset) overcharging of charging: 00=0mV, 01=14mV, 10=28mV, 11=42mV
 CHG_DIG_CTL4 = 0x25: - bits 4-0 (read/write): (10110 = after reset) charging current setting [A]:
 b0 x 0.1 + b1 x 0.2 + b2 x 0.4 + b3 x 0.6 + b4 x 1.4
 4. Charging information: 
 Reg_READ0a = 0x70:- bit 3 (read only): charging status: 0 = not charging, 1 = charging
 Ref_READ0b = 0x71: - bits 7-5 (read only): detailed charging status:
 000 = inactivity
 001 = charging
 010 = constant current charging
 011 = charging with constant voltage
 100 = ??? (missing description in original document)
 101 = end of charging (maintenance current)
- bit 3 (read only): signal of end of charging (=1)
 5. PIN assignment & control: 
 MFP_CTL0 = 0x51:- bits 5-4 (read/write): (00 = after reset) pin LIGHT assignement: 00=WLED, 01=GPIO2, 10=VREF
- bits 3-2 (read/write): (00 = after reset) pin L4 assignement: 00=L4, 01=GPIO1
- bits 1-0 (read/write): (00 = after reset) pin L3 assignement: 00=L3, 01=GPIO0
 GPIO_CTL2a = 0x53: - bits 2-0 (read/write): (000 = after reset) GPIO[2:0] input enable
 GPIO_CTL2b = 0x54: - bits 2-0 (read/write): (000 = after reset) GPIO[2:0] output enable
 GPIO_CTL3 = 0x55: - bits 2-0 (read/write): (000 = after reset) GPIO[2:0] data
 6. Measurement: 
 BATVADC_DAT0 = 0xA2:- pins 7-0 (read only): LOW 8 bits (byte) of BATVADC
 BATVADC_DAT1 = 0xA3: - pins 5-0 (read only): HIGH 6 bits of BATVADC
 Calculation according to the original document: 
  BATIADC_DAT0 = 0xA4: - pins 7-0 (read only): LOW 8 bits (byte) of BATIADC
 BATIADC_DAT1 = 0xA5: - pins 5-0 (read only): HIGH 6 bits of BATIADC
 Calculation according to the original document: 
  BATOCV_DAT0 = 0xA8: - pins 7-0 (read only): LOW 8 bits (byte) of BATOCV
 BATOCV_DAT1 = 0xA9: - pins 5-0 (read only): HIGH 6 bits of BATOCV
 Calculation according to the original document: 
  This is true: BATOCV = BATVACD + BATIADC * battery_internal_resistnace 7. WLED status: 
 Reg_READ1 = 0x72:- bit 7 (read only): 0 = WLED is off, 1 = WLED is on
 8. Light / heavy load: 
 Reg_READ1 = 0x72:- bit 6 (read only): 0 = heavy load over 75 mA, 1 = light load less 75 mA
 9. Button control: 
 Reg_READ2 = 0x77:- bit 3 (read; write 1 = reset) flag button double clicked (=1)
- bit 1 (read; write 1 = reset) flag button pressed (=1)
- bit 0 (read; write 1 = reset) flag button clicked (=1)
 That is all. 
- 
					
					
					
					
 @jikuch Nice design. 
 Do you have the I2C register document of IP5108? Could you share it? Thanks!
- 
					
					
					
					
 Hi, can somebody tell me: if I change something in ip5108 through i2c, will it be saved, or i must make this changes each time when i start device? 
- 
					
					
					
					
 Hi, can you tell me: if I change something in ip5108 through i2c (for example disable auto-standby), will this changers be saved, or i must make this changes (with software) each time when i start device?