Подключение батареи ноутбука к arduino по i2c
В этой статье мы рассмотрим, что такое интерфейс I2C (ай-ту-си, и-два-цэ), в чём его особенности и как с ним работать.
6 Дополнительно о шине I2C
Доступно и интересно рассказывает о шине I2C Джереми Блюм в своём видео:
1 Описание интерфейса I2C
Последовательный протокол обмена данными IIC (также называемый I2C – Inter-Integrated Circuits, межмикросхемное соединение) использует для передачи данных две двунаправленные линии связи, которые называются шина последовательных данных SDA (Serial Data) и шина тактирования SCL (Serial Clock). Также имеются две линии для питания. Шины SDA и SCL подтягиваются к шине питания через резисторы.
В сети есть хотя бы одно ведущее устройство (Master), которое инициализирует передачу данных и генерирует сигналы синхронизации. В сети также есть ведомые устройства (Slave), которые передают данные по запросу ведущего. У каждого ведомого устройства есть уникальный адрес, по которому ведущий и обращается к нему. Адрес устройства указывается в паспорте (datasheet). К одной шине I2C может быть подключено до 127 устройств, в том числе несколько ведущих. К шине можно подключать устройства в процессе работы, т.е. она поддерживает «горячее подключение».
Описание интерфейса I2C
Давайте рассмотрим временную диаграмму обмена по протоколу I2C. Есть несколько различающихся вариантов, рассмотрим один из распространённых. Воспользуемся логическим анализатором, подключённым к шинам SCL и SDA.
Мастер инициирует обмен. Для этого он начинает генерировать тактовые импульсы и посылает их по линии SCL пачкой из 9-ти штук. Одновременно на линии данных SDA он выставляет адрес устройства, с которым необходимо установить связь, которые тактируются первыми 7-ми тактовыми импульсами (отсюда ограничение на диапазон адресов: 2 7 = 128 минус нулевой адрес). Следующий бит посылки – это код операции (чтение или запись) и ещё один бит – бит подтверждения (ACK), что ведомое устройство приняло запрос. Если бит подтверждения не пришёл, на этом обмен заканчивается. Или мастер продолжает посылать повторные запросы.
Это проиллюстрировано на рисунке ниже. Задача такая: подключиться к ведомому устройству с адресом 0x27 и передать ему строку "SOLTAU.RU". В первом случае, для примера, отключим ведомое устройство от шины. Видно, что мастер пытается установить связь с устройством с адресом 0x27, но не получает подтверждения (NAK). Обмен заканчивается.
Попытка мастера установить соединение с ведомым по I2C
Теперь подключим к шине I2C ведомое устройство и повторим операцию. Ситуация изменилась. На первый пакет с адресом пришло подтверждение (ACK) от ведомого. Обмен продолжился. Информация передаётся также 9-битовыми посылками, но теперь 8 битов занимают данные и 1 бит – бит подтверждения получения ведомым каждого байта данных. Если в какой-то момент связь оборвётся и бит подтверждения не придёт, мастер прекратит передачу.
Временная диаграмма обмена по протоколу I2C
4 Подключение I2C устройствак Arduino
Давайте посмотрим, как работать с шиной I2C с помощью Arduino.
Сначала соберём схему, как на рисунке. Будем управлять яркостью светодиода, используя цифровой 64-позиционный потенциометр AD5171 (см. техническое описание), который подключается к шине I2C. Адрес, по которому мы будем обращаться к потенциометру – 0x2c (44 в десятичной системе).
Подключение цифрового потенциометра к Arduino по шине I2C
Нам понадобится:
-
или другая совместимая; или другой с управлением по шине IIC;
- светодиод любой (к примеру, вот из такого набора);
- резистор на 220 Ом (рекомендую набор резисторов с номиналами от 10 Ом до 1 МОм);
- 2 резистора по 4,7 кОм (из того же набора); ;
- соединительные провода (например, вот хороший набор);
- компьютер с Arduino IDE.
1 Описание интерфейса I2C
Последовательный протокол обмена данными IIC (также называемый I2C – Inter-Integrated Circuits, межмикросхемное соединение) использует для передачи данных две двунаправленные линии связи, которые называются шина последовательных данных SDA (Serial Data) и шина тактирования SCL (Serial Clock). Также имеются две линии для питания. Шины SDA и SCL подтягиваются к шине питания через резисторы.
В сети есть хотя бы одно ведущее устройство (Master), которое инициализирует передачу данных и генерирует сигналы синхронизации. В сети также есть ведомые устройства (Slave), которые передают данные по запросу ведущего. У каждого ведомого устройства есть уникальный адрес, по которому ведущий и обращается к нему. Адрес устройства указывается в паспорте (datasheet). К одной шине I2C может быть подключено до 127 устройств, в том числе несколько ведущих. К шине можно подключать устройства в процессе работы, т.е. она поддерживает «горячее подключение».
Описание интерфейса I2C
Давайте рассмотрим временную диаграмму обмена по протоколу I2C. Есть несколько различающихся вариантов, рассмотрим один из распространённых. Воспользуемся логическим анализатором, подключённым к шинам SCL и SDA.
Мастер инициирует обмен. Для этого он начинает генерировать тактовые импульсы и посылает их по линии SCL пачкой из 9-ти штук. Одновременно на линии данных SDA он выставляет адрес устройства, с которым необходимо установить связь, которые тактируются первыми 7-ми тактовыми импульсами (отсюда ограничение на диапазон адресов: 2 7 = 128 минус нулевой адрес). Следующий бит посылки – это код операции (чтение или запись) и ещё один бит – бит подтверждения (ACK), что ведомое устройство приняло запрос. Если бит подтверждения не пришёл, на этом обмен заканчивается. Или мастер продолжает посылать повторные запросы.
Это проиллюстрировано на рисунке ниже. Задача такая: подключиться к ведомому устройству с адресом 0x27 и передать ему строку "SOLTAU.RU". В первом случае, для примера, отключим ведомое устройство от шины. Видно, что мастер пытается установить связь с устройством с адресом 0x27, но не получает подтверждения (NAK). Обмен заканчивается.
Попытка мастера установить соединение с ведомым по I2C
Теперь подключим к шине I2C ведомое устройство и повторим операцию. Ситуация изменилась. На первый пакет с адресом пришло подтверждение (ACK) от ведомого. Обмен продолжился. Информация передаётся также 9-битовыми посылками, но теперь 8 битов занимают данные и 1 бит – бит подтверждения получения ведомым каждого байта данных. Если в какой-то момент связь оборвётся и бит подтверждения не придёт, мастер прекратит передачу.
Временная диаграмма обмена по протоколу I2C
4 Подключение I2C устройствак Arduino
Давайте посмотрим, как работать с шиной I2C с помощью Arduino.
Сначала соберём схему, как на рисунке. Будем управлять яркостью светодиода, используя цифровой 64-позиционный потенциометр AD5171 (см. техническое описание), который подключается к шине I2C. Адрес, по которому мы будем обращаться к потенциометру – 0x2c (44 в десятичной системе).
Подключение цифрового потенциометра к Arduino по шине I2C
5 Управление устройством по шине IIC
Рассмотрим диаграммы информационного обмена с цифровым потенциометром AD5171, представленные в техническом описании:
Рассмотрим диаграммы чтения и записи цифрового потенциометра AD5171
Нас тут интересует диаграмма записи данных в регистр RDAC. Этот регистр используется для управления сопротивлением потенциометра.
Откроем из примеров библиотеки "Wire" скетч: Файл Образцы Wire digital_potentiometer. Загрузим его в память Arduino.
После включения вы видите, как яркость светодиода циклически нарастает, а потом гаснет. При этом мы управляем потенциометром с помощью Arduino по шине I2C.
По ссылкам внизу статьи, в разделе похожих материалов (по тегу), можно найти дополнительные примеры взаимодействия с различными устройствами по интерфейсу IIC, в том числе примеры чтения и записи.
Нам понадобится:
-
или другая совместимая; или другой с управлением по шине IIC;
- светодиод любой (к примеру, вот из такого набора);
- резистор на 220 Ом (рекомендую набор резисторов с номиналами от 10 Ом до 1 МОм);
- 2 резистора по 4,7 кОм (из того же набора); ;
- соединительные провода (например, вот хороший набор);
- компьютер с Arduino IDE.
Нам понадобится:
-
или другая совместимая; или другой с управлением по шине IIC;
- светодиод любой (к примеру, вот из такого набора);
- резистор на 220 Ом (рекомендую набор резисторов с номиналами от 10 Ом до 1 МОм);
- 2 резистора по 4,7 кОм (из того же набора); ;
- соединительные провода (например, вот хороший набор);
- компьютер с Arduino IDE.
2 Реализация I2Cв Arduino
Arduino использует для работы по интерфейсу I2C два порта. Например, в Arduino UNO и Arduino Nano аналоговый порт A4 соответствует SDA, аналоговый порт A5 соответствует SCL.
Реализация I2C в Arduino UNO и Nano
Для других моделей плат соответствие выводов такое:
Плата | Пин SDA | Пин SCL |
---|---|---|
Arduino Uno, Nano, Pro и Pro Mini | A4 | A5 |
Arduino Mega | 20 | 21 |
Arduino Leonardo | 2 | 3 |
Arduino Due | 20, SDA1 | 21, SCL1 |
3 Библиотека "Wire" для работы с IIC
Для облегчения обмена данными с устройствами по шине I2C для Arduino написана стандартная библиотека Wire. Она имеет следующие функции:
Функция | Назначение |
---|---|
begin(address) | инициализация библиотеки и подключение к шине I2C; если не указан адрес, то присоединённое устройство считается ведущим; используется 7-битная адресация; |
requestFrom() | используется ведущим устройством для запроса определённого количества байтов от ведомого; |
beginTransmission(address) | начало передачи данных к ведомому устройству по определённому адресу; |
endTransmission() | прекращение передачи данных ведомому; |
write() | запись данных от ведомого в ответ на запрос; |
available() | возвращает количество байт информации, доступных для приёма от ведомого; |
read() | чтение байта, переданного от ведомого ведущему или от ведущего ведомому; |
onReceive() | указывает на функцию, которая должна быть вызвана, когда ведомое устройство получит передачу от ведущего; |
onRequest() | указывает на функцию, которая должна быть вызвана, когда ведущее устройство получит передачу от ведомого. |
6 Дополнительно о шине I2C
Доступно и интересно рассказывает о шине I2C Джереми Блюм в своём видео:
Вот я тоже так и предполагал, но теплилась надежда, что есть какие-то нюансы с кодом. Жаль, значит контроллер в мусор, банки - на повербанк.
Спасибо за помощь и потраченное время!
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
у меня маркировка на разъёме батареи - p- p- ALERT SYS BATT DAT CLK p+ p+
к каким выводам подключать? контроллер bq20857DBT
батарея от DELL
PS а что там за термодатчик
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
имхо - кроме основной информации ничего не прочитается.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Стандартные пароли у вас:
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Через скетч не запускается .
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
там указан порядок выполнения операций
после этого батарей должна начать работать, если физически исправна !
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Не получается как-то не так работает. Ардуино часто затирает модель и номер. Из за этого приходится перезаливать eeprom, но уже переподключая на be2. Вы когда разбирались с этим чипом не помните по какому адресу находятся локи TDA TCA RCA? Может вручную обнулить их? только вот знать бы где. Кстати ардуино при чтении выдает PEC Error . и 46!=0D Может так что у Вас другая варь, у меня пишет что 2,03 версия. И из за этого не корректно работает, или этот ардуино не подходит. Хотя врядле так бы поидее ничего не делал бы.
Нашел UNO попробовал тоже самое, встает на 8 пункте. Считать программу и епром не получается при помощи ардуино. В чем может быть вопрос? У Вас нет случайно прошивок от данной батареи правленой и битой для сравнения?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Чипы с трехзначным номером типа 955 - это то что произведено для вендоров. Сами вендоры могут прошить их чем угодно.
У меня на руках только с прошивкой 0302
P.S. Подозреваю что ошибки из-за переполнения буфера библиотеки Wire . Вы сделали то, что написано сделать в 19 строке .
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Не подскажите, делаю пункт 1 сразу ошибка Wire error - 2
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Если сделать пункт1 после пункта 2, то вроде проходит. В дальнейшем пункты 2,3,4,5,6,7 норм проходят, но на пункте 8 снова ошибка Wire error - 3. Что не так?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Здравствуйте, люди добрые!
Есть здесь кто-то, кто может помочь разобраться с разблокировкой bq20z9x контроллера. У меня таких два: один bq20z90, а второй bq20z95. Пользовался be2work и пользовался кодом из этой темы. Мне кажется, что самая большая моя проблема - не могу никак сбросить Battery Status на нормальное состояние. Сейчас он у меня выглядит вот так:
Наверное, напаролся на все ошибки/проблемы из этой темы, потому как читал с конца, а местами надо было читать с начала)
На сколько я понимаю, контроллеры рабочие, предохранители целые, видимо я что-то делаю не так. Может кто-то сможет помочь. Все расскажу, все покажу.
Первое, что хотелось бы спросить: код из этой ветки залил в arduino uno, подключился по i2c, после be2work контроллер в состоянии Unsealed, прохожусь по шагам 1,2,3,4,5,6,7,8 и 1, если все проходит нормально, то контроллер становится в состояние Sealed, но ничего не менятется, Battery Status остается прежним. Как это побороть?
И еще момент, если меняю размер буфера в библиотеке Wire.h на 34, как написано в описании, то не могу пройти даже шаг 1, вылазит Wire error - 2 .
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Не подскажите, делаю пункт 1 сразу ошибка Wire error - 2
Полагаю, у вас таже проблема, что и у меня, потому как у меня та же песня. И как я уже написал выше, такое происходит, если менять размер буфера в библиотеке Wire.h, если этого не делать, пункты проходят нормально, но ничего не меняется в контроллере, статусы остаются прежними.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Вы когда разбирались с этим чипом не помните по какому адресу находятся локи TDA TCA RCA? Может вручную обнулить их? только вот знать бы где.
Присоединяюсь к вопросу! может кто-то знает, как поменять их руками, например, из под Be2 ?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Делайте пункт1 после пункта 2, должно получится. Меня больше волнует что пункт 8 не получается
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
да, спасибо за ссылку на даташит. Читал его, там есть табличка, где имеются общие сведения по вопросу. Я даже нашел расширенную версию документации, но непрофессионалу там очень сложно разобраться. Может кто-то уже знает точно, что нужно делать) Было бы очень здорово)
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Делайте пункт1 после пункта 2, должно получится. Меня больше волнует что пункт 8 не получается
Ха, действительно! делаешь п.2, потом п.1, и так можно дойти до п.8, но да, потому выпадает в Wire error - 3 .
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
да, спасибо за ссылку на даташит. Читал его, там есть табличка, где имеются общие сведения по вопросу. Я даже нашел расширенную версию документации, но непрофессионалу там очень сложно разобраться. Может кто-то уже знает точно, что нужно делать) Было бы очень здорово)
Я сам такой же) тут без Komandir не разобраться. Думаю со статусами TCA Terminate-charge alarm и TDA Terminate Discharge Alarm морочится не стоит, они вроде у всех.
Кстати пункт8 возможно их обновляет, но у меня он завершается ошибкой.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Да, будем надеяться, что Komandir заглянет сюда, поотвечать на наши вопросы)
А вот про статусы TCA и TDA я не уверен, собственно п.5 (5. Clearing a Permanent Failure) и должен приводить Battary Status в рабочее состояние. И на сколько я понял, в рабочем состоянии TCA и TDA отсутствуют, так как они запрещают зарядку и разрядку батареи, и их нужно снимать в первую очередь.
Если интересно, посмотрите это видео, там автор говорит как раз про эти флаги:
А вот пункт 8, как раз, записывает в контроллер все подготовленные в предыдущих шагах данные, включая Update status.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
После сброса первый пункт срабатывает без ошибки, потому что на залоченной батарее не производится чтение расширенной информации .
ИМХО всё дело в том что какой-то редиска-нехороший человек в родной библиотеке Wire размер буфера задал в ДВУХ местах .
Я пользуюсь пакетом MiniCore и там размер буфера задается в одном месте .
Пробуем - отписываемся - я рядом .
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
а вот на esp8266 буфер достаточный, да и напрямую можно по идее подключить, все скетчи компилируются!
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Ха, действительно! делаешь п.2, потом п.1, и так можно дойти до п.8, но да, потому выпадает в Wire error - 3 .
Так делать не совсем верно, Пункт2 делает Ресет контролера, т.е. перезагрузку, соответственно сбрасывает все сделанные ранее настройки. Посмотреть Инфу после ресета это нормально, но после каждого пункта делать ресет думаю не правильно.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Последовательность операций 1,2,3,4,5,6,7,8 1,2,3,4,9 должна запускать батарею, если она физически исправна(сами банки и ключи заряда/разряда). Wire Error быть не должно .
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Пробуем - отписываемся - я рядом .
Komandir, ну точно! Поправил еще и в utility/twi.h буфер и всё завелось, как бензопила на заготовке дров)) В общем, работает) Все пункты проходятся без ошибок, надо только делать маленькие паузы между пунктами (один раз слетело в ошибку, видимо слишком быстро выполнял)
Короче, подключился через резисторы вместо банок, подал с БП напряжение, прошелся вашим кодом, запаял аккумы на место. В итоге, благодаря вам и вашему коду, еще один пациент уже трудится на благо Родины) Ну и мне на радость) Спасибо, Komandir!
PS, еще один такой же пациент ожидает восстановления! Посмотрим, как на нем пройдет операция)
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
а вот на esp8266 буфер достаточный
Вот же точно! Надо мне было сразу брать из закромов esp8266 и не столкнулся бы с проблемами буфера! Запомним)
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Последовательность операций 1,2,3,4,5,6,7,8 1,2,3,4,9 должна запускать батарею, если она физически исправна(сами банки и ключи заряда/разряда). Wire Error быть не должно .
Да, вот хотел спросить: после прохождения всех пунктов ключи в Battery Status вот такие:
Battery Status: 4AD0 Hex
Так и задумано? Натыкался на информацию, что TCA, TDA одновременно стоять не должны, и что это ошибка. Что скажете по этому поводу. (немного выше есть ссылка на видео, где мужик это говорит, там таймкод прямо на это место)
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
На память уже не помню, но вроде TCA TDA всегда есть, когда нет нагрузки. Надо попробовать нагрузить батарею на 12 вольтовую лампу от автомобиля и SYSPRESS притянуть к GND. Лампочка должна загореться. И вот в таком состоянии общаться с батареей.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Komandir, валяется контроллер от ноутаовской батареи, самих элементов уже нет, использованы в разные поделки :) Хотел поиграться с твоим кодом - код должен работать с "пустым" контроллером без батарей?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Да, надо такое попробовать! Если у вас руки доберутся раньше моего, напишите, пожалуйста, что там происходит!
И вот еще, вновь ожившая батарея не заряжается( Какое-то время держит ноут в рабочем состоянии, потом отрубается. Включаешь на зарядку, винда показывается, что зарядка идет, а емкость в AIDA не увеличивается. Вот такая история
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Komandir, валяется контроллер от ноутаовской батареи, самих элементов уже нет, использованы в разные поделки :) Хотел поиграться с твоим кодом - код должен работать с "пустым" контроллером без батарей?
Работает этот код с "пустым" контроллером. Я вот писал чуть выше, как это делается, заменяешь банки резисторами и в путь:
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
b707 нужны резисторы вместо банок и источник напряжения вольт на 9-10.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
А есть у кого скетчи на другие контролеры?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
На память уже не помню, но вроде TCA TDA всегда есть, когда нет нагрузки. Надо попробовать нагрузить батарею на 12 вольтовую лампу от автомобиля и SYSPRESS притянуть к GND.
В общем, попробовал. Когда тянешь SYSPRESS на землю, на выходе появляется напруга, а TCA TDA пропадают из вывода
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Мне было лень менять банки на резисторы - и меня не доставали TCA TDA.
Резисторы нужны что бы RemainCapacity был 0 и можно было делать сброс пароля обходным путем.
Но если батарея ещё дышит - RemainCapacity=0 можно получить нагрузив батарею лампой или мощными резисторами.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Подскажите как можно откалибровать батарею после перепрошивки? Ноут вырубается на 50%.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Полный заряд - релаксация - полный заряд - релаксация
И так несколько раз
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Тогда в начале скетча указываем нужную длину буфера:
Наконец дошли руки и у меня посмотреть батарею, плата NODE MCU LOLIN ESP8266
Подключение прямое -
// Версия для ESP8266 ядро 3.0.2
// распиновка
// GND - p-
// SDA - CLK (D1)
// SCL - DAT (D2)
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
ua6em какой чип на плате ? Странно что он не отдаёт часть стандартных данных !
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
BQ20857DST дальше замазано
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Попробуйте понизить скорость i2c до 50 кГц
По даташиту все стандартно:
Table 3. bq2085 Register Functions (Continued) FUNCTION COMMAND CODE ACCESS UNITS RelativeStateOfCharge 0x0d read percent AbsoluteStateOfCharge 0x0e read percent RemainingCapacity 0x0f read mAh, 10 mWh FullChargeCapacity 0x10 read mAh, 10 mWh RunTimeToEmpty 0x11 read minutes AverageTimeToEmpty 0x12 read minutes AverageTimeToFull 0x13 read minutes ChargingCurrent 0x14 read mA ChargingVoltage 0x15 read mV Battery Status 0x16 read NA CycleCount 0x17 read cycles DesignCapacity 0x18 read mAh, 10 mWh DesignVoltage 0x19 read mV SpecificationInfo 0x1a read NA ManufactureDate 0x1b read NA SerialNumber 0x1c read integer Reserved 0x1d-0x1f 0 0 ManufacturerName 0x20 read string DeviceName 0x21 read string DeviceChemistry 0x22 read string ManufacturerData 0x23 read string Pack status 0x2f (LSB) read NA Pack configuration 0x2f (MSB) read NA VCELL4 0x3c read mV VCELL3 0x3d read mV VCELL2 0x3e read mV VCELL1 0x3f read mV
Наваял на досуге несколько скетчей для общения с батареей ноутбука. Подключать как I2C устройство - SDA SCL GND. Проверял на bq20z955 с дефолтными паролями. Если у Вас другой контроллер - сверяйтесь с данными из даташита.
. ВНИМАНИЕ. Всё что Вы делаете - Вы делаете на свой страх и риск . Операции 6, 7 и 8 пишут данные в батарею и могут окирпичить её !
Один из скетчей:
Другие скетчи смотрите на github .
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
а описание или хотя бы ссылки привести, почитать.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
ua6em Что конкретно описать ? На гребенке АКБ обычно выведены + GND SDA SCL. Распиновка разная - надо изучать схему.
Стандартные данные Smart Battery стандартизированы и с вероятностью 95% будут считаны.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
АКБ имеют свойство терять ёмкость. Замена банок часто не спасает - контроллер блокируется. Этим скетчем можно разблокировать контроллер, стереть ошибки и прописать емкость нового пакета банок и вернуть АКБ к жизни. Это как черновик, ибо контроллеров много и паролей к ним еще больше .
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Для самсунговских батарей падёт?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
DetSimen Главное понять какой там контроллер. Обычно без разборки это не известно . Стандартную информацию должен по любому отдать, ноутбук же именно её считывает.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Тоись, если батарея неразборная, то тока ломать и плющить.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Для начала нужно узнать распиновку, подключиться и прочитать информацию.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Тоись, если батарея неразборная, то тока ломать и плющить.
Если банки менять то всё равно ломать прийдётся.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
у меня коллега тут хвастался, ковырял батарею, несколько банок 18650 были 0В. Дак он выяснил, что внутри аккумулятора создалось давление, а там механизм при давлении газа размыкающий цепь. Потом типа воткнул иглу, сделал пшик и аккумулятор ожил. Сомнительный "ремонт", конечно, но как супер временное решение пойдет. главное не взарваца
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Так же баловался, правда на открытом воздухе. если газ пошел а батарею не замыкали иль нагрузку бешеную не давали то элементу пипец пришел однозначно.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
так это же СУПЕР. проект. Жду не дождусь работоспособного универсального экземпляра.
Можно ли напрямую связаться с автором? Есть ряд вопросов
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Ghost_d Универсальный это сложно - чипов развелось как грязи и каждый со своими заморочками .
Что вас интересует ?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Интересно, а если дефолтный пароль не подойдет? Можно перебором его подобрать?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Можно конечно же, но это может занять не один год.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Battery Status: 48D0 Hex
В следующей строке как раз расшифровка. Если размер буфера в библиотеке Wire исправили, то пробуйте: 1,2,3,4,5,6,7,8 1,2,3,4,9
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Спасибо, так и сделал.
Но напряжение на гребенке аккума так и не появилось. Хотя количество циклов, дата и PFStatus обновились. Предохранитель живой.
Может контроллер как-то пнуть нужно после перепрошивки?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
На отключенном от ноутбука АКБ нет питания на гребенке ! Надо либо подключать к ноуту, либо "заземлить" SYSPRES.
P.S. MaxError: 119 % - надо еще раз повторить все команды. Если больше 100%, то нормально не откалибруется скорее всего.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Это акб на три ячейки, а контроллер умеет и четыре.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Вроде разобрался с алгоритмом обхода пароля для чипов bq20z. (на моих платах алгоритм работает, но они обе на bq20z8955, а хочется проверить и на других)
Если кто пробовал мои скетчи на чипах bq20z. и не смог снять блокировку стандартными паролями - напишите !
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Чип bq20z955, операции с 1 по 5 проходят успешно, на остальных "wire error". С чем может быть связано?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
danx43 Покажите что пишет п. 1 . после 1,2,3,4,5.
Попробуйте еще делать небольшие (сек. 30) паузы между операциями .
wire error - это не верное завершение обмена i2c
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Sealed - У Вас ключи не дефолтные !
Можем испытать "раскуренный" алгоритм, если Вы готовы.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Как увидите ключи - перепишите их в первый скетч и пользуйтесь уже им.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Что то не так . Wire error быть не должно
Попробуйте после запуска этого бинарника запустить первоначальный скетч и считать информацию не выполняя операцию № 2.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Всё без изменений. Скажите а может ли повлиять тот факт, что на батарею из-за пробитого мосфета было подано 19 вольт и сгорел управляемый предохранитель, который я востановил?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Вот это уже не понятно как -
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
ой, не обратил внимание на это, проверю
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Предохранитель пережигается контроллером при возникновении критических ситуация для защиты от возгорания лития. Успел ли сам контроллер пострадать - не ясно.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Здравствуйте, имеется батарея Acer AS10D75, контроллер bq20z955, залочен контроллер, стандартные пароли не подходят, смогу ли я разлочить контроллер с помощью скетчей.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Параметры батареи читаются с помощью Be2works.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Здравствуйте, имеется батарея Acer AS10D75, контроллер bq20z955, залочен контроллер, стандартные пароли не подходят, смогу ли я разлочить контроллер с помощью скетчей.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Yura27 На коте ответил.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Уточните, пожалуйста, какова вероятность, что Ваш скетч с BQ8030 будет работать?
P.S. Хотел свериться с даташитом, но не могу найти его на данный контроллер.
Pack Info.
DesignCapacity: 4218 mAh
FullChargeCapacity: 3631 mAh
CycleCount: 207
Date: 2010.11.22
DesignVoltage: 11100 mV
Wire error - 3
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Emulty Это совсем другой контроллер.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
sfs Этот скетч только для bq20z. чипов.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
А там существенная разница в протоколах/командах/адресах? Подскажите тогда, пожалуйста, откуда Вы брали инфу для bq20, может подправлю для 30
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
У меня нет плат с bq30z. по этому я не разбирался. Отличия 100% есть и то что код от bq20z. не работает тому показатель.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Да, Вы правы. 54 регистр в bq30 имеет совсем другую структуру. Плюс в том, что есть полное описание этого контроллера. Минус - мои скудные познания, тщетные попытки разобраться в Вашей программе и как-то прочитать Operation Status не привели к положительным результатам. Попробовал вместо ReadSMB (word) использовать ReadBlockSMB - опять Wire error - 3. Прочитать хотя бы один байт через ReadSMB (byte) - то же самое.. В общем тупик.
Может подскажете, как прочитать этот статус, какой функцией и в каком формате? Собственно нужно только получить эти 4 байта, чтобы выяснить залочен контроллер или нет.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
sfs Судя по описанию читать надо как блок и результат будет лежать в buff[1]. buff[4], в buff[0] длина блока - по идее должно быть 4.
Это их стандартная "отмазка" на нестандартное поведение банок. Плюс до кучи некоторые еще и предохранитель пережигают, что бы не заряжалась больше батарея.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Это их стандартная "отмазка" на нестандартное поведение банок. Плюс до кучи некоторые еще и предохранитель пережигают, что бы не заряжалась больше батарея.
ответил выше, на банках напряжение есть
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Подскажите пожалуйста, этот скетч на node mcu v3 будет работать? (контроллер на батарее bq20z75)
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Подскажите пожалуйста, этот скетч на node mcu v3 будет работать? (контроллер на батарее bq20z75)
у меня работает, ядро 3.0.2, да, периодически валится стек, но работает, как работает описал выше, подключал дюпонами, штыри-гнёзда
Немного правленый код под ESP8266:
Это всё, что смог считать из своей батареи, я так понял некоторые ячейки не читаются:
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
ua6em начиная с 21 строки результаты одинаковы 8E00 я бы на них не полагался.
Вам надо изучить даташит на свой чип и по нему уже смотреть что какие биты означают.
Я делал по даташиту bq20z95 и далеко не факт что флаги на вашем чипе находятся в тех же битах.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
ua6em начиная с 21 строки результаты одинаковы 8E00 я бы на них не полагался.
Вам надо изучить даташит на свой чип и по нему уже смотреть что какие биты означают.
Я делал по даташиту bq20z95 и далеко не факт что флаги на вашем чипе находятся в тех же битах.
я догадывался, что что-то не так )))
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Подскажите,я правильно понял,что сами батареи отпаивать не нужно?ещё вопрос,если отпаять Батареи на время прошивки,резисторы тоже уже не потребуются? Найти нужные резисторы в закромах сложнее чем Ардуино оказалось)).
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Тогда в начале скетча указываем нужную длину буфера:
Наконец дошли руки и у меня посмотреть батарею, плата NODE MCU LOLIN ESP8266
Подключение прямое -
// Версия для ESP8266 ядро 3.0.2
// распиновка
// GND - p-
// SDA - CLK (D1)
// SCL - DAT (D2)
В схеме подключения для node MCU нужно с подключать
d1,d2 к 3.3v через резисторы?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
В схеме подключения для node MCU нужно с подключать d1,d2 к 3.3v через резисторы?
не 3.3 вольтам а к GND (G), без резисторов, напрямую, скетч поправил, теперь в стеке не сыпется
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
[quote=grigory.dm
пишет:В схеме подключения для node MCU нужно с подключать d1,d2 к 3.3v через резисторы?
не 3.3 вольтам а к GND (G), без резисторов, напрямую, скетч поправил, теперь в стеке не сыпется
В случае с NodeMCU в это схеме какие резисторы вообще нужны?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
This provides protection from over-voltages and ESD. The output devices are also protected
from reversed voltages with diodes.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
ua6em когда человек не знает где что на выводах батареи - можно и +-12 получить в зависимости от "везения"
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
This provides protection from over-voltages and ESD. The output devices are also protected
from reversed voltages with diodes.
Хорошо, что есть защита, но это не даёт ответа , какое напряжение на SDA и SCL может быть у батареи HP, не просто же так в схеме на первой страничке этой ветки схема с резисторами.
Кстати, тоже никак не найду точного ответа, к каким контактам на батарее HP подключать SDA и SCL. Вижу подписи: P+, D, C, ID, B/I, P-
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Кстати, тоже никак не найду точного ответа, к каким контактам на батарее HP подключать SDA и SCL. Вижу подписи: P+, D, C, ID, B/I, P-
может так:
P- - GND
D - SCL (D2)
C - SDA (D1)
D1 и D2 можно менять местами, я заливал сначала сканер I2C и подобрал пины I2C по ответу контроллера батареи
ЗЫ перекидывать пины естественно обесточив ардуину |
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
grigory.dm будет очень правильным - схему ноутбука изучить.
Можно загуглить распиновку по маркировке батареи или модели ноута.
Ну и вскрытие - там сразу можно найти GND +BATT
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Кстати, тоже никак не найду точного ответа, к каким контактам на батарее HP подключать SDA и SCL. Вижу подписи: P+, D, C, ID, B/I, P-
может так:
P- - GND
D - SCL (D2)
C - SDA (D1)
D1 и D2 можно менять местами, я заливал сначала сканер I2C и подобрал пины I2C по ответу контроллера батареи
ЗЫ перекидывать пины естественно обесточив ардуину |
Только таким методом получилось понять:
Хапешники не стали выбумывать)
ЩАс попробую законнектиться
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Парни, может что-то не то делаю, но где смотреть вывод с данными ?В мониторе пусто , в консоли только отчёт о аплоаде:
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
открыть монитор порта после загрузки, нажать кнопку RESET
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Еще не FullChargeCapacity: 32 mAh настроживает, видимо это старый стейт от ботареи до замены мертвых аккумов:
Пункты выполняются до 5 , но 6 падает в (у меня плата esp8266 node mcu, и с размером буфера вроде не должно быть проблем):
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Намедни внезапно умер аккумулятор от ноута Samsung, что и побудило его поковырять. Опишу свои приключения - может кому полезным будет.
Умер аккум следующим образом - при стопроцентном заряде отключил от сетевого питания и работал от батареи, буквально пару минут поработал и ноут просто вырубился без каких либо предупреждений и включаться не желал. При подключении сетевого питания ноут начинал работать, в трее значок батарее показывал уровень заряда 94%, "подключена, не заряжается". Отключение от сети приводило к мгновенному отрубанию ноута, как будто батареи и не было.
Коллега с работы отдал контроллер от такого же аккумулятора, уже выпаянный, но только немного постарее (ревизия его аккумулятора 1.0, моего 1.2), типа может получится из двух один собрать.
Распиновку гребёнки в инете не нашёл, она на 7 контактов. Прозвонкой удалось выяснить - крайние с обеих сторон это сдвоенные + и -, по информации из инетов так же стало понятно, что ближайший к минусу это контакт указывающий на то, что батарея вставлена в ноут, не знаю как точно называется контакт, где-то в инете проскакивало BAT_IN, пусть будет такой. Оставшиеся два это как раз необходимые SDA и SCL. Ниже картинка с полученной распиновкой.
При подключении ардуинки по схеме с первой страницы этой ветки, контроллер не отвечал (для таких "специалистов" как я - для arduino nano SDA это вывод А4, SCL - А5). Причём не отвечал ни мой, ни тот который коллега отдал (к нему я подключил три банки лития, от плюса к минусу - как где-то советовали). Чип на обоих контроллерах одинаковый - bq20z453. Запустить свой контроллер (ревизия 1.2) удалось кратковременным подключением + с крайней банки на + гребёнки. А контроллер коллеги (ревизия 1.0), кратковременным подключением GND на BAT_IN.
Свой контроллер удалось оживить и последовательность 1,2,3,4,5,6,7,8,1,2,3,4,9 отработала корректно. Ноут аккум видит, заряжает, но при отключении от сети проходит немного времени и ноут вырубается без предупреждений. Последующее включение сетевого адаптера опять всё нормализует - видит, заряжает. Тут я думаю одна банка умирает похоже, потому что на ней напряжение ниже чем на остальных двух на 4 десятых вольта. Надо подключить вольтметр и посмотреть как падает напряжение на ней. Но странно почему, в винде не отображается снижение процентов заряда аккумулятора? Вернее оно конечно есть, но плавное снижение до около 78% и затем выключение. На сколько я понимаю проценты должны быстро падать и только потом отрубаться. Но это ладно, тут я ещё поковыряю.
Меня больше интересует вот что - на контроллере коллеги с 1 по 5 отрабатывает, дальше Wire error-3. Если сделать с 1 по 5 затем опять 1, то статус остаётся Sealed. Я так понял что здесь нестандартные ключи. Потому что на моём контроллере Sealed поменялся на Unsealed.
Ну и вопрос к Komandir-у: можно победить этот контроллер? Вы ранее писали чтоб обратились к Вам при подобных ситуациях. Сможете помочь? Повторюсь - чип bq20z453
В этой статье мы рассмотрим, что такое интерфейс I2C (ай-ту-си, и-два-цэ), в чём его особенности и как с ним работать.
2 Реализация I2Cв Arduino
Arduino использует для работы по интерфейсу I2C два порта. Например, в Arduino UNO и Arduino Nano аналоговый порт A4 соответствует SDA, аналоговый порт A5 соответствует SCL.
Реализация I2C в Arduino UNO и Nano
Для других моделей плат соответствие выводов такое:
Плата | Пин SDA | Пин SCL |
---|---|---|
Arduino Uno, Nano, Pro и Pro Mini | A4 | A5 |
Arduino Mega | 20 | 21 |
Arduino Leonardo | 2 | 3 |
Arduino Due | 20, SDA1 | 21, SCL1 |
3 Библиотека "Wire" для работы с IIC
Для облегчения обмена данными с устройствами по шине I2C для Arduino написана стандартная библиотека Wire. Она имеет следующие функции:
Функция | Назначение |
---|---|
begin(address) | инициализация библиотеки и подключение к шине I2C; если не указан адрес, то присоединённое устройство считается ведущим; используется 7-битная адресация; |
requestFrom() | используется ведущим устройством для запроса определённого количества байтов от ведомого; |
beginTransmission(address) | начало передачи данных к ведомому устройству по определённому адресу; |
endTransmission() | прекращение передачи данных ведомому; |
write() | запись данных от ведомого в ответ на запрос; |
available() | возвращает количество байт информации, доступных для приёма от ведомого; |
read() | чтение байта, переданного от ведомого ведущему или от ведущего ведомому; |
onReceive() | указывает на функцию, которая должна быть вызвана, когда ведомое устройство получит передачу от ведущего; |
onRequest() | указывает на функцию, которая должна быть вызвана, когда ведущее устройство получит передачу от ведомого. |
5 Управление устройством по шине IIC
Рассмотрим диаграммы информационного обмена с цифровым потенциометром AD5171, представленные в техническом описании:
Рассмотрим диаграммы чтения и записи цифрового потенциометра AD5171
Нас тут интересует диаграмма записи данных в регистр RDAC. Этот регистр используется для управления сопротивлением потенциометра.
Откроем из примеров библиотеки "Wire" скетч: Файл Образцы Wire digital_potentiometer. Загрузим его в память Arduino.
После включения вы видите, как яркость светодиода циклически нарастает, а потом гаснет. При этом мы управляем потенциометром с помощью Arduino по шине I2C.
По ссылкам внизу статьи, в разделе похожих материалов (по тегу), можно найти дополнительные примеры взаимодействия с различными устройствами по интерфейсу IIC, в том числе примеры чтения и записи.
Читайте также: