В копилку инструментов: tiny i2c scanner

В свете получения очередных девайсов с i2c-шиной подумалось, что неплохо было бы иметь готовый сканер адресов, а не городить очередной раз что-то на базе Arduino или ESP. На глаза попался проект на базе attiny85 (да, в последнее время полюбилось мне на них делать что-нибудь), решил повторить.

Проект сделан под PlatformIO, поэтому некоторые переменные описываются не в коде, а в файле проекта и применяются только в момент сборки. Из того, что нужно добавить в код для сборки, например, в Arduino IDE:

#define DISPLAY_SW_I2C PB4,PB3
// scl,sda
#define TACT_PIN 1
//#define USE_U8X8

Флаг USE_U8X8 немного меняет внешний вид экрана, но, судя по тексту, не все версии библиотек могут влезть в память контроллера. У меня влезло, но вид мне больше понравился с квадратиками. TACT_PIN – 6-я нога контроллера – может быть притянут к земле кнопкой, тогда постоянное переключение экрана между режимами отображения останавливается – хотя экран обновляется и если на горячую подключить девайс – его адрес будет виден.

Распиновка – простейшая, схему не привожу, достаточно текстового описания:

  • Питание – штатно, + на 8, – на 4. Соответственно, шарим питание на подключаемое устройство и на дисплей.
  • 7 и 5 ноги контроллера – для сканируемого устройства, 7 – SCK, 5 – SDA.
  • 6 нога – для кнопки на общий. Стоит сделать подтяжку ноги на плюс – на макетке у меня работало и так, но после сборки в более законченном варианте кнопка перестала работать, пришлось допаивать резистор.
  • 2 и 3 ноги – software i2c для дисплея: 2 pin – SDA; 3 pin – SCL.

Для сканируемого устройства в итоге сделал 4 пина для возможности вставить в макетную плату или подключить коннекторы Dupont. Была мысль сделать пару-тройку разъемов под разные варианты комбинаций выводов, но из тех устройств, что оказались под рукой, комбинации были везде разные, а неудачно воткнув сканируемое устройство “не в тот” разъем, можно было его спалить.

Добавил USB-разъем для возможности запитки от внешнего источника – тут выяснилось, что я поторопился размещать компоненты на плате: сделав сдвиг контроллера чуть в сторону, можно было разместить распаянный micro USB-разъем (или любой другой вариант с терминалом под пайку). В итоге остановился на обычном разъеме type A, выпаянном откуда-то из старой техники.

По ходу сборки выяснилась интересная подробность. Нашел в сети этот тред, у человека была проблема с сканированием сенсорных модулей на TTP229, аналогичных тем, что заказал я. Резюме треда:

The I2C Scanner uses a ‘write’ command to test for an acknowledge from a I2C device. The TTP229 simply ignores that, but it does acknowledge a ‘read’ command, because that is the only thing it knows.

В треде есть пример кода, работающего с read, однако у меня пока нет идей, можно ли добавить такую функциональность в сканер на tiny85. Буду просто держать этот момент в голове.

Итог того, что получилось:

Код

Добавить комментарий