Notice: Memcache::get(): Server localhost (tcp 11211) failed with: Connection refused (111) in /home/a146/www/we.easyelectronics.ru/engine/lib/external/DklabCache/Zend/Cache/Backend/Memcached.php on line 134
Клон дисплея Adafruit, экономим выводы микропроцессорных устройств. / Работа с дисплеями и графикой / Сообщество EasyElectronics.ru

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

Всем привет! Сегодня я расскажу как мне удалось сэкономить порты своей Raspberry Pi. Давно хотел подключить строчный дисплей к этому одноплатному компьютеру, и даже попробовал это сделать используя библиотеку wiringpi, но уж очень много выводов занимает такое подключение. Первое, что пришло в голову, было использование сдвиговых регистров, но все же я решил посмотреть в сторону шины I2C или SPI. Почитав топики в интернете нашел классное решение — RGB LCD SHIELD KIT W/ 16X2 CHARACTER DISPLAY — ONLY 2 PINS USED!. На плате используется всего два пина для управления SDL и SCK по шине I2C, плюс еще места хватило для пяти тактовых кнопок. В данном устройстве скорость не так сильно важна, поэтому шина I2C мне вполне подошла. «Сердцем» платы является микросхема компании Microchip, расширитель портов MCP23017.


Микросхема 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

Комментарии (14)

RSS свернуть / развернуть
<video>http://www.youtube.com/watch?v=GV67IDA4zD4</video>
0
  • avatar
  • Vga
  • 28 декабря 2016, 04:12
Странно, но вчера раз пять пытался и видео не встроилось.
0
Неправильно пытался. Вставь мою строчку и все заработает.
+1
Ааааа, https не поддерживается у Ди =)
0
Я воспользовался готовым модулем, на расширителе PCF8574T.
+1
Я смотрел и в эту сторону. Но Адафрут меня привлек огромным количеством библиотек, и на чип у меня уже были библиотеки для применения с AVR(только под LCD необходимо переделать, чем займусь в свободное время), не говоря уже про Raspberry (Arduino не пользуюсь, проще на голом AVR мне создать что-то). Потом и на STM32 перенесу, но это уже отдельный разговор. Ну плюс покупать не хотел, хотел сам собрать.
0
Вот такие графические 480х320 для Пи и Ардуины пока продают за смешные деньги… цель экономить ножки?

я не понимаю красоты текстовых строк :(
-2
Все зависит от цели и конечного устройства, зачем мне в медиаплеере к примеру, графический дисплей, когда за глаза хватит семисегментный. Если вы не используете GPIO, это не значит, что они не нужны. К примеру я в проектах использовал UARR, RTC, 1Wire, SPI для АЦП, и к ножкам цеплял чип с транзисторами Дарлингтона для управления силовыми реле. Я не против графических дисплеев, отнюдь только за, но не всегда нужно стрелять пушкой по воробьям.
0
в настольном «медиаплеере» вообще «дисплей» не нужен… вся информация выводится на экран телевизора :)
в карманном медиаплеере (который не Пи) более функционален графический дисплей с выводом многострочного списка названий и возможностью показа видео и фоток…
или как на данном ПЛК — меню


в данном топике представлен «пейджер» 80-х…
-1
пример медиаплеера на STM32…
-3
Это ваше имхо. Я предоставил ряд аргументов, которые еще можно умножить на 2 а-то и на три.
0
Я представил фоторяд аргументов, которые можно удвадцерить и утридцатерить :)


Если «аргумент» «увеличение количества входов/выходов», то это называется распределённая периферия, к которой ты можешь протянуть линию связи и уже на месте установить станцию ввода/вывода с требуемым количеством дискретных и аналоговых входов/выходов и функциональных модулей, а не пытаться протянуть сотни проводов от датчиков в одну Пи.
-2
чисто из праздного любопытства: а у вас бывают фотки, на которых отсутствует продукция торговой марки «семён»?))
+2
Для вас я нашел отдельный топик Raspberry Pi TouchScreen
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.