Подключение ЖК-дисплея к Arduino (29.10.2018). |
![]() |
2018 - Октябрь | |||
29.10.2018 19:08 | |||
Используемый ЖК: QAPASS 1602A с интерфейсом I2C; сам дисплей стоит рублей 80, плата интерфейса I2C - рублей 50. До I2C пока не дорос (в лоб запустить не вышло) - стояла задача выдать информацию по стандартному интерфейсу ЖК. В лоб запустить так же не вышло, и было связано это именно с физическим подключением к плате Arduino. Поэтому описываются каждый контакт: куда подключать и зачем нужен. При этом указываются именно названия контактов, а не номера. На разных ЖК и нумерация может начинаться с 3/4 ряда, и контакты могут быть даже не подписаны: - питание знакосинтезатора - самое первое и простое к подключению. Vdd подсоединяется к 5В, Vcc подсоединяется к общему. Проверка: при выполнении функции cursor() на дисплее должен отображаться курсор как нижнее подчеркивание (может и не отобразиться, см. ниже); - питание подсветки ЖК. В плате с интерфейсом I2C разводка сделана так, что Vdd и Vcc - общие для знакосинтезатора и подсветки; подсветка включается перемычкой в комплекте с дисплеем, устанавливается на плату интерфейса I2C. Если такой платы нет - подсветка загорится сразу после подключения проводов. Собственно, горящая подсветка - правильный итог действий. Однако стоит сделать акцент на том, что контакт A это плюс подсветки, контакт K - минус подсветки. Поэтому если требуется управление подсветкой без участия платы I2C - эти контакты очень пригодятся. Не исключено, что контакт на перемычке I2C и контакт дисплея A - одно и то же. Однако, вспоминая, что светодиоды работают при 5В через резистор 220Ом - тут 2 варианта: либо этот резистор есть на схеме дисплея, либо нужно припаять отдельно; - регулировка контрастности знакосинтезатора. Vo (китайцы могут писать как V0) должен быть подключен через маломощный потенциометр. На данном ЖК - уже установлен серии 3362 на 2кОм, стоит на плате I2C (по книгам - надо 10кОм). Контрастность - камень преткновения, т.к. при подвешенном в воздухе состоянии на табло не горят знакоместа и символы (как и при присоединении к 5В), при присоединении к общему - знакоместа скрывают символы (их еле видно, если смотреть на табло под углом 45 градусов - дисплей работает, но глаз этого не видит). То есть, сначала нужно сделать контраст на общий, потом подать питание на знакосинтезатор (убедиться в видимости знакомест), потом на подсветку (убедиться, что горит) - и только потом припаивать резистор и регулировать контраст; - выбор режима обмена данными с дисплеем. Rw при присоединении к 5В позволяет читать данные с дисплея, к общему - посылать в дисплей. По сути, всегда требуется Rw с нулевым сигналом, к общему; - пины передачи данных на дисплей. Напряжение на Rs - булевый флаг либо передачи команды (0), либо отображения символы (1). Напряжение на D4...D7 (DB4...DB7) - коды передачи того или иного символа (линии данных). Можно использовать 8 линий данных D0...D7, однако есть более укороченный вариант, с целью уменьшения количества проводов; - контакт E - разрешение чтения/записи. В функциях работы с дисплеем на него постоянно подается 255. Попробуйте припаять его к 5В: если все будет работать - нет смысла забивать лишний цифровой порт. Программная часть, библиотека LiquidCrystal, описана корректно в книге Петина В.А. "Проекты с использованием контроллера Arduino". При этом библиотека LiquidCrystalRus полностью подобна LiquidCrystal - однако умеет корректно выводить русские символы. Технические особенности: - функция begin(), в зависимости от входных параметров, способна влиять на контрастность изображения. При (1,1) контрастность норма, при (1,16) тускло. Даже если в begin() четко определено количество символов в длину (16) - строка имеет длину 48, и можно выйти за пределы ширины экрана; - если вместо текста идут кракозябры - отошел один из пинов информации, или используются не необходимые пины. Есть и иной вариант: отсутствие в самом дисплее поддержки русских букв. В этом случае, если сравнивать кракозябры с объекта LiquidCrystal и LiquidCrystalRus, кракозябры будут различаться. Это - повод возврата средств на алиэкспрессе. Дисплей QAPASS 1602A русской поддержки не имеет; - noDisplay выключает знакосинтезатор, но не подсветку - что является адским минусом. Поэтому подсветкой лучше управлять через аналоговый выход. Не Vdd сажать на аналоговый выход вместо 5В (глючит) - а именно ножку подсветки на плате I2C или контакт A на плате дисплея; - создание объекта LiquidCrystalRus определяет, в каком режиме будет работать дисплей. Если параметров 6 - указываются пины цифровых выходов Rs, E, D4, D5, D6, D7. При этом пусть не путает LiquidCrystalRus.h со своими входными параметрами "d0, d1, d2, d3": контакты на плате ЖК - именно с D4 по D7; - лучше покупать не универсальный ЖК, а именно под задачу. Плата I2C мешает своими габаритами, если не использовать I2C. Запаянные отверстия в плате ЖК не позволяют использовать съемные проводки Arduino (dupont cable) - только пайка. Из-за платы I2C дисплей невозможно ровно прикрутить винтами к поверхности. Хорошим подспорьем может быть модуль Arduino "LCD Keypad Shield" за 200руб с дополнительным ручным управлением: плату дисплея за 80руб засунули в плату с кнопочками за 120руб. Но непонятно, поддерживает ли I2C (за такие деньги, вообще-то, должен); - несмотря на реализацию макетного образца именно на Arduino UNO, оптимальным решением для ЖК является использование Arduino Nano v3, если количество датчиков не более 5; - расшифровка названия дисплея: 1602 есть 16 символов в строке и 02 строки. (добавлено 30.10.2018) E на +5В приводит к неработоспособности дисплея. Проблема локализуется в создании объекта дисплея. (добавлено 26.11.2018) I2C пишется через квадрат (не "IIC"). |
|||
Обновлено ( 28.05.2019 20:14 ) |