Портативный сканер устройств на шине I2C

Опубликовано 12.02.2016 11:06:00


Автор: Александр Бондаренко

Увлечение платформой Arduino привело меня к устройствам, работающим по шине I2C (сокращение  от английских слов Inter-Integrated Circuit) также называемые как "Two-Wire" устройства. Выпускается большое количество микросхем, аппаратно поддерживающих I2C шину. Это и всевозможные датчики, часы реального времени, память, расширители портов и много чего другого. В статье ниже представлена модернизация проекта сканера устройств с шиной I2C на базе Arduino, который описан на странице http://playground.arduino.cc/Main/I2cScanner и пример практической работы с автономным от компьютера прототипом устройства.

заставка

 

 

Помимо вешеперечисленных датчиков и модуей, по I2C шине управляются и тюнеры, которые используют в телевизорах. Как раз один из экземпляров такого устройства попал в руки. Родилась идея поэкспериментировать с ним. Но как узнать, что тюнер хотя бы работает? Начал поиски по интернету. Может кто-нибудь использовал Arduino для управления такими устройствами? К сожалению, таких материалов не нашел, но заинтересовала одна интересная разработка на странице  http://playground.arduino.cc/Main/I2cScanner . Это сканер I2C устройств на базе Arduino.  Идея этого сканера очень проста - подцепить I2C устройство к пинам аппаратной реализации I2C (для Arduino Uno это A4 A5). Далее запускается сканирование диапазона адресов и при обнаружении устройств в мониторе порта Arduino IDE будет отображены их адреса.

Данный проект отвечал поставленной задаче. Но для меня существенным минусом показалось зависимость от персонального компьютера. Нужно запустить монитор среды разработки Arduino IDE, подключить Arduino через COM порт к ней. Немного поразмыслив, родилась идея сделать автономное от компьютера устройство, способное сканировать и отображать на экране LCD адреса I2C устройств подключенных к шине. Для такой задачи как нельзя лучше подходит LCD Keypad Shield, который был у меня в наличии и с которым я уже успел поработать. Он оборудован HD4478 совместимым LCD дисплеем с обвязкой и шестью кнопками, которые пригодятся для управления процессом сканирования. Его можно напрямую подключить к Arduino Uno и подобным, и получить автономный, законченный модуль для работы с I2C устройствами.

Представленный в статье прототип выполнен на самодельном Arduino-подобном модуле с контроллером ATmega328 (ATmega8).

Для обнаружения устройства на текущем адресе, при сканировании, используется возвращаемое значение функции

Wire.endTransmisstion

После подключения тестируемой платы к шине I2C и подачи питания, на экране отображается начальная заставка,

заставка

 

Затем предлагается начать сканирование нажатием на кнопку "RIGHT".

 

Ход и результаты сканирования отображаются на LCD дисплее.

 

При обнаружении устройства I2C выводится его адрес.

Вот на адресе 30 (0x1E) обнаружен трехосевой цифровой компас GY-271 на базе микросхемы HMC5883L

 

На адресе 119 (0x77) датчик давления и температуры BMP-180  

 

На адресе 39 (0x27) I2C расширитель портов на PCF8574T, который используется для подключения LCD дисплея по шине I2C

 

На адресах 80 (0x50) и 104 (0x68) соответсвенно память 24C32 и часы на DS1307                                          

 

А вот и тюнер KS-H-140EA на базе микросхемы TUA6020 откликнулся!

 

По окончании сканирования на экран выводится количество обнаруженных устройств.


В результате получился удобный сканер для быстрой проверки работоспособности I2C устройства и нахождения его адреса. Если все железо аккуратно поместить в корпус, то будет полноценный прибор.

Успехов всем увлеченным электроникой и платформой Arduino!

В заключении код проекта.

 
Программный код

А как же комментарии?