Digitrode
цифровая электроника вычислительная техника встраиваемые системы
Простой способ подключения Arduino к вакуумно-флюоресцентному дисплею (VFD)
В данном материале будет рассказано, как подключить любой неизвестный вакуумно-люминесцентный дисплей (он же вакуумно-люминесцентный индикатор или VFD) с последовательным интерфейсом к микроконтроллеру Arduino, при этом на дисплее будет отображаться текст с последовательного монитора.
Для начала нам нужно подключить устройство к источнику питания. Для большинства микросхем на платах таких дисплеев напряжение питания должно быть 5В. В нашем случае мы используем вот такой индикатор.
Проще и безопаснее всего было припаять шнуры питания непосредственно к контакту 4 (Gnd) и контакту 6 (Vcc) микросхемы MC 34063. После подключения источника питания на дисплее появляется основная информация, и нас больше всего интересует скорость передачи данных, которая в данном случае составляет 4800.
Далее нам нужно выяснить, как этот дисплей будет взаимодействовать с Arduino. Почти каждый последовательный дисплей имеет микросхему драйвера/приемника RS-232. Конкретно в данном случае это SIPEX SP232 ACP. Документация показывает, что TTL-вход в схему – это контакт 11. Нам также нужно закоротить контакты 14 и 13, то есть контакты передачи данных и получения данных. Теперь нам нужно подключить выход TX от Arduino к входу TTL микросхемы MAX232 под номером 11. В этом случае все, что мы увидим в последовательном мониторе Arduino, будет отображаться на дисплее VFD.
В данном примере мы собрали простую метеостанцию на основе датчика BMP180, которая также содержит часы реального времени DS3231. Схема подключения компонентов представлена далее.
Информация в последовательном мониторе должна быть в одну строку и не длиннее 40 символов. Мы реализуем это в коде с помощью команд Serial.print и Serial.println и с комбинацией пробелов. Код программы приведен далее.
Наконец, устройство может быть установлено в подходящую коробку из ПВХ толщиной 5 мм и обклеено цветной бумагой или окрашено.
Часы на основе индикатора ИЛЦ3-5/7 (ILC3-5/7)
Хочу поделиться опытом и наработками при создании настольных, компактных часов на основе индикатора ИЛЦ3-5/7.
Давно хотел сделать часы на основе вакуумно-люминесцентного индикатора, но как-то все руки не доходили. И тому было несколько технических причин (если вы это читаете то я думаю вы уже знаете принцип работы вакуумно-люминесцентного индикатора, если нет, то рекомендую сначала ознакомиться):
Катод (катод прямого накала) должен быть запитан переменным напряжением для равномерного свечения всех сегментов индикатора, при запитке постоянным напряжением человеческий глаз уже видит неравномерность свечения, а также происходит неравномерный износ световой массы сегментов. Так что вариант с простой схемой запитки постоянным напряжением даже не рассматривался.
Классическая схема питания — это трансформаторная. Она проста как молоток, но такое дело мне не нравилось из-за громоздкости (и при таком варианте невозможно питать схему от стандартного USB-зарядного устройства).
Двухтактный преобразователь (пробовал тот, который в статье ниже, получил плохие переходные процессы на осциллограммах) с запиткой стандартным напряжением 5В (как в USB), который формирует переменку около
3В для запитки катода и отрицательное высокое или положительное — анодное, более 20В.
Драйвер для сеток и анодов. Основная проблема тут в том, что есть такое понятие как «верхнее» и «нижнее» питание (об этом написано тут). И поэтому есть такие варианты:
Микросхема-драйвер с последовательным интерфейсом SPI, коммутирующая ОТРИЦАТЕЛЬНОЕ относительно общего провода схемы напряжение.
Микросхема-драйвер с последовательным интерфейсом SPI, коммутирующая ПОЛОЖИТЕЛЬНОЕ относительно общего провода схемы напряжение.
Микросхема-дешифратор двоичного кода К176ИД3, которая требует нескольких напряжений и хитрого включения.
Все по хардкору на отдельных транзисторах.
Драйвер катода
Но наткнувшись на эту статью, я решил вопрос с питанием катода (в статье применена микросхема LM9022 и ее сейчас уже не выпускают, но я купил ее на алихе, а потом узнал что это полный аналог микросхемы LM4871которую можно запросто найти) и я воспрял духом в вопросе разработки безтрансформаторной схемы питания, но оставался еще вопрос по формированию анодного напряжения, и тут всё зависело от того, какой драйвер я буду использовать.
Драйвер анодов, сеток и DC/DC StepUp конвертер
Основная проблема при использовании драйвера с «верхним» питанием заключается в том, что нам нужно получить отрицательное напряжение относительно общего провода схемы из положительного напряжения питания, да еще и высокое, т.е. нам нужно из +5В получить -25В. И да, такое решение тоже нашлось тут. Но автор пишет, что потребление тока не оптимально. Единственное, что привлекает использовать такое схемное решение, это доступность микросхемы-драйвера PT6311. Но после более тщательного поиска все еще доступных к покупке микросхем нашлась золотая середина — MAX6921AWI. Она, как оказалось, даже еще производится и ее не составило труда купить на AliExpress. Определившись, что схема у меня будет с «нижним» питанием, найти схему DC/DC StepUp конвертера не составило никакого труда. Основой такого конвертера стала «попсовая» MT3608.
Выводы по железу
Таким образом были решены основные технические трудности, которые не позволяли сделать плату простой в сборке и в ультра-компактном виде (как для часов с таким типом индикатора).
Сейчас я хочу рассказать о допущенных ошибках, как в схеме так и в трассировке платы и об особенности MAX6921AWI
Пожалуй начну с особенностей MAX6921AWI, ее суть заключается в том что микросхема принимает по SPI 20 бит и это как бы не кратно ни 8 ни 16, что и накладывает доп логику при использовании микроконтроллера с аппаратным SPI. Я использовал в своей конструкции микроконтроллер STM32F103C8T6 который богат периферией в частности и SPI но он умеет в 8 или в 16 бит. И для того чтобы данные были переданы как задумывалось необходимо учитывать как будет управляться ножка LOAD микросхемы MAX6921AWI. В моей схеме уровень на этой ноге контролируется микроконтроллером (что оказалось не особо нужным) так же у меня не подключены выходы OUT0-OUT4 (просто так было удобнее развести плату).
В общем кратко как происходит передача данных в моей реализации:
Я настроил SPI на размер посылки в 16 бит и выставил постоянный высокий уровень на лини LOAD, а суть в этом следующая. При высоком уровне на ножке LOAD, MAX6921AWI после 20 импульса на линии CLK просто-напросто игнорирует дальнейшие данные и сразу выдает 20 принятых бит на выход.
Первыми 4 битами данных (это маленькие ‘x’) указываю какой уровень будет на OUT16-OUT19, а ‘X’ соответственно OUT5-OUT15.
Моя схема подключения представлена ниже. (Кстати как оказалось новые модели МК поддерживают передачу не только 8 и 16 бит но и 4.)
Подключение дисплея к драйверу
Также я хотел чтобы часы могли показывать температуру, давление, влажность и качество воздуха. Для этих целей были выбраны следующие микросхемы:
качество воздуха — CCS811
давление, температура — BMP180
влажность, температура — HDC1080
Датчик качества воздуха весьма забавный, но ооооочень специфический. Внутри себя он содержит микроконтроллер с собственной прошивкой (которую кстати можно обновлять). Работает он по шине I2C, как и остальные датчики, что очень удобно, все датчики висят на одной линии. CCS811 по запросу, если данные готовы, выдает готовый результат.
CCS811 supports intelligent algorithms to process raw sensormeasurements to output a TVOC value or equivalent CO2 (eCO2)levels, where the main cause of VOCs is from humans.
Также сей девайс для более точных показаний, имеет компенсацию по температуре и влажности. Т.е вы можете вписать в него эти данные и он выдаст вам результат уже с их учетом. Из существенных минусов: очень чувствителен к спирту, растворителям и прочей бытовой химии. Показания становятся просто неадекватными, но через время его попускает. В общем, всего в двух абзацах не описать, рекомендую читать документацию (прикреплена к статье, если есть вопросы, пишите постараюсь ответить).
По датчику давления, в документацию даже не вчитывался. Только посмотрел как там организован обмен по шине. Очень порадовало то что BOSCH делает для своих датчиков пример кода. Единственный минус, его больше не выпускают. У меня после пайки, он стал врать достаточно сильно, это видать от того что я паял его феном без соблюдения термопрофиля. Так что будьте осторожны.
Остается датчик влажности и температуры. Я взял библиотеку для ардуины и переписал ее под себя. Все работает, в целом очень простой, но опять таки нужно быть аккуратным при пайке.
Вот только полноценно этот зоопарк я так и не включил ибо допустил ошибку в трассировке. Я разместил все эти датчики рядом с линейным стабилизатором напряжения 5В->3.3В. Что, как вы понимаете не могло сказаться позитивно на точности измерения) В общем он греется, а за ним следом все что вокруг, так что данные я считываю только с CCS811.
Еще в часах я реализовал RGB подсветку, которой можно пользоваться просто как подсветкой но что еще круче, на мой взгляд, ей можно отображать качество воздуха на данный момент. И человеку не нужно всматриваться в числа или во что то еще, достаточно увидеть цвет.
Также еще одной ошибкой, но на этот раз ошибка была допущена в схеме. Вывод BLANK микросхемы MAX6921AWI, используется для регулировки яркости при помощи ШИМ, но как потом оказалось в микроконтроллере STM32F103C8T6, если вы включили SPI, то неважно в каком режиме вы это сделали, дуплекс, передача или прием. Все ножки задействованные под этот интерфейс больше не могут использоваться другими блоками, в моем случае таймером. Для того чтобы не вешать провода к свободным ногам(тем самым нарушая инь-янь платы) я сделал программный костыль. Так как оставалась возможность управления этой ногой как просто выводом, я зарядил аппаратный таймер с нужным параметром ШИМ, и в прерывании просто переключаю состояние ноги, тем самым генерируя ШИМ. Но вы смело можете менять STM32F103C8T6 на STM32F091CC, тут уже можно манипулировать ногами на свое усмотрение. Он полностью совместим по распиновке, но программно уже нужно переделывать.
Прикрепляю схему и плату без кода, ибо он еще сырой. См ссылку в конце.
P.S описать все нюансы сложно, так что пишите вопросы.
Схему и плату делал в DipTrace, версия 3.2.0.1. GitHub
Вакуумно-люминесцентный дисплей (VFD) GU128x64D-K610A8
Как говорится, настало время удивительных историй. Это был субботний поход по рынку, где хмурые и не очень дядечки пытались сбыть разнообразный радиотехнический хлам. Во время обхода этого уникального места, глаз, замыленный серыми коробками, черными куртками, невзрачными прилавками, сразу же зацепился за чистую, блестящую зеленую платку. Беглое гугление и расспросы продавца дали неожиданные результаты. Во первых, цена этого чуда в интернет-магазинах нашей родины оказалась весьма недурственной (за бугром предлагают в чуть дешевле). Во вторых, что самое важное, продавец понятия не имел что это, сколько стоит и работает ли! Ну и собственно я, будучи в прекрасном расположении духа, предложил сойтись на 300р. На том и порешили. Как оказалось позже, дисплей полностью исправный, не паяный, но имеет несколько незначительных сколов по горизонтальным граням. История попадания этого дорогого японского девайса на прилавок местного рынка наверняка запутанна и интересна, но к сожалению, она так и осталась окутана завесой тайны.
Так, с лирикой вроде покончено, а значит пора приступать техническому описанию этого прибора.
Как уже было сказано выше, это вакуумно-люминесцентный дисплей GU128x64D-K610A8 японской фирмы Noritake Itron.
Сразу хочу оговорится что, все сказанное ниже, является моей вольной интерпретацией даташита. Поэтому те, кто любит сразу знакомится с оригиналом, может смело открывать его и закрывать статью. Ну а для тех, кто остался, кратко пробежимся по перечню основных особенностей дисплея:
- Разрешение его 128×64 точек, цвет свечения бирюзовый. Кстати на картинках цвет несколько искажен.
- Питание 5В, заявленное потребление 410мА. У меня потреблял с полностью выключенным экраном 0.25 А, с полностью включеным — 0.3 А.
- 4 ASCII шрифта 5×5, 5×7, 10×14, 7×15 точек соответственно.
- Наличие 4-ех интерфейсов для общения: SPI, UART, I2C, параллельный 8-битный.
- Наличие 8 портов ввода-вывода доступных пользователю, которые в том числе обладают возможностью обслуживать 4×4 клавиатуру.
Уже довольно неплохо, не правда ли? То ли еще будет :).
Кстати, мне все не давала покоя кнопочка, расположенная на тыльной стороне дисплея. И как оказалось не зря. Нажатие на нее инициирует инженерное меню, которое позволит провести ряд манипуляций. В их число входит запуск тестов (ничего особенного, сменяющиеся друг за другом статичные картинки, где пиксели либо горят все, либо в шахматном порядке), выбор интерфейса, с дальнейшей его настройкой (baudrate для UART, порядок данных и фронт для SPI и прочее) и опции работы с EEPROM (сама она нужна для макросов, но о них попозже). Вот так вот выглядит первая страница инженерного меню.
Сердцем данной конструкции служит ATMega32. И видимо трудолюбивые японцы под завязку забили флэш программой управления, так как возможности по контролю и управлению дисплеем она предоставляет просто широчайшие! Рассмотрим их поподробнее.
Управление курсором
Поддерживает ASCII команды для бэкспейса, горизонтальной табуляции, перехода на строку ниже/выше, возврата к началу строки, а также возврату в «начало» экрана (0,0) и ручной установки координат курсора.
Режимы работы
Позволяет работать в текстовом режиме, когда курсор автоматически перемещается на следующую позицию, а также в графическом, когда напрямую можно управлять каждым пикселем.
Макросы
Возможно сохранить в EEPROM до 8 макросов общим объемом до 468 байт. Макрос 0, если он есть, выполняется сразу при включении. Очевидно, что это дает возможность создать экран загрузки, а также записать в макросы какие-то графические объекты, дабы не тратить каждый раз время на их проталкивание в интерфейс.
Режимы областей и окон
Предоставляют возможности для установки, очистки, инверсии, обводки целых областей, а также возможности для создания бегущих и мигающих строк. Также есть настройки смены картинки слева-направо, справа-налево, сверху-вниз и так далее во всех мыслимых и немыслимых направлениях. Кстати, заливать целые области можно не просто сплошным цветом, а одним из 16 узоров размером 16×16 или даже определить дополнительно один свой узор. Все это сделано для того, чтобы написание интерфейсов и меню было занятием легким и непринужденным.
Порты ввода-вывода
Пользователю предоставлен в управление целый порт A контроллера ATMega32. Можно переключать его направление, устанавливать его состояние и считывать его значение. Также его можно перевести в режим сканирования, тогда он может обслуживать клавиатуру 4×4. Стоит отметить что параллельный интерфейс висит на этом же порту.
Управление дисплеем
Можно управлять яркостью дисплея — доступно 8 уровней яркости (по умолчанию максимальный). Отключать или включать дисплей, а также осуществлять все те же настройки, что доступны через инженерное меню.
Вот собственно обзорной экскурсии и конец. Такой вот интересный дисплейчик, жаль конечно что не распространен. Теперь лишь осталось найти устройство, которое будет достойно такого красавца :)