Когда-то вакуумно-люминесцентные индикаторы создавались как альтернатива газоразрядным, а также в целях загрузить производство электроламповых заводов, так как в те времена лампы уже начали терять актуальность и на их место пришли полупроводники.

Прожив долгую 60-летнюю историю, ВЛИ уходят в небытие — оставшиеся в живых производители уже сообщили о том, что жизненный цикл этих приборов окончен и пора переходить на новые технологии.

Но ни один современный дисплей не способен передать это завораживающее бирюзовое сияние возбужденного люминофора, находящегося под воздействием электронной бомбардировки. 

Про один из таких дисплеев, изготовленных по этой технологии и будет рассказано в этой статье, а именно про модуль Futaba GP1160A02A.

Эта статья не будет про подключение этого дисплея к какой-нибудь “ардуине” стандартными способами. Это слишком просто и скучно. Речь пойдет про обход ограничений, наложенных производителем, и попытки выжать из этого дисплея всё, что позволяет технология.


Посмотрим, что представляет из себя и что может этот дисплейный модуль "из коробки".

На плате модуле располагается графический вакуумно-люминесцентный индикатор (далее ВЛИ) разрешением 256х64 пикселей, достаточно крупный по размерам — отображаемая область 163.69x38.25 мм. Общий размер модуля 220x60 мм, вес 240 гр.

Модуль управляется по RS-232 при помощи ESC-последовательностей. Может работать как в графическом, так и в текстовом режимах. Имеет встроенные шрифты разных размеров и начертаний, поддерживает загрузку пользовательских символов. Питается от 5 Вольт, так как на плате распаян преобразователь, который формирует все напряжения, необходимые для работы ВЛИ.

И казалось бы, что всё замечательно, но у этого модуля есть фатальный недостаток – максимальная скорость передачи данных по RS-232 составляет всего 38400 бит/с.

Это означает, что если мы заходим максимально быстро обновлять картинку на дисплее, то максимальный теоретический фреймрейт составит всего 2.5 кадра в секунду. А в реальности еще меньше, так как контроллеру требуется время на то, чтобы обработать принятые данные.

Конечно, для отображения статической графики и текста этого более чем достаточно. Но если захотеть крутить видео на этом дисплее или отображать графику с несколькими оттенками цвета, то этого явно маловато будет. И хотелось бы каким-нибудь образом обойти это ограничение.

Я сразу отверг идею написать прошивку для установленного на плате модуля микроконтроллера NEC upd70f3214gc, так как не знаком с этими контроллерами. А изучать семейство контроллеров V850ES/KG1 ради одного проекта не очень хочется. 

Поэтому наиболее логично будет попробовать порулить ВЛИ напрямую, при помощи какого-нибудь AVR или STM32 микроконтроллера. 

Определение распиновки ВЛИ

У установленного на этом модуле ВЛИ нет торчащих наружу выводов сеток и анодов. Вместо этого внутри ВЛИ есть чип, который выполняет всю низкоуровневую работу (технология называется chip-in-glass, сокращенно CIG).

Задача состоит в том, чтобы разобраться с распиновкой дисплея, понять в каком виде данные посылаются в чип, отрезать родной микроконтроллер модуля от ВЛИ, подключить свой и написать для него программу. 

Вся сложность заключается в том, что на момент, когда я делал всё, что написано в этой статье, у меня не было в наличии даташита на чип дисплея. Поэтому всё пришлось делать буквально методом тыка при помощи осциллографа и логического анализатора.

Управляется и питается дисплей через две группы контактов – 16 слева и 15 справа (я не беру в расчет самые крайние выводы, так как понятно, что это выводы нитей накала).

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

Вооружившись осциллографом, смотрим уровни сигналов на выводах дисплея:

Если внимательно посмотреть на плату модуля, то можно увидеть, что некоторые линии между двумя группами контактов соединены. 

Теперь, вооружившись мультиметром, прозваниваем линии между собой. За одно ещё прозваниваем все линии к земле и к питанию +5 В на предмет подтяжек, а также прозваниваем линии между дисплеем и микроконтроллером. Получаем следующее:

