Рейтинг@Mail.ru

Как подключить дисплей HPDL-1414 к Arduino

aave автор: aave
2 comments Arduino
Print Friendly, PDF & Email

Дисплей HPDL-1414 – это миниатюрный 4-символьный «умный» дисплей. Он имеет встроенную память для хранения набора предустановленных символов, встроенный декодер ASCII-кодов, а также необходимую «обвязку», т.е. готов для подключения прямо к Arduino. Изучим его и научимся управлять с помощью микроконтроллера Arduino.

Для работы нам понадобятся:

1Описание и подключение«умного» экрана HPDL-1414

Экран HPDL-1414 – это миниатюрный модуль размером 20×17.5 мм и высотой 6 мм без учёта высоты выводов. На экран одновременно можно выводить до 4-х символов. К недостаткам дисплея можно отнести то, что символы, которых нет в ПЗУ дисплея, вывести невозможно, т.е. произвольное управление сегментами дисплея не предусмотрено.

Размеры экрана HPDL 1414
Размеры экрана HPDL 1414

Высота каждого символа – 2.85 мм, ширина – 2.1 мм. Символ состоит из 16-ти сегментов и десятичной точки. Сегменты обозначаются латинскими буквами от A до M.

Сегменты и размеры символа экрана HPDL 1414
Сегменты и размеры символа экрана HPDL 1414

На боковой грани модуля, на которой расположен вывод 1, располагается маркировка вида HPDL 1414 YYWW Z. Здесь HPDL 1414 – название модуля; YYWW – это год и неделя изготовления, а Z – это категория интенсивности свечения.

Буквенно-цифровая маркировка экрана HPDL 1414
Буквенно-цифровая маркировка экрана HPDL 1414

Всего имеются 4 категории яркости:

Категории яркости свечения
Обозначение категории яркостиЯркость, мкКд
H2020…2630
I2630…3420
J3420…4200
K4200…5040

В соответствии со сказанным, дата изготовления приведённого на фотографии модуля – 41-я неделя 1999 года, и самая большая яркость свечения (категория K).

Модуль HPDL 1414 имеет 12 «ножек»-выводов. Первая ножка обозначена срезом на верхней продольной выступающей полоске. Назначение выводов следующее:

Назначение выводов экрана HPDL-1414
Номер выводаОбозначениеНазначение
1D5Вход данных 5
2D4Вход данных 4
3WR#Запись данных в выбранный разряд
4A1Выбор разряда экрана 1
5A0Выбор разряда экрана 0
6VddПитание, 4.5…5.5 В
7GNDЗемля
8D0Вход данных 0
9D1Вход данных 1
10D2Вход данных 2
11D3Вход данных 3
12D6Вход данных 6

Выводы располагаются на корпусе модуля против часовой стрелки.

Назначение выводов экрана HPDL 1414
Назначение выводов экрана HPDL 1414

Напряжение питания экрана составляет от 4.5 до 5.5 В.

2Принципы работы с экраном HPDL-1414

Дисплей HPDL-1414 имеет встроенную память, в которой записаны 64 символа. Для вывода заданного символа на дисплей прежде всего необходимо с помощью линий адреса A0 и A1 выбрать один из четырёх разрядов экрана. И после этого выставить на линиях данных D0…D6 адрес ячейки памяти нужного символа в соответствии с приведённой таблицей.

Таблица символов экрана HPDL 1414
Таблица символов экрана HPDL 1414

Кстати, приведённая таблица представляет собой первые 64 печатных символа из таблицы символов ASCII. ASCII – это таблица, в которой в определённом стандартизированном порядке представлены распространённые печатные (и непечатные) символы.

Таблица символов ASCII
Таблица символов ASCII. Розовым цветом выделены непечатные символы, голубым – символы, которые имеются в ПЗУ экрана 1414.

Например, для вывода на экран HPDL-1414 символа "@" необходимо выставить на линии данных D0..D6 шестнадцатеричное число 0x40. В этом и заключается функциональность ASCII-декодера: он преобразует числовой код символа из таблицы ASCII в символ на экране.

Временная диаграмма передачи данных представлена ниже.

Временная диаграмма для передачи данных экрана HPDL 1414
Временная диаграмма для передачи данных экрана HPDL 1414

На диаграмме используются следующие обозначения.

ОбозначениеРасшифровкаНазначениеСреднее значение, нс
tASAddress Setup TimeВремя выставления адреса115
tWDWrite Delay TimeЗадержка записи15
tWWrite TimeВремя записи100
tDSData Setup TimeВремя установки данных60
tDHData Hold TimeВремя удержания данных45
tAHAddress Hold TimeВремя удержания адреса45

Согласно диаграмме, сначала следует выставить разряд символа экрана (от 0 до 3) на линиях A0 и A1, затем опустить строб записи данных WR#, затем выставить адрес символа согласно таблице ASCII на линиях D0..D6, а затем поднять строб WR#.

3Управление экраном HPDL-1414 с помощью Arduino

Теперь у нас есть все необходимые данные для работы с дисплеем 1414. Подключим его к Arduino вот по такой схеме.

Схема подключения экрана HPDL 1414 к Arduino
Схема подключения экрана HPDL 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); // запрещаем запись данных, символ выводится на экран
}

Получим такой результат:

Первый тест экрана HPDL 1414
Первый тест экрана HPDL 1414

Тут нужно дать несколько пояснений. В функции 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 мы подробно обсуждали здесь. Можно воспользоваться и другим сдвиговым регистром, на ваше усмотрение.

Last modified onВторник, 09 Январь 2024 19:31 Read 6172 times

Поблагодарить автора:

Поделиться

Print Friendly, PDF & Email

2 comments

  • Алексей
    Алексей Суббота, 13 Февраль 2021 19:25 Ссылка на комментарий

    Здравствуйте, с статьи не очень понятно для меня, куда подключать 3-ю ногу (WR) (arduino nano)?

  • aave1
    aave1 Воскреснье, 14 Февраль 2021 00:47 Ссылка на комментарий

    Алексей, ногу WR дисплея в данном примере подключаем к выводу D4 Arduino. Но в принципе, можно подключить к любому другому цифровому выводу, главное прописать это в скетче. В строчке "#define WR 4" скетча мы как раз назначаем ноге 4 Arduino функцию управления разрешением записи WR экрана 1414.

Leave a comment