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