Итого всего для управления чипом дисплея задействовано 8 уникальных линий, которые подключены к микроконтроллеру модуля через 100-омные резисторы.

Так как уровни управляющих сигналов 5 В, то теперь можно смело подцепить логический анализатор. Видим следующую картину:

Первые три линии представляют собой нечто очень похожее на SPI шину: канал 0 – Линия данных, канал 1 – Линия тактирования, канал 2 – Выбор ведомого (chip select).

Пробуем очистить весь дисплей:

Линия Data ушла вниз. Теперь попробуем заполнить весь дисплей:

Теперь линия Data ушла вверх. Причём между этими прыжками вверх/вниз ни шине больше ничего нет. Поэтому можно смело предположить, что чип получает графические данные в сыром виде, без каких бы то ни было управляющих команд. Также это подтверждает тот факт, что при подаче питания на модуль в дисплей сразу грузятся пакеты с графическими данными.

Путём зажигания отдельных пикселей, строк и столбцов определяем соответствие битов пакета данных, полученного по SPI, с тем, что отображается на дисплее.

Спойлер

Прям буквально — зажигаем, к примеру, левый верхний пиксель и смотрим какой бит в пакете принял состояние “1”. Проделываем это с тремя остальными углами. Потом зажигаем строки, потом столбы и так далее. Процесс чем-то напоминает разгадывание нонограмм (японских головоломок), только в обратном порядке.

Следующие две линии – включение выходов анодных регистров, а именно сигналы BLK1 и BLK2. Эти сигналы практически в противофазе, причем не допускается, чтобы оба сигнала были низкого уровня (об этом ниже):

И последние три линии – это входы сдвигового регистра сеток, я могу сказать это основываясь на своём личном опыте работы с подобными дисплеями. Единственный нюанс – в этом регистре постоянно находятся два бита (т.е. постоянно включены две сетки):

Таким образом, получаем следующую распиновку дисплея:

Краткое описание работы CIG

Чип дисплея содержит четыре сдвиговых регистра.

Два 128-битных – отвечают за аноды (сегменты). Два 64-битных – отвечают за сетки.

Правда, если посмотреть на структурную схему чипа в даташите, то можно заметить, что сеточных регистров 4 штуки (DRV1, DRV3, DRV4, DRV6). Но к одной группе сеток параллельно подключено два регистра, которые принимают на вход (и соответственно выдают) одинаковые сигналы.

Анодные регистры на плате модуля соединены параллельно (линии CLK, DATA и СS). Один регистр отвечает за отображение сегментов в столбцах DA, другой в столбцах BC. Включение выходов нужного регистра осуществляется подачей низкого уровня на вход BLK1 или BLK2.

ВНИМАНИЕ! Одновременная подача на входы BLK сигналов низкого уровня не допускается – дисплей может выйти из строя.

Каждый 128-битный пакет содержит данные для отображения двух столбцов пикселей. Заполнение столбцов идет слева-направо снизу-вверх. Старший бит пакета соответствует левому нижнему пикселю, младший правому верхнему.

Регистры управляются по шине SPI, режим работы: CPOL=1, СPHA=1. Частота тактирования: в оригинале 1.6 МГц, максимально допустимая по даташиту 5 МГц. Я же запускал с частотой 10.5 МГц и всё прекрасно работало. Единственное условие для работы на такой частоте – чипу дисплея требуются уровни 5 В, поэтому для микроконтроллеров STM32 нужно использовать преобразователь (я использую 74HCT245).

Сеточные регистры соединяются последовательно. В принципе, можно считать, что это один 128-битный регистр, так как на плате модуля выход первого регистра соединён со входом второго и больше никуда не подключен.

Особенность конструкции дисплея в том, что хоть в нём и 128 сеток (одна сетка расположена над двумя столбцами пикселей), но для правильного отображения информации и для избежания засветок/подсветок одновременно должны быть включены две соседние сетки.

Включение выходов сеточного регистра осуществляется подачей низкого уровня на вход GBLK. Через него же осуществляется управление яркостью дисплея.

ВНИМАНИЕ! Ни при каких обстоятельствах не оставляйте вывод GBLK свободно висящим или постоянно подтянутым к низкому уровню – дисплей может выйти из строя.

