Начиная с версии прошивки 519, модули MP712m Laurent-5 и MP718m Laurent-5G могут работать с внешним символьным LCD дисплеем для отображения на нем различной информации, в том числе, актуальных показаний различных датчиков и системных переменных. Рассмотрим в данной статье практический пример использования LCD в связке с Laurent-5. В частности, реализуем систему визуализации ряда настроек модуля, а также текущего состояния некоторых аппаратных ресурсов.
Начиная с версии прошивки 519, модули MP712m Laurent-5 и MP718m Laurent-5G могут работать с внешним символьным LCD дисплеем для отображения на нем различной информации, в том числе, актуальных показаний различных датчиков и системных переменных.
Рассмотрим в данной статье практический пример использования LCD в связке с Laurent-5. В частности, реализуем систему визуализации ряда настроек модуля, а также текущего состояния некоторых аппаратных ресурсов. Предусмотрим так же механическую кнопку для пользователя, с помощью которой он сможет «листать» страницы дисплея (переходить к другим блокам информации, т.к. все, что мы захотим визуализировать, едва ли поместится на одном экране).
Подключение LCD
Первым шагом подключим знакосинтезирующий 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 | Питание дисплея (+5 В) | 2 |
Используя пины штырькового разъема модуля, можно подключить и другие модели знакосинтезирующих дисплеев с паралельной шиной данных; главное проверить назначение контактов конкретного LCD. Например, на фото ниже показан подключенный дисплей 4 × 16 МЭЛТ MT-20S4A-2YLG
После подключения дисплея можно оперативно проверить его работоспособность через WEB интерфейс. Заходим в соответствующий раздел WEB:
По умолчанию модуль настроен на работу с дисплеем 2 × 16 (как раз наш случай). Если нет – следует указать актуальное разрешение используемого дисплея для корректной работы с ним.
Запишем простую строку данных, в частности, из примера. Все остальные настройки пока оставим как есть.
Помимо обычного текста, можно выводить и показания датчиков/ системных переменных с помощью динамических переменных.
Полный список всех динамических переменных, поддерживаемых модулем, можно найти в соответствующем документе Описание Ke-команд управления.
Например, на рисунке ниже выведем текущее время RTC на первую строку дисплея.
Виртуальные страницы
Однако, вернемся к «боевой» задаче. Необходимо на LCD экране выводить много разнообразной информации: настройки модуля, системные параметры, показания датчиков. Очевидно, что на одном экране в 2 строки и 16 символов такой объем не поместится.
Поэтому в модулях Laurent-5/5G предусмотрены виртуальные страницы дисплея. Необходимая информация сначала заполняется на виртуальную страницу. Это поле размером с физический экран хранится в оперативной памяти модуля. Затем та или иная страница отображается (переносится) на физический дисплей.
Предположим, что мы хотим отображать на дисплее следующие данные:
- Имя версии прошивки
- IP адрес модуля
- Текущее время
- Состояние всех реле
Пусть имя прошивки и IP будут размещены на первой и второй строках первой виртуальной страницы. Время и реле – на первой и второй строках второй виртуальной страницы. Итого, нам будут нужны две виртуальные страницы. Необходимо «сказать» об этом модулю. Это можно сделать через WEB интерфейс либо Ke-командой:
$KE,LCD,PAGE,SET,2
Полный список всех Ke-команд, поддерживаемых модулем, можно найти в соответствующем документе Описание Ke-команд управления.
ВАЖНЫЙ МОМЕНТ: необходимо, чтобы информация (текущее время, состояния реле и т.д.) динамически менялась на экране (отображалось бы актуальное текущее значение) силами самого модуля.
Тут нам понадобится система CAT – встроенная программируемая логика. Создадим в ней несколько событий по изменению интересующих нас параметров, а в качестве реакции будем выводить нужные данные на виртуальные страницы дисплея. Создание и управление CAT событиями можно удобно проводить в WEB интерфейсе модуля.
Для отрисовки информации, которая не изменяется (вернее, считывается единожды при старте модуля), такой как версия прошивки и начальный IP, воспользуемся CAT событием по системному времени (время с момента старта модуля).
В качестве условия укажем сработать событию, когда системное время будет равно 5 с. То есть когда с момента старта платы пройдет 5 с, это событие сработает (один раз).
Секцию дополнительных условий пропускаем. Настройки квот можно оставить по умолчанию. На следующем шаге – реакция. Задаем ее в виде списка Ke-команд. В частности, используя команду $KE,LCD,WR, запишем на первую виртуальную страницу информацию о версии прошивки (первая строка LCD, динамическая переменная ~FW~) и текущем IP адресе (вторая строка LCD, переменная ~IP~):
$KE,LCD,WR,1,L,C,1,FW: ~FW~
$KE,LCD,WR,1,L,C,2,~IP~
На последнем шаге можно дать удобное текстовое имя событию. После создания события оно появляется в списке в выключенном состоянии. Его следует включить с помощью соответствующей иконки-кнопки.
Для автоматического отображения изменяющегося времени, а также состояний реле, по аналогии воспользуемся событием CAT по системному времени, но срабатывать событие будет регулярно. То есть будем обновлять информацию на дисплее с тактом один раз в секунду.
При этом данные будем записывать уже на вторую виртуальную страницу. Информацию по времени на первую строку, сводное состояние всех реле (через динамическую переменную ~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 – включено). В данном случае третье реле включено, остальные выключены. Существуют также динамические переменные для отражения состояния каждого конкретного реле в отдельности.
Механическая кнопка
Доработаем немного систему: сделаем для пользователя возможность «листать» виртуальные страницы с помощью механической кнопки (как часто делается на промышленных приборах с небольшим 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 событий.
Послесловие
В качестве дальнейших шагов по развитию и наращиванию возможностей данной тестовой установки можно увеличивать количество виртуальных страниц для вывода большего объема различной информации. А также, например, добавить дополнительные механические кнопки – «перелистывание» в обратную сторону (актуально, если страниц много).