Имитация аккумулятора ноутбука на Arduino UNO

By Mechel

Имитация аккумулятора ноутбука SMBus на Arduino

Скетч создан на основе https://github.com/mciantyre/mock-smbus-arduino

На вход A0 подключается (через делитель) общее напряжение аккумуляторной сборки для его измерения.
На вывод D2 подключен SDA для обнаружения когда выключать режим сна.

Чтобы ноутбук признал аккумулятор как свой, на запрос «0x21» (DEVICE_NAME), акк. должен отвечать правильное название своей модели.

Контроль четности, который требует последняя версия протокола, в данном скетче не используется.

Скачать скетч для Arduino UNO AL12B72_for_UNO
Скачать скетч для Arduino LGT8f328p AL12B72_for_LGT
Скачать документация Smart Battery Smart Battery Data Specification

Пример, как происходят запрос-ответ. Лог снятый логическим анализатором на шине I2C выглядит так-

запрос:
I2C,Setup Write to [0x16] + ACK
I2C,0x09 + ACK

ответ:
I2C,Setup Read to [0x17] + ACK
I2C,0xC7 + ACK
I2C,0x2C + NAK
——
Где 0x09 = (число в шестнадцатиричном виде) это ноутбук запрашивает вольтаж

ответ:
0xC7 = [байт 0] = C7 это десятичные 124
0x2C = [байт 1] = 2C это десятичные 44

Для получения числа напряжения в привычном виде надо байт 1 умножить на 256 и добавить байт 0.
44*256=11264 +124= 11388 миливольт