Сканирование (развёртка) идёт по столбцам слева-направо. Первый пакет содержит данные для второго столбца пикселей (сегменты BC сеток G1 и G2).

Анимация, упрощённо показывающая работу развёртки:

ВНИМАНИЕ! Ни при каких обстоятельствах не останавливайте развёртку при включенном питании – дисплей может выйти из строя.

К чему я пишу все эти предупреждения

Если что-то пойдет не так, замешкаться хотя бы на пару секунд и не отключить питание от дисплея, то на люминофоре можно получить вот такие неприятные выжженные пятна:

А если ещё немного замешкаться, то сетка и люминофор скорее всего прогорят до дыр. У меня была ситуация, когда развёртка остановилась, а питание было подано. И в том месте, где остановилась развёртка, через несколько секунд сетка раскалилась до красна. После этого дисплей практически перестал работать — при включении было еле-еле заметное свечение люминофора. Я уже было списал этот дисплей в утиль. Но к моему удивлению, через несколько дней дисплей ожил, правда немного потерял в яркости.

Поэтому любые подключения/отключения разъемов и программирование микроконтроллера должны быть при отключенном питании дисплея 5 В. Включение дисплея должно быть в последовательности: сначала подаём питание на МК, потом, через пару секунд на дисплей. Выключение в обратном порядке. И нужно быть готовым к тому, что что-то может пойти не так и питание дисплея нужно будет быстро отключить.

Так же я крайне не рекомендую играться с мощными магнитами с этими дисплеями. В виду того, что нити накала длинные, сетки длинные, а расстояние между нитями и сетками маленькое, при поднесении магнита сетки может просто выгнуть и замкнуть на нити.

Подключение к МК

В первую очередь необходимо отключить распаянный на плате модуля микроконтроллер от дисплея. Выпаивать его для этого не нужно, достаточно лишь снять две резисторные сборки под позиционными номерами RA3 и RA4:

Теперь нужно каким-нибудь образом подключиться к контактам дисплея. Сначала я делал это при помощи крючков от логического анализатора, но это крайне ненадёжный способ, так как эти дурацкие крючки очень любят слетать в самый неподходящий момент. Чтобы не мучиться, я напрямую припаял к контактам дисплея разъем типа L-KLS1-XL1-2.00-10-R (MW-10MR). Получилось вполне себе прочно и надёжно. По крайней мере, за полтора года разъем не отвалился:

Проводок МГТФ, идущий от 5 пина разъема (если считать справа налево) — линия BLK2. Чтобы не тянуть провод через всю плату модуля ко второй группе контактов, я припаял его к ближайшему переходному отверстию этой линии:

Осталось самое простое – написать программу для МК. 

Для управления дисплеем я буду использовать микроконтроллер STM32F401CCU6. Сначала нужно просто проверить, будет ли оно работать вообще. Поэтому для первых тестов я буду просто выводить какой-нибудь простенький графический паттерн, например “шашечку”. Также я пока не буду заморачиваться с точным соответствием таймингов, главное соблюсти всю последовательность действий и обеспечить сколько-нибудь адекватную скорость развёртки.

Последовательность действий следующая:

  • Загружаем два бита в регистр сеток

  • Загружаем 16 байт в регистр анодов. Так как мне нужна “шашечка”, то это просто 16 одинаковых байт 0x99

  • Включаем на некоторое время регистр сеток и второй регистр анодов (BLK2)

  • Выключаем все регистры

  • Сдвигаем данные в регистре сеток на один бит

  • Опять загружаем 16 байт 0x99 в регистр анодов

  • Включаем на некоторое время регистр сеток и первый регистр анодов (BLK1)

И так 128 раз.

Как ни странно, всё заработало буквально с первого раза:

Но отображать статическую графику дисплей мог и из коробки. Попробую отобразить какую-нибудь анимацию. Графические данные буду передавать с ПК, на нём же буду делать все преобразования из картинки в готовый массив, который можно сразу лить в анодные регистры дисплея:

sl
sl

Ну а так как дисплей теперь способен отображать анимацию с (относительно) высоким FPS, то значит на нём можно запустить “Bad apple!!”:

