Статьи / KA057 /
Laurent-5/5G: Пример работы с LCD
§ 57. Laurent-5/5G: Пример работы с LCD
|
Дмитрий Иванов, 06 Августа 2021
|
Начиная с версии прошивки 519, модули Laurent-5 и Laurent-5G могут работать с внешним
символьным LCD дисплеем для отображения на нем различной информации в том
числе актуальных показаний различных датчиков и системных переменных.
Рассмотрим в данной статье практический пример использования LCD в связке с Laurent-5.
В частности, реализуем систему визуализации ряда настроек модуля а так же текущего состояния некоторых аппаратных ресурсов.
Предусмотрим так же механическую кнопку для пользоваля с помощтю которой он сможет "листать" страницы дисплея
(переходить к другим блокам информации т.к. все что мы захотим визуализировать едва ли поместится на одном экране).
Первым шагом подключим знакосинтезирующий LCD дисплей к модулю. Будем использовать символьный дисплей с двумя строками по 16 символов в каждой строке.
Конкретная модель - МЭЛТ МТ-16S2H-2YLG.
Можно так же использовать дисплеи с другим разрешением или других производителей, например, WinSTAR.
Дисплей подключается в четырех-битном режиме шины данных с "штырьковому" разъему на лицевой стороне платы.
Схема подключений линий штырькового разъема модуля и LCD дисплея МЭЛТ МТ-16S2H-2YLG представлены на иллюстрации ниже.

Контакт “штырькового” разъема модуля |
Имя линии |
Описание |
Номер контакта MT-16S2H-2YLG |
11 |
D7 |
Шина данных LCD дисплея (страший бит в 4-х битом режиме передачи данных) |
14 |
12 |
D6 |
Шина данных LCD дисплея |
13 |
13 |
D5 |
Шина данных LCD дисплея |
12 |
14 |
D4 |
Шина данных LCD дисплея (младший бит в 4-х битом режиме передачи данных) |
11 |
15 |
E |
Сигнал разрешения обращений к LCD дисплею (а также строб данных) |
6 |
16 |
RW |
Выбор режима записи или чтения данных по шине LCD дисплея |
5 |
17 |
A |
Адресный сигнал LCD дисплея — выбор между передачей данных и команд управления |
4 |
18 |
GND |
“Земля” |
1 |
19 |
+5 |
Питание дисплея (+5V) |
2 |
Используя пины штырькового разъема модуля можно подключить и другие модели знакосинтезирующих дисплеев с
паралельной шиной данных - главное проверить назначение контактов конкретного LCD.
Например, на фото ниже показан подключенный дисплей 4 x 16 МЭЛТ MT-20S4A-2YLG

После подключения дисплея можно оперативно проверить его работоспособность через WEB интерфейс. Заходим в соответствующий раздел WEB:

По умолчанию, модуль настроен на работу с дисплеем 2x16 (как раз наш случай).
Если нет - следует указать актуальное разрешение используемого дисплея для корркетной работы с ним.

Запишем простую строку данных, в частности, из примера. Все остальные настройки пока оставим как есть.


Помимо обычного текста, можно выводить и показания датчиков / системных переменных с помощью динамических переменных.
Например, на рисунке ниже выведем текущее время RTC на первую строку дисплея.


Однако, вернемся к "боевой" задаче. Необходимо на LCD экране выводить много разнообразной
информации: настройки модуля, системные параметры, показания датчиков. Очевидно, что на одном экране в 2 строки и 16 символов такой объем не поместится.
Поэтому, в модулях Laurent-5 / 5G предусмотрены виртуальные страницы дисплея. Необходимая информация сначала
заполняется на виртуальную страницу. Это поле размером с физический экран хранится в оперативной памяти модуля.
Затем та или иная страница отображается (переносится) на физический дисплей.
Предположим, что мы хотим отображать на дисплее следующие данные:
- Имя версии прошивки
- IP адрес модуля
- Текущее время
- Состояние всех реле
Пусть имя прошивки и IP будут размещены на 1-ой и 2-ой строках первой виртуальной страницы.
Время и реле - 1 и 2 строках второй виртуальной страницы.
Итого, нам будут нужны две виртуальные страницы. Необходимо "сказать" об этом модулю. Это можно сделать через WEB интерфейс либо Ke-командой:
$KE,LCD,PAGE,SET,2
ВАЖНЫЙ МОМЕНТ: необходимо что бы информация (текущее время, состояния реле и т.д.) динамически менялись на экране
(отрисовыввлось бы актуальное текущее значение) силами самого модуля.
Тут нам понадобится система CAT - встроенная программируемая логика. Создадим в ней несколько событий по изменению интересующих
нас параметров а в качестве реакции будем выводить нужные данные на виртуальные страницы дисплея.
Создание и управление CAT событиями можно удобно проводить в WEB интерфейсе модуля.

Для отрисовки информации которая не изменяется (вернее, считывается единожды при старте модуля) такая как версия прошивки и начальный IP
воспользуемся CAT событием по системному времени (время с момента старта модуля).

В качестве условия укажем сработать событию когда системное время будет равно 5 сек. Т.е. когда с момента старта платы пройдет 5 сек - это событие сработает (один раз).

