Вакуумно-люминесцентный индикатор (ВЛИ), или катодолюминесцентный индикатор (КЛИ) (vacuum fluorescent display (VFD) — электровакуумный прибор, элемент индикации, работающий по принципу электронной лампы.
ВЛИ могут быть сегментными, матричными, мнемоническими, комбинированными.
Вакуумно-люминесцентный индикатор представляет собой электровакуумный триод прямого накала с множеством покрытых люминофором анодов. Параметры лампы подобраны таким образом, чтобы она могла работать при низких анодных напряжениях — от 9 до 27 В.
VFD-дисплей FUTABA M202MD10D может отображать ASCII символs в 2 строки (20 знаков в 1 строке) каждый символ в виде матрицы 5х7 пикселей. Напряжение питания VFD-дисплея 5 В, но некоторые модели аналогичных дисплеев могут иметь питание от 5 до 15 В.
Управление VFD-дисплея осуществляется при помощи интерфейса UART, для этого используется библиотека SoftwareSerial позволяет реализовать последовательный интерфейс на любых других цифровых выводах Arduino с помощью программных средств, дублирующих функциональность UART. Библиотека позволяет программно создавать несколько последовательных портов, работающих на скорости до 115200 бод. Для устройств, работающих с инвертированным сигналом, в библиотеке предусмотрен соответствующий параметр, включающий инвертирование.
К сожалению мне не удалось найти документацию на VFD-дисплей FUTABA M202MD10D, поэтому часть информации взята с похожего VFD-дисплея.
Управление дисплеем состоит очень простое и состоит из нескольких регистров:
Ниже показан скетч демонстрирующий работу дисплея:
#include <SoftwareSerial.h> SoftwareSerial serial(3, 2);//RX,TX void setup() { serial.begin(9600); VFD_reset(); VFD_brig(1);// 0-5 } void loop() { VFD_cursor(0,0); VFD_print_str("RCL-RADIO.RU"); VFD_cursor(1,0); VFD_print_num(1234567890); VFD_cursor(1,12); VFD_print_float(1.2569,3); VFD_cursor(0,15); VFD_character(0x15, 0b011000100, 0b00111001, 0b11110111, 0b00001001, 0b00000000);// addr = 0x15-0x1E delay(200); } void VFD_reset(){serial.write(0x1F);} void VFD_clear(){serial.write(0x0D);} void VFD_cursor(byte st, byte sim){serial.write(0x10);serial.write(st*20+sim);} void VFD_print_str(char*data){serial.print(data);} void VFD_print_num(long data){serial.print(data);} void VFD_print_float(float data, byte z){serial.print(data,z);} void VFD_brig(byte br){ serial.write(0x04); switch(br){ case 0: serial.write(byte(0x00)); case 1: serial.write(0x20); case 2: serial.write(0x40); case 3: serial.write(0x60); case 4: serial.write(0x80); case 5: serial.write(0xFF); } } void VFD_character(byte addr, byte m1,byte m2, byte m3, byte m4, byte m5){ serial.write(0x03); serial.write(addr);// 0X15-0X1E serial.write(byte(m1)); serial.write(byte(m2)); serial.write(byte(m3)); serial.write(byte(m4)); serial.write(byte(m5)); serial.write(addr); }
В скетче используются несколько основных функций:
- VFD_reset() — рестарт, очистка дисплея
- VFD_clear() — очистка дисплея (функция не поддерживается M202MD10D)
- VFD_cursor(0,0) — устанавливает курсор в позицию (0 столбец, 0 строка)
- VFD_print_str() — вывод String
- VFD_print_num() — вывод числа long, int, byte
- VFD_print_float() — вывод числа float
- VFD_brig() — задает яркость дисплея (0-5) (функция не поддерживается M202MD10D)
- VFD_character() — вывод пользовательских символов, доступны адреса 0X15-0X1E
Вывод пользовательских символов имеет свою особенность в данном дисплее, одно знакоместо представляет собой матрицу 5х7 пикселей. В дисплеях LCD1602 для этого используется 8 байт по 5 бит (5х8 пикселей), но в дисплее M202MD10D (и аналогичных) для вывода пользовательского символа используется 5 байт по 8 бит, поэтому каждый байт (8 пикселей) содержит несколько (полных и неполных) строк.
Я не указываю распиновку подключения дисплея, она может отличаться у разных моделей, но она достаточно проста, это +5 В, GND, RX и TX.
При подключении дисплея учитывайте что ток потребления может достигать 1,3 А, поэтому питание платы Arduino и дисплея должны быть разделенными.