Про формирование изображения с несколькими оттенками цвета на монохромных дисплеях я писал в статье про ИМГ-1-02. Здесь используется тот же самый принцип. На дисплее отображается 8 оттенков цвета, поэтому частота развёртки дисплея должна быть в 7 раз выше исходной. Т.е. для того, чтобы глаз или камера увидели 8 оттенков при 60 кадрах в сек. частота развёртки должна быть 420 Гц.

Кроме того это требует стабильной передачи данных с ПК со скоростью почти 3 Мбит/с (256x64x3x60 = 2949120 бит/с), а в режиме с двумя дисплеями 6 Мбит/с. Большинство USB-UART адаптеров уже не могут работать с такой скоростью, поэтому передача данных с ПК в МК теперь осуществляется посредством USB.

На микроконтроллере реализовано полноценное WinUSB WCID устройство (это не эрзац USB CDC VCP), которое не требует драйверов. Работоспособность проверена в Windows 7/10 и Linux Mint 20.3. 

Со стороны ПК используется библиотека libusb-1.0, а со стороны МК USB-стек libopencm3. Для передачи графических данных с ПК в МК используется одна конечная точка типа Bulk. Регулировка яркости дисплея осуществляется при помощи vendor-specific реквеста в нулевую конечную точку (bmRequestType = 0x41).

Dual Mode

Это вариант исполнения, при котором к микроконтроллеру одновременно подключено два дисплея. 

Сначала я пытался подключить оба дисплея к одной шине SPI и по очереди загружать в них данные, выбирая нужный дисплей при помощи chip select (все остальные линии при этом были запараллелены). 

Но то ли я что-то не так делал, то ли не укладывался в тайминги, то ли дисплеи некорректно реагировали на уровень сигнала на линии CS — адекватной работоспособности мне так и не удалось получить. Либо дисплеи вообще ничего не отображали, либо отображали мусор. Хотя по записям с логанализатора всё было в полном порядке.

В итоге я сделал проще — один дисплей подключил к шине SPI1, а второй к шине SPI2. И так как в микроконтроллере STM32F401CCU6 эти шины привязаны к разным контроллерам DMA, то у меня появилась возможность загружать данные не по очереди, а параллельно, со скоростью 10.5 МГц.

Теперь можно поиграть в Doom 2:

Понятно, что практической пользы от такого режима нет, но выглядит это очень необычно. Особенно мне нравится некое подобие эффекта параллакса, возникающего из-за смещения дисплеев относительно друг друга.

Монитор ресурсов

В качестве демонстрационного проекта я сделал монитор ресурсов компьютера, который отображает загрузку/температуру/частоту CPU/GPU, использование RAM/VRAM, и тд. и тп.

Так как в Python под Windows нет нормальных библиотек для мониторинга ресурсов, то для получения информации с датчиков я использую стороннее ПО, а именно MSI Afterburner. Особенность этой утилиты в том, что она выдаёт информацию со всех датчиков в область памяти под названием Shared Memory. Данные хранятся в очень удобном формате в виде структур. 

Первые 32 байта — структура заголовка со следующими полями:

struct MAHM_SHARED_MEMORY_HEADER {
    unsigned int signature;              // Сигнатура "MHAM". Именно так наоборот.
    unsigned int version;                // Версия ПО
    unsigned int headerSize;             // Размер структуры заголовка в байтах
    unsigned int entryCount;             // Количество структур датчиков
    unsigned int entrySize;              // Размер одной структуры датчика в байтах
    int time;                            // Время/дата в формате unix time stamp
    unsigned int gpuCount;               // Количество структур GPU
    unsigned int gpuEntrySize;           // Размер одной структуры GPU в байтах
};

Далее идут структуры, описывающие каждый датчик (Entry):

struct MAHM_SHARED_MEMORY_ENTRY {
    char name[260];                      // Имя датчика
    char units[260];                     // Единица измерения датчика
    char localName[260];                 // Локализованное имя датчика (имя датчика на выбраном языке интенрфейса MSI AB)
    char localUnits[260];                // Локализованная единица измерения датчика
    char format[260];                    // Формат (в большинстве случаев %.0f)
    float data;                          // Значение датчика
    float minLimit;                      // Минимальное значение датчика
    float maxLimit;                      // Максимальное значение датчика
    unsigned int flags;                  // Флаги (1 - датчик отображается в OSD, 2 - датчик отображается на Logitech LCD, 4 - датчик отображается в системном трее)
    unsigned int gpu;                    // Номер GPU, к которому относится датчик
    unsigned int srcid;                  // ID GPU, к которому относится датчик
};

