Подключение строчных OLED‑дисплеев
Как мы уже говорили, для строчных матричных экранов стандартный контроллер носит название HD44780. Для работы с ним имеется стандартная библиотека LiquidCrystal , входящая в состав Arduino IDE. С командами HD44780 совместим интерфейс любых подобных конструкций, причем и ЖК‑ и OLED‑разновидностей, однострочных или многострочных. Потому необязательно применять именно WEH001602В (буква В в конце наименования в данном случае указывает на высоту строки, 1602 означает, что это 16 символов на 2 строки). Почти без изменения программы можно ставить в схему любой подобный индикатор, в том числе и других производителей. Однако фирма Winstar захотела несколько улучшить стандарт, и потому ее произведения все‑таки имеют свои особенности, о которых мы поговорим далее.
В OLED‑версии дисплеев отсутствует вывод управления контрастом Vo (вывод 3 индикатора не подключается), и также ни к чему не подсоединяются выводы 15 и 16 , в ЖК‑версии управляющие подсветкой. Правда, некоторые сетевые источники утверждают, что функциональность этих выводов можно восстановить путем перестановки некоторых перемычек на плате, и таким образом управлять яркостью свечения точек, но не очень понятно, зачем. Индикаторы WEH001602В могут работать как от питания 5 В, так и от питания 3,3 В, и именно от напряжения питания зависит яркость. Опыт показал, что нормальной яркости свечения дисплей достигает уже при 3,3 В. На схеме рис. 22.1 он подключен к питанию 5 В, при котором яркость в нормальных условиях явно избыточна. Однако я предполагаю, что передняя панель будет выполняться из прозрачного дымчатого пластика, затемняющего «потроха» прибора, так что в готовом изделии яркость окажется в самый раз.
Рис. 22.1 . Схема главного модуля метеостанции с OLED‑индикаторами
* * *
Подробности
Работа индикатора и контроллера от одного напряжения питания заодно позволит избавиться от необходимости соединять выходы Arduino со входами дисплея через резистивные делители согласования 5‑вольтовых и 3‑вольтовых уровней (так, как это будет делаться при подключении Xbee‑модуля в выносном датчике, см. далее). А обязательно ли их устанавливать вообще? Зная, как устроены КМОП‑входы микросхем (см. главу 15 ), мы можем ответить на этот вопрос совершенно точно. Что будет происходить, если выход с уровнем 5 В подключить ко входу микросхемы, питающейся от напряжения 3,3 В? Как только напряжение на входе превысит напряжение питания более, чем на 0,6 В, через защитный диод на входе потечет ток. Его величина зависит от разных факторов (от величины превышения напряжения, от мощности выходного транзистора, от сопротивления защитного диода в прямом направлении), и эксперимент показывает, что в данном случае ток составит порядка 2 мА на каждом выводе. То есть на семь подключенных в данном случае выводов величина дополнительного тока составит около 15 мА, что примерно удвоит потребление всей схемы Arduino Uno. Это не опасно для микросхем и не критично при питании прибора от сети, но может послужить источником неприятностей при батарейном питании и, тем более, при вводе схемы в режим энергосбережения. Именно по этой причине мы в дальнейшем в выносном датчике и озаботимся установкой делителей (в главном модуле благодаря плате Wireless Shield такой делитель на всякий случай уже установлен и без нашего вмешательства).
* * *
Потребление индикатора WEH001602В при питании 5 В, согласно фирменной документации, составит 43 мА. Обратите внимание, что это почти в полтора раза меньше, чем потребление ЖК‑панели MT‑12864J с включенной подсветкой. На самом деле потребление будет еще ниже – цифра в документации указывает на случай, когда засвечены все точки матрицы, в реальной жизни такого, конечно, не случается.
Контроллер WS0010
Модернизированный вариант стандартного контроллера HD44780 от Winstar носит незамысловатое наименование WS0010. Главное отличие его от стандартного заключается в наличии нескольких встроенных таблиц шрифтов, из‑за чего управление этим дисплеем усложняется, и нам придется немного модернизировать стандартную библиотеку LiquidCrystal. Но проблема заключается не в одних только шрифтах – как водится, что‑то улучшив, разработчики что‑то и ухудшили.
Для начала следует увеличить задержку после включения питания перед инициализацией. В оригинале, согласно спецификации на традиционный контроллер HD44780, она составляет 50 мс, но для версии WS0010 этого недостаточно – документация требует минимум 500 мс. Если это исправление не внести, то и без того плохо отработанный контроллер будет «глючить» вплоть до полной неработоспособности: после включения вместо символов появятся произвольные картинки, они могут бегать по экрану и мерцать. Капризность дисплеев фирмы Winstar отмечали многие, но, к сожалению, доступную замену сыскать очень сложно.
Для увеличения задержки разыщите в папке libraries/LiquidCrystal файл LiquidCrystal.cpp . Первым делом сделайте его копию, сохранив ее, например, как LiquidCrystal.cpp.bak . Затем откройте его через Блокнот, и в тексте функции
void LiquidCrystal::begin найдите строку
delayMicroseconds(50000) ;
В оригинальном файле эта строка имеет номер 100. Измените число 50000 (50 мс) на 800000 (0,8 секунды) и сохраните файл. После этого нужно заново откомпилировать программы Arduino, применяющие эту библиотеку. В том числе можно это сделать и для старого типа контроллеров, если у вас такие программы имеются, – увеличение задержки при включении ничему не помешает.
Крупный недостаток этих дисплеев – ни в традиционном HD44780, ни в новом WS0010 не предусмотрено наличие аппаратного Reset . Потому при первом запуске после перепрограммирования вы, скорее всего, получите на дисплеях сплошной мусор. Кнопку Reset контроллера для перезапуска применять бессмысленно – дисплей‑то при этом не перезапускается, а устанавливается в непредсказуемое состояние. Обычно помогает перезапуск отключением питания – выдергивание USB‑кабеля с последующей вставкой сетевого адаптера вместо него.
Если полностью избавиться от мусора при включении станции все‑таки не удается (это, кроме всего прочего, зависит и от конкретного экземпляра индикатора), то поставьте на задней панели станции кнопку с двумя парами перекидных контактов, одной парой размыкающую линию питания индикатора при нажатии, а второй в это же время замыкающей на землю вывод Reset контроллера. При отладке все время дергать USB‑кабель неудобно, но в этом случае можно просто выдергивать проводок питания индикатора с последующим перезапуском контроллера кнопкой Reset на плате. Описанный в главе 21 графический дисплей MT‑12864J, у которого есть нормальный аппаратный перезапуск, таких сложностей не требует, – его вывод Reset просто соединяется с выводом Reset платы Arduino (как и показано на рис. 21.4).
* * *
Заметки на полях
Отмечу; что от одного «глюка» индикаторов WEH001602B мне так и не удалось избавиться: какую из двух строк в оператореsetCursor считать строкой 0, а какую строкой 1 – почему‑то это зависит от характера питания. При питании всей схемы от USB нулевой строкой преимущественно оказывается нижняя, а при питании от адаптера 7,5 В – всегда верхняя, что надо учитывать при программировании.
Дата добавления: 2016-05-11; просмотров: 2139;