Имитация аккумулятора ноутбука 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 миливольт