И в конце располагаются структуры, описывающие каждый GPU (если их несколько):

struct MAHM_SHARED_MEMORY_GPU_ENTRY {
    char gpuId[260];                     // Имя GPU в формате PCI\Ven_xxxx&Dev_xxxx
    char gpuFamily[260];                 // Модель чипа GPU (например TU106)
    char gpuDevice[260];                 // Модель видеокарты (например NVIDIA GeForce RTX 2060 Super)
    char gpuDriver[260];                 // Версия видеодрайвера
    char gpuBIOS[260];                   // Версия BIOS GPU
    unsigned int gpuMemAmount;           // Объем памяти GPU в Кб
};

Огромный плюс в том, что размер полей структур фиксированный, поэтому можно один раз прочитать заголовок и далее считывать показания с датчиков просто по смещению.

GUI реализован на прекрасном в плане возможностей и скорости работы, но ужасном в плане документации dearpygui. Есть возможность отображения двух графиков с любых датчиков, а также четырех датчиков в формате текст/горизонтальная гистограмма.

Графика отрисовывается при помощи OpenCV. Но так как в этой библиотеке функции отрисовки текста поддерживают только лютые ШГ под названием HERSHEY, то пришлось написать простенький знакогенератор с поддержкой шрифтов 5x7, 8x12 (олдскульный шрифт из MS-DOS 6, с полной поддержкой кодовой страницы CP1251) и 14x28 (я уже не помню какой шрифт брал за основу). Шрифты 5x7 и 8x12 поддерживают кириллицу, правда в текстовых полях GUI она может отображаться некорректно.

Результат работы программы выглядит так:

При желании количество и расположение графиков и сенсоров можно менять. Если вы, конечно, разберётесь в моём коде.

Заключение

Конечно, можно сказать, что практического смысла в трансляции области экрана на такой дисплей не много. Но следует понимать, что это всего лишь демонстрация технических возможностей, а не какой-то прикладной проект.

Все подобные дисплеи (VFD с CIG) работают по одному и тому же принципу, разница лишь в разрешении, в количестве сеток и в количестве групп сегментов. 

Поэтому я надеюсь, что описанная в этой статье процедура определения распиновки, принципа работы и запуска такого дисплея в нестандартном режиме поможет кому-то реализовать свои интересные проекты не только с таким же дисплеем, но и со многими подобными.

Благодарю за внимание. С радостью отвечу в комментариях на все ваши вопросы, мысли, идеи и предложения.

Ссылки

Репозиторий проекта

Даташит на модуль Futaba GP1160A02A

Даташит на дисплей Futaba GP1160AI