Секцию дополнительных условий пропускаем. Настройки квот можно оставить по умолчанию. На следующем шаге - реакция. Задаем ее в виде списка Ke-команд.
В частности, используя команду $KE,LCD,WR запишем на первую виртуальную страницу информацию о версии прошивки (1-я строка LCD, динамическая переменная ~FW~)
и текущем IP адресе (2-я строка LCD, переменная ~IP~):
$KE,LCD,WR,1,L,C,1,FW: ~FW~
$KE,LCD,WR,1,L,C,2,~IP~

На последнем шаге можно дать удобное текстовое имя событию. После создания события оно появляется в списке в выключенном состоянии.
Его следует включить с помощью соответствующей иконки-кнопки.

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

При этом, данные будем записывать уже на вторую виртуальную страницу.
Информацию по времени на 1-ую строку, сводное состояние всех реле (через динамическую переменную ~RR~) - на вторую строку.

KE-команды для удобства копирования:
$KE,LCD,WR,2,L,C,1,Time: ~TM~
$KE,LCD,WR,2,L,C,2,Rele: ~RR~
В итоге события системы CAT будут выглдеть примерно следующим образом:

Теперь мы можем "перелистывать" виртуальные страницы на дисплее используя WEB интерфейс (кнопки Предыдущая, Следующая):

Либо используя соответствующие Ke-команды (переход: на конкретную страниу под номером N, следующую, предыдущую):
$KE,LCD,PG,SET
$KE,LCD,PG,NEXT
$KE,LCD,PG,PREV
Если перейти на первую страницу, то увидим, например, следующие:

А если перейти на вторую страницу - то увидим "тикающее" время и сводную строку состояний
всех реле модуля (0 - выключено, 1 - включено). В данном случае, 3-е реле включено, остальные выключены.
Существуют так же динамические переменные для отражения состояния каждого конкретного реле в отдельности.

Доработаем немного систему - сделаем для пользователя возможность "листать" виртуальные страницы с помощью механической кнопки
(как часто делается на промышленных приборах с небольшим LCD дисплеем - есть кнопки вперед / назад, выход в гланое меню и т.д.).
Сейчас сделаем только одну кнопку - листание виртуальных страниц в одну сторону.
Будем использовать линию общего назначения IO_1 настроенную "на вход" для обработки нажатия механической кнопки.
По умолчанию, линия IO настроена на "выход". Настроим линию "на вход", например, в WEB интерфейсе:

На странице линий IO отражен факт того что линия IO_1 сейчас настроена на "выход" ("стрелка" слева на право, текст OUT).
Следует нажать на стрелочку что бы перевести ее на "вход".

Теперь линия переведена в режим "на вход" (т.е. мы сможем определять какой уровень сигнала на ней установлен "снаружи" модуля - низкий или высокий).
Так же видим желтый индикатор статуса линии говорящий о том что на линии сейчас высокий уровень напряжения.

Начиная с версии прошивки 519 линии IO в режиме "на вход" автоматически поддягиваются к уровню +3.3 В (pull-up)
что бы избежать ложных срабатываний линии из-за наводок если она не подключена к источнику сигнала ("висит в воздухе").
При настройке линии "на выход" подтяжка автоматически отключается.

Процедуру изменения настройки линии можно так же выполнить через Ke-команду:
$KE,IOD,SET,1,1
Добавим терерь к линии IO_1 механическую кнопку. Если кнопка нажата - на линии IO_1 будет низкий уровень сигнала ("посажена" на землю).
Если кнопка не нажата - на линии будет высокий уровень из-за описанной выше внутренний поддяжки к +3.3 В.

Свяжем событие нажатия на кнопку с переходом на следуюущиую виртуальную страницу дисплея.
Создадим новое CAT событие по изменению уровня сигнала входной IO линии.

Настроим событие реагировать на переход уровня на линии IO_1 с высокого (кнопка не нажата) на низкий (кнопка зажата).

Секцию дополнительных условий пропускаем. Настройки квот можно оставить по умолчанию. На следующем шаге - реакция.
Задаем ее в виде списка Ke-команд. Используем команду $KE,LCD,PG,NEXT которая переносит содержимое
следующей виртуальной страницы на физический дисплей. При достижении последней страницы (в нашем случае у нас их всего две) -
будет осуществлен переход на первую страницу (зацикливание).
$KE,LCD,PG,NEXT

В итоге, созданное CAT событие по нажатию кнопки подключенной к линии IO_1 может выглядеть
следующим образом (необходимо включить событие т.к. по умолчанию после создания оно будет выключено).

Теперь, если нажать на кнопку - на LCD дисплее будет отображаться следующая виртуальная
страница со своим набором информации, обновляемой в режиме реального времени с помощью других CAT событий.
В качестве дальнейших шагов по развитию и наращиванию возможностей данной тестовой установки можно увеличивать кол-во
виртуальных странц для вывода большего объема различной информации.
А так же, например, добавить дополнительные механические кнопки - "перелистывание" в обратную сторону (актуально если страниц много).
© Дмитрий Иванов
06 Августа 2021 года
http://www.kernelchip.ru