Клон дисплея Adafruit, экономим выводы микропроцессорных устройств.


Микросхема MCP23017 добавляет 16 портов(2 байта или одно слово), которые можно настроить как на вход, так и на выход. Микросхема использует популярную двухпроводную шину I2C(обратите внимание существует микросхема, которая работает по шине SPI, если посмотреть в техническую документацию, ее аббревиатура MCP23S17). MCP23017 можно наращивать в массив до 8 штук на одной шине I2C(можно существенно расширить количество GPIO Raspberry или другого микропроцессорного устройства (8 x 16 = 128 дополнительных пинов!)). Каждой микросхеме задается адрес через выводы А0, А1, А2 в двоичном виде, подключив их к минусу или плюсу, я использовал перемычки(Jumpers).
Делать решил сам, быстро купил необходимые детали и приступил к разводке печатной платы. Компоненты использовал планарные, давно уже перешел на них (компактно и не нужна сверловка). Плата получилась не очень, торопился и расположил кнопки навигации и управления в хаотичном порядке, не как в оригинале. Печатную плату изготовил ЛУТом, поэтому изначально была задача упростить себе жизнь, сделав чертеж печатной платы односторонним. Принципиальную схему я все-таки доработал, добавил преобразователь LVTTL-TTL на двух МДП-транзисторах (на электрической схеме непосредственные связи между преобразователем LVTTL — TTL отсутствуют, но в DipTrace эти связи присутствуют без явного соединения) и убрал управление RGB подсветкой, так как я применил обычный hd44780 совместимый 16 х 2 LCD с зеленой подсветкой (WH1602B). Дополнительно применил транзисторный ключ для управления яркостью программно(можно в дальнейшем использовать ШИМ для плавной регулировки). Схема очень простая и думаю нет смысла описывать принцип работы:

Вид печатной платы и 3D модель из САПР DipTrace:


После сборки подключил устройство к Raspberry Pi к шине I2C (GPIO2 — SDA, GPIO3 — SCL, питание +5В, +3В и GND). Для проверки зашел по SSH на Raspberry и ввел команду:
i2cdetect -y 1
При условии, если у вас конечно же установлен i2c-tools На экране появилась вот такая таблица адресов.
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: — — — — — — — — — — — — —
10: — 41 — — — — — — — — — — — — — —
20: — — — — — — — — — — — — — — — —
30: — — — — — — — — — — — — — — — —
40: — — — — — — — — — — — — — — — —
50: — — — — — — — — — — — — — — — —
60: — — — — — — — — — — — — — — — —
70: — — — — — — — —
На пересечении координат 10: 2 мы видим адрес нашего устройства (адрес устройства будет зависить от положений перемычек на входах A0,A1,A2). Теперь можно найти множество примеров в репозитории Adafruit и поработать с дисплеем. Адрес репозитория — Adafruit_Python_CharLCD
Для установки i2c-tools необходимо ввести следующие команды:
apt-get update
apt-get -y upgrade
apt-get install i2c-tools
Ну и напоследок тестовое видео работы устройства:
PS: Так как у меня было две микросхемы MCP23017, я сделал еще одну плату расширения с кнопками и светодиодами, изменил адрес этой платы (что бы не совпадал с адресом платы индикации). Резисторы R6 — R13 470Ом 1206.

И печатная плата:

Ссылка на оригинал — Original post
PS: Устройство можно применить с Arduino и AVR, но так как там цепи питания в основном 5В, необходимо исключить из схемы преобразователь LVTTL — TTL и подключить линии SDA, SCL напрямую к таргету. В случае использования устройства с STM32 — оставляем так как есть, цепи питания у данного микроконтроллера 3,3В. Устройство удобно еще и тем, что его можно применить сразу как дисплей с кнопками навигацией по меню (например: Вверх, Вниз, Влево, Вправо, Подтвердить) и существенно сократить используемые пины порта микропроцессорного устройства.
- +2
- 27 декабря 2016, 15:55
- Jman
- 2
Файлы в топике:
16x2LED_I2C.zip, Expansion.zip
Я смотрел и в эту сторону. Но Адафрут меня привлек огромным количеством библиотек, и на чип у меня уже были библиотеки для применения с AVR(только под LCD необходимо переделать, чем займусь в свободное время), не говоря уже про Raspberry (Arduino не пользуюсь, проще на голом AVR мне создать что-то). Потом и на STM32 перенесу, но это уже отдельный разговор. Ну плюс покупать не хотел, хотел сам собрать.
Все зависит от цели и конечного устройства, зачем мне в медиаплеере к примеру, графический дисплей, когда за глаза хватит семисегментный. Если вы не используете GPIO, это не значит, что они не нужны. К примеру я в проектах использовал UARR, RTC, 1Wire, SPI для АЦП, и к ножкам цеплял чип с транзисторами Дарлингтона для управления силовыми реле. Я не против графических дисплеев, отнюдь только за, но не всегда нужно стрелять пушкой по воробьям.
в настольном «медиаплеере» вообще «дисплей» не нужен… вся информация выводится на экран телевизора :)
в карманном медиаплеере (который не Пи) более функционален графический дисплей с выводом многострочного списка названий и возможностью показа видео и фоток…
или как на данном ПЛК — меню

в данном топике представлен «пейджер» 80-х…
в карманном медиаплеере (который не Пи) более функционален графический дисплей с выводом многострочного списка названий и возможностью показа видео и фоток…
или как на данном ПЛК — меню

в данном топике представлен «пейджер» 80-х…
Я представил фоторяд аргументов, которые можно удвадцерить и утридцатерить :)

Если «аргумент» «увеличение количества входов/выходов», то это называется распределённая периферия, к которой ты можешь протянуть линию связи и уже на месте установить станцию ввода/вывода с требуемым количеством дискретных и аналоговых входов/выходов и функциональных модулей, а не пытаться протянуть сотни проводов от датчиков в одну Пи.

Если «аргумент» «увеличение количества входов/выходов», то это называется распределённая периферия, к которой ты можешь протянуть линию связи и уже на месте установить станцию ввода/вывода с требуемым количеством дискретных и аналоговых входов/выходов и функциональных модулей, а не пытаться протянуть сотни проводов от датчиков в одну Пи.
Комментарии (16)
RSS свернуть / развернуть