Подключаем «отечественный» LCD 16×2 MT-16S2S по SPI

в 9:04, , рубрики: lcd 1602, SPI, Железо, Программирование, программирование микроконтроллеров, Электроника для начинающих

Подключаем «отечественный» LCD 16x2 MT-16S2S по SPI - 1

Тенденция импортозамещения подтолкнула протестировать символьный LCD индикатор от фирмы МЭЛТ. Мы взяли МТ-16S2S на ST7070. В некотором роде это аналог широко известного WH-1602 на 44780. А еще он поддерживает SPI-режим.

МЭЛТ кроме того собирает дисплеи и на отечественном контроллере КБ1013ВГ6 от Интеграла. У него есть отличие в в работе в 4-битном режиме от ставшего уже стандартом 44780.

На сайте производителя есть пример кода для работы в разных режимах. Но написан он на ассемблере и под абстрактную платформу в вакууме. Переделывать его на STM – все равно, что писать заново. Опыт использования готовых библиотек даже для распространенного 44780 я тоже не могу назвать положительным. Их приходится долго править под нужную платформу и модель контроллера. И в большинстве из них используется функция задержки под AVR, которой «почему-то» не предусмотрено для STM. И даже то, что запустилось, работает из рук вон плохо, то выводя невесть что, то зависая. Поэтому было решено написать свою собственную библиотеку.

Кроме того у МТ-16S2S есть еще одна особенность: SPI-интерфейс, который позволяет сократить число используеых ножек контроллера до 4. Так что вывод будет организован именно через SPI.

Подключаем «отечественный» LCD 16x2 MT-16S2S по SPI - 2

Система команд описана довольно подробно. Вообще, во всей теперешней ситуации, когда отечественной электроники в быту почти нет, очень радует, хотя и непривычно, читать описание микросхем и прочих изделий на русском языке (не переведенном с английского или китайского вроде «Бальзам тигр белый капли смерть строительный белок»). Правда, иногда попадаются такие перлы, что думаешь «лучше бы на английском». Но тут с этим все в порядке.

Подключаем «отечественный» LCD 16x2 MT-16S2S по SPI - 3

Подключение почти стандартное. VCC, E, D0-D4 на плюс питания, A0, GND, R/W и PSB на землю; К контроллеру подключаются: D5– к CS, D6– к SCK, D7–к MOSI, XRES– к любому GPIO. Я подключил к MISO, т.к. все равно управляю им программно. На сайте в описании, кстати, приведена неправильная схема. Указано, что D5 подтягивается к плюсу питания, но это CS. На форуме написали, что знают об этом, но пока ничего не исправлено.

Выводы для подсветки можно оставить свободными, но лучше, конечно, работать с подсветкой, а для этого подключить анод через резистор 10-30 Ом к питанию, а катод – к земле. Вывод для управления контрастностью, как ни странно, на 5-вольтовом индикаторе ничем не управляет. Его я просто оставил висеть в воздухе.

Еще одной интересной особенностью является наличие двух страниц знакогенератора. Благодаря этому можно вывести на дисплей огромное количество неведомой фигни самых разнообразных символов.

Подключаем «отечественный» LCD 16x2 MT-16S2S по SPI - 4

Подключаем «отечественный» LCD 16x2 MT-16S2S по SPI - 5

Но вот если вы выбрали «отечественный» дисплей для работы с кириллицей, вас ждет сюрприз. Русские буквы, не имеющие аналогов в латинице, расположены на первой странице. А цифры и латиница – на нулевой. И чтобы вывести их вместе, придется переключаться между страницами. Так что никакого вывода строки целиком не получится.

В этом отношении дисплей от Winstar по-удобнее. Пусть у него не так много символов, зато они на одной странице.

Подключаем «отечественный» LCD 16x2 MT-16S2S по SPI - 6

А вот 90% знакогенератора MT-16S2S русскому человеку не понадобятся. Еще одна неприятность для программиста – обозначение в даташите координат символов в таблице единичками и ноликами по полубайту. Еще веселее обозначать их H и L. То есть номер символа будет, например, 1111+1101 или HHHH+HHLH.

Почему бы не использовать шестнадцатеричный код 0xFD, удобный для разработчика? И ведь на некоторые дисплеи такие таблицы есть. Неужели так трудно сделать удобную координатную сетку?

Теперь о библиотеке. К функциональности были следущие требования:

1. Вывод символа из таблицы в произвольную позицию;
2. Вывод строки текста в произвольнцю позицию;
3. Запись в память собственного символа;
4. Очистка дисплея, включение и выключение курсора, его сдвиг, сдвиг области отображения и прочие настройки индикатора.

Все это удалось реализовать довольно быстро. Но все же напрягает необходимость постоянного переключения между страницами знакогенератора при использовании кириллицы. Саму библиотеку не выкладываю, потому что она сделана «для себя». Со всеми недочетами и костылями и под конкретный чип: с зашитыми портами и частотами (так как целью не было создание коммерческой версии с карточными играми и женскими особями, настройки портов, SPI и задержек прописаны прямо в самих функциях, в зависимости от того, к какому контроллеру и к какому SPI подключается дисплей). В дальнейшем планируется ее доработка.

Теперь об опыте эксплуатации дисплея. Он был испытан и стабильно работает в диапазоне температур от -20°С до +60°С. Правда, при -20°С начинает подтормаживать при смене изображения. Но тут уж ничего не поделаешь. Только переходить на другой тип индикатора.

В целом — впечатление положительное. Несколько мешают мелкие недочеты в описании на дисплей и отсутствие нормальных примеров кода. В остальном — неплохо. Даже цена не выше чем у Winstar-овского аналога WH-1602.

Автор: REPISOT

Источник

Поделиться новостью

* - обязательные к заполнению поля