Определение адреса I2C устройства
Шина I2C очень популярна тем, что к ней можно подключить очень много устройств. Тем самым не требуется занимать много выводов контроллера и подключение намного понятнее и нагляднее. Чтобы обратиться к модулю на шине, нужно указать его адрес. Но покупая очередное устройство, не всегда понятно, как же определить, какой именно адрес на шине I2C принадлежит тому или иному устройству.
Простое определение адреса устройства
Шаг 1. Подключите устройство к контроллеру
Подключите Ваше устройство напрямую к контроллеру.

Шаг 2. Загрузите скетч, указанный ниже в контроллер
Скетч для загрузки:
#include //подключение библиотеки void setup() { Wire.begin(); //инициализация шины Serial.begin(9600); //инициализация монитора Serial-порта while (!Serial); //ожидание доступности порта Serial.println("I2C Scanner"); } void loop() { //вспомогательные переменные byte error; //хранение кода ошибки byte address; //хранение адреса устройства int nDevices = 0; //счётчик устройств Serial.println("Scanning. "); //вывод надписи for (address = 1; address 127; address++ ) { /* Для поиска устройств воспользуемся функцией коммуникации и * окончания коммуникации с устройством на адресе от 1 до 127. * При окончании коммуникации возвращается код ошибки. * Если он не равен нулю, то коммуникация прошла успешно, * и устройство на данном адресе найдено. * В противном случае выводится информация об ошибке. */ Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { //ошибки не обнаружено //вывод адреса найденного устройства Serial.print("I2C device found at address 0x"); if (address 16) { Serial.print("0"); } Serial.print(address, HEX); Serial.println(" !"); nDevices++; //увеличение счётчика найденных устройств } else if (error == 4) { //если код ошибки равен 4 - устройство неопознано //вывод информации об ошибке Serial.print("Unknown error at address 0x"); if (address 16) { Serial.print("0"); } Serial.println(address, HEX); } } //вывод результата по окончании сканирования if (nDevices == 0) { Serial.println("No I2C devices found"); } else { Serial.print("Found "); Serial.print(nDevices); Serial.println(" devices"); } delay(5000); //пауза в 5 секунд между сканированием }
Шаг 3. Откройте монитор порта
В мониторе Serial-порта будет выведен адрес Вашего устройства. В данном примере адресом устройства является «0x51».
Scanning. I2C device found at address 0x51 ! Found 1 devices
Примечание: Для подключения нескольких устройств, посмотрите примеры из статьи Расширитель I2C.
© 2014-2023 УмныеЭлементы — DIY-электроника Arduino, компоненты для робототехники и электронных устройств. «УмныеЭлементы» (SmartElements) является зарегистрированным товарным знаком. Любое воспроизведение товарного знака допускается только с согласия правообладателя.
Устройство HID на шине I2C что это такое?

Просматривая устройства в диспетчере, некоторые пользователи могут отметить в нем некое устройство HID на шине I2C, помеченное восклицательным знаком. А это может говорить лишь об одном: с этим устройством есть проблемы. Причем они могут быть как программного характера, так и аппаратного.
В данной статье мы расскажем какое устройство обычно скрывается под данным названием и что можно попробовать сделать самостоятельно для устранения этой проблемы.
Запуск устройства HID на шине I2C невозможен (Код 10)
Для начала разберемся что это за устройство. В 80% случаев им является тачпад. В оставшихся 20% – клавиатура, подключенная по USB мышка или тачскрин (Сенсор экрана, если экран в вашем ноутбуке сенсорный).

Ошибка запуска устройства с кодом 10
Первым делом нужно проверить работоспособность всех этих устройств: ввести что-либо с клавиатуры, поводить пальцем по тачпаду и т.д.
То, что окажется нерабочим, и будет являться тем самым устройством HID на шине I2C.
Что делать, чтобы устройство заработало?
Самый верный путь – определить модель ноутбука, перейти на официальный сайт, скачать драйвера на все устройства ввода (тачпад, тачскрин, клавиатура) и установить их.
Второй вариант заключается в поиске драйвера для устройства по его идентификатору. Для этого в диспетчере устройств нужно дважды кликнуть мышкой по устройству HID на шине I2C.

