Как подключить дисплей HPDL-1414 к Arduino
Дисплей HPDL-1414 – это миниатюрный 4-символьный «умный» дисплей. Он имеет встроенную память для хранения набора предустановленных символов, встроенный декодер ASCII-кодов, а также необходимую «обвязку», т.е. готов для подключения прямо к Arduino. Изучим его и научимся управлять с помощью микроконтроллера Arduino.
Для работы нам понадобятся:
- Ардуино UNO (или совместимая плата);
- экран со светодиодами HPDL-1414;
- макетная плата;
- соединительные провода;
- персональный компьютер или ноутбук.
1Описание и подключение«умного» экрана HPDL-1414
Экран HPDL-1414 – это миниатюрный модуль размером 20×17.5 мм и высотой 6 мм без учёта высоты выводов. На экран одновременно можно выводить до 4-х символов. К недостаткам дисплея можно отнести то, что символы, которых нет в ПЗУ дисплея, вывести невозможно, т.е. произвольное управление сегментами дисплея не предусмотрено.
Высота каждого символа – 2.85 мм, ширина – 2.1 мм. Символ состоит из 16-ти сегментов и десятичной точки. Сегменты обозначаются латинскими буквами от A до M.
На боковой грани модуля, на которой расположен вывод 1, располагается маркировка вида HPDL 1414 YYWW Z. Здесь HPDL 1414 – название модуля; YYWW – это год и неделя изготовления, а Z – это категория интенсивности свечения.
Всего имеются 4 категории яркости:
Обозначение категории яркости | Яркость, мкКд |
---|---|
H | 2020…2630 |
I | 2630…3420 |
J | 3420…4200 |
K | 4200…5040 |
В соответствии со сказанным, дата изготовления приведённого на фотографии модуля – 41-я неделя 1999 года, и самая большая яркость свечения (категория K).
Модуль HPDL 1414 имеет 12 «ножек»-выводов. Первая ножка обозначена срезом на верхней продольной выступающей полоске. Назначение выводов следующее:
Номер вывода | Обозначение | Назначение |
---|---|---|
1 | D5 | Вход данных 5 |
2 | D4 | Вход данных 4 |
3 | WR# | Запись данных в выбранный разряд |
4 | A1 | Выбор разряда экрана 1 |
5 | A0 | Выбор разряда экрана 0 |
6 | Vdd | Питание, 4.5…5.5 В |
7 | GND | Земля |
8 | D0 | Вход данных 0 |
9 | D1 | Вход данных 1 |
10 | D2 | Вход данных 2 |
11 | D3 | Вход данных 3 |
12 | D6 | Вход данных 6 |
Выводы располагаются на корпусе модуля против часовой стрелки.
Напряжение питания экрана составляет от 4.5 до 5.5 В.
2Принципы работы с экраном HPDL-1414
Дисплей HPDL-1414 имеет встроенную память, в которой записаны 64 символа. Для вывода заданного символа на дисплей прежде всего необходимо с помощью линий адреса A0 и A1 выбрать один из четырёх разрядов экрана. И после этого выставить на линиях данных D0…D6 адрес ячейки памяти нужного символа в соответствии с приведённой таблицей.
Кстати, приведённая таблица представляет собой первые 64 печатных символа из таблицы символов ASCII. ASCII – это таблица, в которой в определённом стандартизированном порядке представлены распространённые печатные (и непечатные) символы.
Например, для вывода на экран HPDL-1414 символа "@" необходимо выставить на линии данных D0..D6 шестнадцатеричное число 0x40. В этом и заключается функциональность ASCII-декодера: он преобразует числовой код символа из таблицы ASCII в символ на экране.
Временная диаграмма передачи данных представлена ниже.
На диаграмме используются следующие обозначения.
Обозначение | Расшифровка | Назначение | Среднее значение, нс |
---|---|---|---|
tAS | Address Setup Time | Время выставления адреса | 115 |
tWD | Write Delay Time | Задержка записи | 15 |
tW | Write Time | Время записи | 100 |
tDS | Data Setup Time | Время установки данных | 60 |
tDH | Data Hold Time | Время удержания данных | 45 |
tAH | Address Hold Time | Время удержания адреса | 45 |
Согласно диаграмме, сначала следует выставить разряд символа экрана (от 0 до 3) на линиях A0 и A1, затем опустить строб записи данных WR#, затем выставить адрес символа согласно таблице ASCII на линиях D0..D6, а затем поднять строб WR#.
3Управление экраном HPDL-1414 с помощью Arduino
Теперь у нас есть все необходимые данные для работы с дисплеем 1414. Подключим его к Arduino вот по такой схеме.
И напишем первый скетч, в котором будем явно назначать для каждого разряда символ:
Простейший скетч для работы с экраном HPDL 1414 (разворачивается)
#define AD0 2 // пины установки разряда экрана HPDL 1414 #define AD1 3 #define WR 4 // пин разрешения записи const int D[]={5,6,7,8,9,10,11}; // номера пинов для D0..D6 void setup() { // задаём режимы работы выводов Arduino pinMode(AD0,OUTPUT); pinMode(AD1,OUTPUT); pinMode(WR,OUTPUT); for (int i=0; i<7; i++){ pinMode(D[i],OUTPUT); } digitalWrite(WR, HIGH); // ставим строб разрешения записи в исходное состояние // Выводим на экран HP1414 четыре символа: writeChar(3, 'A'); // переменная типа Char указывается в одинарных кавычках writeChar(2, 'A'); writeChar(1, 'V'); writeChar(0, 'E'); } void loop() { // ничего не делаем } // Выводит в заданный разряд экрана заданный символ void writeChar(int digit, unsigned char chr) { digitalWrite(AD0, 1 & digit); // выставляем младший разряд адреса digitalWrite(AD1, 1 & digit>>1); // выставляем старший разряд адреса digitalWrite(WR, LOW); // разрешаем запись данных int address = (int)chr; // переменная типа char хранит номер символа в таблице ASCII, // поэтому достаточно преобразовать его в int for (int i=0; i<7; i++) { digitalWrite(D[i], address>>i & 1); // поразрядно выставляем адрес символа на линии данных D0..D6 } digitalWrite(WR, HIGH); // запрещаем запись данных, символ выводится на экран }
Получим такой результат:
Тут нужно дать несколько пояснений. В функции writeChar() имеется строка int address = (int)chr, которая преобразует символ типа Char в целое число. Дело в том, что переменные типа Char в Arduino сами по себе хранят численные значения символов согласно таблице ASCII. Поэтому достаточно преобразовать переменную типа Char в Integer, чтобы узнать её адрес в таблице ASCII. Например, символ "A" при преобразовании в Integer будет 65 или 0x41. А это как раз то, что нам и нужно выставить на линиях D0..D6 экрана HPDL 1414.
Далее с помощью операции сдвига >> i мы сдвигаем адрес символа на i разрядов, берём младший разряд сдвинутого числа с помощью операции логического умножения & 1. Таким образом каждый разряд выставляем на соответствующих линиях данных D0..D6.
Операция логическое «И» называется конъюнкция или логическое умножение.
4Вывод бегущей строки на экран HPDL-1414 с помощью Arduino
Теперь немного усложним задачу: будем выводить на экран 1414 бегущую строку. По сути, у нас уже есть всё необходимое для этого. Добавим лишь одну функцию, которая будет разбивать переданную строку на подстроки и выводить их со сдвигом на экран.
Скетч для вывода бегущей строки на экран HPDL 1414 (разворачивается)
void writeString(String s) { s.toUpperCase(); // т.к. в ПЗУ символы только в верхнем регистре, // то переводим строку в верхний регистр int t = 150; // длительность задержки, мс int position = 0; // текущая позиция в строке for (int i=0; i<s.length()+4; i++) { // выводим по 4 символа строки for (int dig=0; dig<4; dig++) { // один символ на один разряд индикатора writeChar(3-dig, s.charAt(position+dig)); } position += 1; // смещаемся на 1 позицию в строке delay(t); // задержка регулирует скорость бегущей строки } }
Использовать эту функцию крайне просто:
writeString("hello, soltau.ru!");
Если добавить этот вызов в функцию loop(), то получим бесконечно бегущую строку на экране.
А чтобы строка как бы «выезжала» с правого края дисплея, добавим перед циклом for в предыдущем скетче в функцию writeString() вот что:
// выводим первые 4 символа строки: writeChar(0, s.charAt(0)); delay(t); writeChar(1, s.charAt(0)); writeChar(0, s.charAt(1)); delay(t); writeChar(2, s.charAt(0)); writeChar(1, s.charAt(1)); writeChar(0, s.charAt(2)); delay(t);
Конечно, использовать 7 выводов для управления дисплеем весьма расточительно. Чтобы сэкономить выводы Arduino можно использовать сдвиговый регистр (шифтер). Он преобразует последовательный интерфейс SPI в параллельный, и с его помощью можно сократить число задействованных выводов до 4-х. Ну и ещё 2 вывода для выбора разряда дисплея. Всего будет задействовано 6 выводов вместо текущих 9-ти. Подключение сдвигового регистра 74HC595 мы подробно обсуждали здесь. Можно воспользоваться и другим сдвиговым регистром, на ваше усмотрение.
Download attachments:
- Техническое описание дисплея HPDL 1414 (807 Downloads)
Поблагодарить автора:
Поделиться
2 comments
-
Алексей Суббота, 13 Февраль 2021 19:25 Ссылка на комментарий
Здравствуйте, с статьи не очень понятно для меня, куда подключать 3-ю ногу (WR) (arduino nano)?
-
aave1 Воскреснье, 14 Февраль 2021 00:47 Ссылка на комментарий
Алексей, ногу WR дисплея в данном примере подключаем к выводу D4 Arduino. Но в принципе, можно подключить к любому другому цифровому выводу, главное прописать это в скетче. В строчке "#define WR 4" скетча мы как раз назначаем ноге 4 Arduino функцию управления разрешением записи WR экрана 1414.