Комментарии (39)


  1. cybersonner
    17.12.2022 20:01
    +11

    Вот по таким индикаторам прямо скучаю. Раньше на дорогих мультиметрах он стоял (keithley 2000 вроде)- очень быстрый (мультиметр может измерять очень быстро- это конечно не важно, но красиво) и очень четкий. Потом на Экспоэлектронике несколько лет назад подошел к стенду- на всех уже разного сорта жк- прямо грустно стало.


    1. Arhammon
      18.12.2022 10:58
      +2

      Это еще к сегментным и пиксельным газоразрядным дисплеям не привыкли, они еще интереснее.


  1. Karlson_rwa
    17.12.2022 21:03
    +4

    Это обалденно, спасибо!


  1. AllexIn
    17.12.2022 21:08
    +3

    Статья отличная, спасибо.

    Однако подушню: использовать такой дисплей для отображения загрузки ПК это забивание гвоздей микроскопом. Тем более когда Extended Screen продается за 40 баксов.


    1. vvzvlad
      18.12.2022 00:11
      +12

      Почему микроскопом? Он же просто красииииивый!


  1. steanlab
    17.12.2022 21:12
    +8

    Класс. Ничего не могу поделать с собой, как только вижу комбинацию «некое устройство графического вывода» + Bad apple!!! — рука сама собой тянется к стрелке плюса посту/в карму. Жаль редкость такие статьи на Хабре…
    Спасибо.

    Вот по таким индикаторам прямо скучаю.

    absolutely


  1. dlinyj
    17.12.2022 22:26
    +15

    Афигенная статья! Хабр тортище!


    1. AlexanderS
      17.12.2022 22:55
      +6

      В этот год заметил, что подобных статей стало больше, прямо заметно на глаз. У меня даже какое-то ощущение складываться стало, словно вернулся на хабр во времена своей молодости регистрации, когда подобного «диайвая» было гораздо больше.


  1. MaFrance351
    18.12.2022 00:33
    +9

    Вот он, тот самый контент, которого мы с таким нетерпением здесь ждём!

    Кстати, у Futaba много было дисплеев со встроенным непосредственно в индикатор драйвером. Даже ВЛИ в форм-фактор HD44780 с питанием от пяти вольт и практически сходим и размерами были. Дорогие они только, правда.
    Использовались традиционно там, где нужны широкие углы обзора или широкий диапазон температуры (все ведь помнят, как ведут себя текстовые ЖКИ на морозе?).


    1. steanlab
      18.12.2022 01:39
      +4

      Вот он, тот самый контент, которого мы с таким нетерпением здесь ждём!

      Так выпьем же чтоб Хабр -> «как из рассказов Гибсона» :)


  1. fk0
    18.12.2022 06:14
    +4

    Надо сказать, что в общем-то есть OLED которые на первый взгляд ничем не хуже, даже наоборот. Без "тёплого лампового цвета", зато цветные. Другое дело, что у них ограниченный срок службы (что прекрасно вписывается в теорию запланированного устаревания).

    Хуже того, срок хранения (в выключенном состоянии) у OLED тоже не высокий (по сравнению с VFD дисплеями так точно). Так что антикварных приборов с такими дисплеями мы не увидим.


    1. isden
      18.12.2022 10:06
      +4

      срок хранения (в выключенном состоянии) у OLED тоже не высокий

      Подскажите плз, какие механизмы тут работают? Видел подобные упоминания, но везде на уровне слухов. Сам лично не сталкивался (хотя у меня есть довольно старые дивайсы с OLED, и все там ок).


      1. fk0
        18.12.2022 15:57
        +1

        Органические полупроводники состоят из сложных молекул (против атомарных элементов и их простейшие соединений в "классических" полупроводниках), которые деградируют от времени и по воздействием внешних факторов. Молекулы распадаются, образуются новые химические соединения, уже не обладающие нужными свойствами. Это происходит куда быстрей, чем атомная диффузия в обычных полупроводниках, которые тоже в общем-то имеют не бесконечный срок жизни, хотя и куда больший, наверное на порядки.


        1. isden
          18.12.2022 16:08
          +1

          Я читал про деградацию только во включенном состоянии. Про выключенное — выглядит как-то сомнительно (в смысле сроков, больше поверю в +- аналогичное время как у обычных материалов). Повторюсь — у меня вот сейчас под рукой galaxy s+, выпущенный в 2011. Пользовался им года 3-4, после этого лежал в столе. Все с ним хорошо до сих пор.
          Там же лежит galaxy tab 7.7, сделанный на полгода позже, с ним аналогично.
          Единственный раз когда я видел деградацию выключенного oled — это 4g модем с дисплейчиком (дисплей зажигался изредка, в основном был выключен). Там все понятно — модем постоянно использовался, и при использовании раскалялся снаружи до 50-60С. Выгорел за пару лет.


          1. Kotofay
            18.12.2022 22:37

            Аналогично. Galaxy Tab 7.7, работает непрерывно уже много лет не выключая экран, как часты и погодная станция. Не выгорел ни на грамм.


      1. Karlson_rwa
        18.12.2022 19:25
        +1

        Зависит от китайцев, которые рисуют документацию. Для одного и того же артикула где-то указано только Operating Life Time, а где-то еще и Storage Life Time. Разница причем, в два раза всего.


    1. MaFrance351
      18.12.2022 12:28
      +2

      Кстати, а насколько он ограниченный? Сколько времени ему надо проваляться, чтобы существенно потерять свои свойства?


      1. VTH
        18.12.2022 14:59
        +2

        Дешевые одноцветные OLED за три-пять лет выгорают до нечитаемости. Потом можно задрать им высоковольтное питание (если оно есть отдельно) и пользоваться еще пару лет.


        1. MaFrance351
          18.12.2022 18:48
          +2

          Так речь же шла именно о хранении в выключенном состоянии, что было упомянуто товарищем fk0.
          К слову говоря, более хорошие OLED (те же Winstar серии WEH) работают не в пример дольше тех же китайских дисплейчиков с контроллером SSD1306. У самого есть самодельные часы на таком экране, скоро уже будет им два года, никаких проблем замечено не было. Возможно, правда, что деградация происходит нелинейно, отчего, скажем, ещё через пару лет он резко потускнеет.


  1. axe_chita
    18.12.2022 10:29
    +5

    Какая классная статья, аппаратный реверс-инжиниринг на высшем уровне, подробно с «we need to go deeper» и «beware, tiger ahead». Дабл плюс!


  1. kurgan-kotlovan
    18.12.2022 13:15
    +2

    Похоже купить не реально :(


  1. Dark_Purple
    18.12.2022 13:17
    +3

    "это выводы нитей накала"
    Починял я как-то на заре моей инженерной карьеры какой-то прибор на лампах, ну что-то не получалось там.. Приходит коллега, говорит: Ты на кал смотрел?))))))))))))
    рил стори


  1. tormozedison
    18.12.2022 14:15
    +5

    Спасибо, ВЛИ-модуль с полутонами ШИМом - это круто до ужаса.


  1. gleb_l
    18.12.2022 18:39
    +6

    Спасибо за статью, ВЛИ - это пульс электроники 80-х. Она живая какая-то от этого делается, что ли.

    PS посмотрел Вашу предыдущую публикацию - а там ИМГ-1-02! Я восстанавливал мёртвый МС6205 несколько лет назад (с оборванными шлейфами, выбитой высоким напряжением частью ИМС и выпаянным ПЗУ знакогенератора), схему рисовал по печати. Запустил, но потом времени не стало совсем на DIY со старым железом (


    1. sim2q
      18.12.2022 23:05
      +3

      Я восстанавливал мёртвый МС6205 несколько лет назад

      Кажется я читал вашу историю где-то на форумах:) узок круг этих революционеров...

      Тоже про МС6205 подумал и полутона.
      В своём оставил только ВВ ключи, дешифраторы и сдвиговый регистр строк. Загружаемый знакогенератор и остальное перенёс в stm32. Оторвал подсветку подчёркивания под каждым знаком в силу эстетики и...дисплей перестал стабильно работать (пиксели стали дрожать) особенно тем где много тёмных мест. Как я понял - плазма успевает в рекомбинацию...Пробовал и разного рода последовательности развёртку и напряжением играть (высоким теперь тоже stm32 управляет). Но так и не пофиксил. Но видел видео кажется у @radiolok без таких вот артефактов. Да и плазмотелики как-то работают же?

      За статью большое спасибо @iiiytn1k (всё в один коммент теперь надо вмещать за день :)
      Просто приятно смотреть на такие индикаторы словно у себя включил :)
      C VFD PWM тоже игрался пытаясь восстановить равномерность яркости выгоревшего индикатора, но увы...


  1. tvr
    18.12.2022 20:18

    Торт!
    Спасибо.


  1. stalinets
    18.12.2022 23:33
    +2

    Я бы купил подобное не сильно дорогое устройство, чтоб просто воткнуть в USB, может - поставить простенький драйвер, и оно выводило бы мне информацию о ПК на подобном экранчике. А может, позволяло бы настроить на него вывод видео в плеере VLC или что-то ещё.


    1. AllexIn
      19.12.2022 11:54

      Такое устройство недорогим быть не может. Здесь один экран десятку стоит.


      1. iiiytn1k Автор
        19.12.2022 11:56
        +2

        Примерно 1100 руб. мне обошёлся один экран с учётом доставки


        1. AllexIn
          19.12.2022 12:54

          Круто. Я нашел вариант только за 100$ + доставка 20


      1. stalinets
        19.12.2022 19:26

        Можно и не простом ЖК экранчике, если сделать красивую подсветку и спереди тёмно-зелёный светофильтр.


        1. AllexIn
          19.12.2022 19:33

          На простом экранчике оно уже есть.


  1. avrusanov
    19.12.2022 21:56

    Мсье знает толк :)


  1. kodose
    19.12.2022 22:04
    +1

    Классная статья! Когда я реверсил этот дисплей, не думал, что это можно так красочно преподнести) А каким методом регулируется яркость в пределах разных строк одного столбца? Чередованием кадров с разным уровнем яркости?


    1. iiiytn1k Автор
      19.12.2022 23:54
      +2

      Да, что-то типа FRC (Frame Rate Control).

      Каждое изображение в оттенках серого можно представить в виде нескольких однобитных изображений. Их количество будет определять глубину цветности итогового изображения, выводимого на дисплей.

      8-цветное изображение — 3-битное. Соответственно для его формирования потребуется три однобитных изображения.

      Формируются эти три изображения следующим образом:

      1. Берём исходное изображение с 256 оттенками серого (палитра [0, 1, 2 ... 254, 255]). Снижаем глубину цветности до 3-бит. Для этого просто целочисленно делим значение цвета каждого пикселя на 32. Получаем изображение с палитрой [0, 1, 2, 3, 4, 5, 6, 7]

      2. Первое монохромное изображение формируется из остатков от деления значения каждого пикселя на 2.

      3. Для второго изображения сначала целочисленно делим значение каждого пикселя на 2, а затем так же формируем его из остатков от деления на 2.

      4. Для третьего изображения сначала целочисленно делим значение каждого пикселя на 4, а затем так же формируем его из остатков от деления на 2.

      Далее при выводе изображения на дисплей полученный "фарш" нужно провернуть обратно. Чтобы отобразить на дисплее изображение с восемью оттенками серого (полутонами), третье изображение должно отображаться 2/3 от общего времени отображения каждого кадра, второе изображение 2/3 от оставшихся 1/3 общего времени, и первое изображение всё оставшееся время.

      На первый взгляд звучит сложно, но реализуется очень просто.

      Чтобы не играться с перенастройкой таймера 7 раз на кадр и получить плавную картинку без мерцания и разрывов, я беру время отображения каждого кадра и делю его на 7. Или, говоря простым языком, просто увеличиваю скорость вертикальной развертки в 7 раз.

      И теперь, за время отображения одного кадра, я отображаю 4 раза третье изображение (4/7 или 57% от общего времени кадра), два раза второе (2/7 — 28% от общего времени кадра или 2/3 от оставшегося времени) и один раз первое (1/7 или 14% от общего времени). Чтобы уменьшить шлейфы и мерцание в динамических сценах, я немного распределяю чередование изображений и вывожу их в следующем порядке: {2, 3, 1, 3, 3, 2, 3}

      И таким образом можно выводить многоцветные изображения на абсолютно любой монохромный дисплей, которые обеспечивает сколько-нибудь высокую скорость перерисовки. Я даже выводил 4 цветную картинку на графический STN ЖК-дисплей, и оно работало:

      P.S. И коли есть возможность, хотел бы ещё раз поблагодарить, за то, что связались с Futaba и поделились даташитом на стекло GP1160AI


      1. X-Ray_3D
        20.12.2022 00:39
        +1

        Они когда мне даташник скидывали, написали что снимают с производства все ВЛИ. К сожалению скоро такие дисплеи уйдут в небытие. 


      1. kodose
        20.12.2022 09:24
        +1

        Понятно, спасибо за столь развёрнутый ответ!


  1. JekaKey
    20.12.2022 11:44
    +1

    А сколько потребляет такой дисплей?


    1. iiiytn1k Автор
      20.12.2022 12:48
      +3

      От 0.7 А (все сегменты выключены, работает только накал) до 1.5 А (максимальная яркость, все сегменты горят).

      При включении скачок до 5 А.