Определение ИД оборудования
В открывшемся окне перейти на вкладку “Сведения” и выбрать свойство “ИД оборудования”.
Далее скопировать самое верхнее значение и вставить его в поиск гугла или яндекса.

Поиск драйвера к устройству по его ИД
В полученных результатах выдачи останется отыскать драйвер под ваше устройство.
Если ничего из вышеописанного не помогло и устройство HID на шине I2C все равно отображается в диспетчере устройств с восклицательным знаком и статусом “Запуск этого устройства невозможен. Код 10”, то это означает, что с этим устройством имеются проблемы на аппаратном уровне.
Например, поврежден или отсоединился шлейф или само устройство повреждено, например падением ноутбука или его залитием жидкостью. В этом случае лучше обратиться в сервис. А если все нормально работает, то и вовсе не обращать на него внимание.
Лучшая благодарность автору — репост к себе на страничку:
Arduino: как узнать I2C адрес устройства?
I2C — это такая шина данных, широко используемая в микроэлектронике. С помощью I2C можно подключить к Ардуино много разных полезных модулей, включая датчики, дисплеи, АЦП и даже другие платы Ардуино.
Шина является адресной, так что каждое подключаемое устройство имеет свой адрес в диапазоне от 8 до 127. На одной шине не может быть два устройства с одинаковыми адресами.
В этой короткой статье мы победим одну из частых проблем, которые испытывают самодельщики про покупке неведомого модуля с этим самым I2C интерфейсом. Проблема состоит в том, что производитель может изменить адрес устройства, и стандартные библиотеки перестают работать. Часто с подобной неприятностью можно столкнуться, например, при подключении ЖК дисплея с интерфейсом I2C.
Программа для сканирования I2C шины
Чтобы понять, какой всё-таки адрес у модуля, подключаемого к плате Ардуино, нужно просто «постучаться» по каждому из 119 возможных адресов. Если кто-то ответит, значит адрес рабочий!
#include void setup() < Wire.begin(); Serial.begin(9600); while (!Serial); Serial.println("\nI2C Scanner"); >void loop() < byte error, address; int nDevices; Serial.println("Scanning. "); nDevices = 0; for(address = 8; address < 127; address++ )< Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0)< Serial.print("I2C device found at address 0x"); if (address<16) Serial.print("0"); Serial.print(address,HEX); Serial.println(" !"); nDevices++; >else if (error==4) < Serial.print("Unknow error at address 0x"); if (address<16) Serial.print("0"); Serial.println(address,HEX); >> if (nDevices == 0) Serial.println("No I2C devices found\n"); else Serial.println("done\n"); delay(5000); >
Загружаем программу на Ардуино Уно, подключаем тестируемое устройство к I2C шине и открываем монитор последовательного порта. Если все подключено правильно, то появится примерно такой отчет:

Это значит, что мой дисплей имеет адрес 0x27 в шестнадцатеричной системе счисления. Теперь можно смело подключить библиотеку для работы с такими дисплеями и указать в ней данный адрес.
Изменено: 14 Ноя, 2016 02:25
Arduino: как узнать I2C адрес устройства? : Один комментарий
Роман говорит 14.11.2016 в 15:39 :
Очень интересно, но думаю не помешала бы принципиальная схемка подключения I2C устройства к Ардуино. Ну или ссылка на такую процедуру.
Почему не определяются устройства на шине i2c

| Текущее время: Пн фев 05, 2024 08:03:47 |
Часовой пояс: UTC + 3 часа
Запрошенной темы не существует.
Часовой пояс: UTC + 3 часа

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y
Работоспособность сайта проверена в браузерах:
IE8.0, Opera 9.0, Netscape Navigator 7.0, Mozilla Firefox 5.0
Адаптирован для работы при разрешениях экрана от 1280х1024 и выше.
При меньших разрешениях возможно появление горизонтальной прокрутки.
По всем вопросам обращайтесь к Коту: kot@radiokot.ru
©2005-2024