ЖК-модуль с контроллером HT1621 состоит из 6-и разрядов (7 сегментов) и дополнительно содержит индикатор батареи. Управление индикатора осуществляется по шине 3-Wire.
Подключение индикатора к плате Arduino Nano достаточно простое, индикатор содержит всего 5 контактов (или 6, дополнительный контакт может быть для отдельного питания подсветки). Три контакта эта шина управления CS WR Data, а два остальных это питание GND и VCC (5 В).
Для поддержки ЖК-модуля на базе платформы Arduino имеются несколько библиотек, одна из них это библиотека HT1621. Библиотека достаточно проста в использовании, поддерживает вывод на индикатор цифр и различных символов, так же имеет отдельную функцию для управления индикатором батареи.
Ниже показан скетч с простым примером использования библиотеки:
#include <HT1621.h> // http://rcl-radio.ru/wp-content/uploads/2024/06/HT1621-2.1.2.zip
HT1621 lcd;
void setup(){
lcd.begin(6, 7, 8); // (cs, wr, Data)
lcd.backlight();
lcd.clear();
lcd.print("HELLO");
delay(5000);
lcd.setBatteryLevel(3);
lcd.print("HT1621");
delay(5000);
lcd.clear();
}
void loop(){
lcd.print(millis()/1000.0, 1);
delay(100);
}
Так же библиотека содержит несколько примеров которые Вы можете использовать для Ваших проектов.
Контроллер HT1621 может применяться с различными ЖК индикаторами, следует учитывать, что все ЖК индикаторы разные, у них может быть разное кол-во выводов, кол-во сегментов, порядковый номер сегментов, такие индикаторы могут содержать сегментные группы в виде матрицы для вывода символов или содержать определенное кол-во сегментов в группе для вывода цифр или символов (7 сегментов или 16 сегментов). Поэтому предложенная библиотека подходит только конкретно для этого ЖК-модуля. Если Вам необходимо использовать контроллер HT1621 но с другим ЖК-индикатором, то необходимо понять как работает данный контроллер хотя бы на примере выше описанного ЖК-модуля, но без применения библиотек.
Как работает ЖК-индикатор можно узнать из http://rcl-radio.ru/?p=131856.
Описание контроллера HT1621:
- Напряжение питания: 2.4…5.2 В
- Встроенный 256 kHz RC генератор
- Работа с внешним 32.768 kHz кварцем или от источника частоты 256 kHz
- Выбор напряжения смещения (bias) 1/2 или 1/3 и выбор продолжительности работы 1/2, 1/3 или 1/4 (duty)1/2 или 1/3 bias — уровень напряжения
1/2, 1/3 или 1/4 duty — кол-во COM линий - Внутренний формирователь основной частоты
- Две частоты работы драйвера звонка (2kHz/4kHz)
- Режим пониженного энергопотребления
- Внутренний генератор и WDT
- Вывод основной частоты или вывод переполнения WDT
- 8 видов источников для получения основной частоты и для WDT
- 32×4 LCD драйвер
- Встроенная оперативная память дисплея 32х4
- Трехпроводный, последовательный интерфейс
- Встроенное формирование частоты возбуждение LCD
- Программное конфигурирование
- Два режима работы: c данными и с командами
- Операции обращения к памяти с автоинкрементом
- Три режима доступа к данным
- Вывод VLCD для настройки рабочего напряжения LCD
Память контроллера содержит 32 байта по 4-е бита, что дает возможность управления 128-ю сегментами ЖК-индикатора.
Как видно на скриншоте, каждый бит отвечает за одну COM линию, а один адрес отвечает за один вывод линии сегментов. Поэтому контроллер содержит 4 вывода под COM линию и 32 вывода под линию сегментов. Дополнительно есть выводы под подключение пьезоизлучателя и подключение кварцевого резонатора, в данном ЖК-модуле кварцевый резонатор не используется, используется внутренняя тактовая частота 256 кГц.
В данной ЖК-модуле который содержит 6 разрядов по 7 сегментов плюс запятые и индикатор батареи, подключение индикатора к ЖК-контроллеру достаточно упорядочено, а именно на каждый разряд отводится 2 адреса памяти и используются все 4-е COM линии. Адреса 0:1 (из адресов 0:31) отвечают только за самый младший разряд индикатора, а адреса 10:11 отвечают за самый старший разряд индикатора, при этом в разрядах где-то есть запятая, а где-то вместо запятой происходит управление индикатором батареи.
Для запуска ЖК-модуля используется две основные команды, это команда конфигурации (код 100) и команда записи памяти (код 101).
Отправка кода 100
Коды конфигурации необходимы для корректного запуска контроллера, в даташите имеется подробный список необходимых команд, но для запуска данного модуля необходимо всего 4-е команды:
- data_100(HT1621_SYS_EN); // включение внутреннего тактового генератора
- data_100(HT1621_BIAS); // использует 1/3 bias (3 уровня напряжений) и 4-е COM линии
- data_100(HT1621_RC256); // Внутренняя тактовая частота RC-генератора 256 кГц
- data_100(HT1621_LCD_ON); // включаем индикатор
Функция отправки кода 100
void data_100(int data){
digitalWrite(LCD_CS,LOW);
for(int i = 2; i >=0; i--){
digitalWrite(LCD_WR,LOW);delayMicroseconds(10);
digitalWrite(LCD_DATA, (0b100 >> i) & 1);
digitalWrite(LCD_WR,HIGH);delayMicroseconds(10);
}
for(int i = 8; i >=0; i--){
digitalWrite(LCD_WR,LOW);delayMicroseconds(10);
digitalWrite(LCD_DATA, (data >> i) & 1);
digitalWrite(LCD_WR,HIGH);delayMicroseconds(10);
}
delayMicroseconds(10);digitalWrite(LCD_CS,HIGH);
delayMicroseconds(10);digitalWrite(LCD_WR,LOW); delayMicroseconds(10);
}
Байт отправки кода 100 содержит двоичное число 100 и 9-ь бит кода команды.
Отправка кода 101
Код команды 101 (отправка данных в память) содержит двоичное число 101, адрес памяти А5:А0 и данные COM линии D0:D3.
Функция отправки кода 101
void data_101(int addr, int data){
digitalWrite(LCD_CS,LOW);
for(int i = 2; i >=0; i--){
digitalWrite(LCD_WR,LOW);delayMicroseconds(10);
digitalWrite(LCD_DATA, (0b101 >> i) & 1);
digitalWrite(LCD_WR,HIGH);delayMicroseconds(10);
}
for(int i = 5; i >=0; i--){
digitalWrite(LCD_WR,LOW);delayMicroseconds(10);
digitalWrite(LCD_DATA, (addr >> i) & 1);
digitalWrite(LCD_WR,HIGH);delayMicroseconds(10);
}
for(int i = 0; i <=3; i++){
digitalWrite(LCD_WR,LOW);delayMicroseconds(10);
digitalWrite(LCD_DATA, (data >> i) & 1);
digitalWrite(LCD_WR,HIGH);delayMicroseconds(10);
}
delayMicroseconds(10);digitalWrite(LCD_CS,HIGH);
delayMicroseconds(10);digitalWrite(LCD_WR,LOW);
}
Если для примера отправить две команды записи памяти:
data_101(0,0b0110);
data_101(1,0b1100);
то на индикаторе в самом младшем разряде загорится цифра 4, так как каждый бит отправляемый в память отвечает за свой сегмент индикатора.
Ниже показано распределение бит по сегментам:
data_101(0,0bABC DP);
data_101(1,0bFGED);
Как видно адрес 0 отвечает за сегменты ABC и dp, а адрес памяти 1 за сегменты FGED.
Ниже показан простой пример управления ЖК-индикатором без использования библиотек, это код поддерживает вывод цифр, добавить различные символы по примеру кода вывода цифр достаточно просто.
Основная функция для вывода цифр и символов:
print_lcd(n, m, dp);
где:
n — это номер разряда, m — выводимая цифра или код символа(например код 11 выведет знак «-«), dp — выводит запятую или управляет индикатором батареи.
Используя этот пример запуска ЖК-модуля на HT1621 Вы можете запустить любой другой ЖК-индикатор который использует контроллер HT1621.