Главная » Хабрахабр » Часы на газоразрядных лампах (ГРИ), они же Nixie clock

Часы на газоразрядных лампах (ГРИ), они же Nixie clock

Концепция проекта

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

Задачи создать прибор для массового производства не ставилось.

Решения принимались исходя из собственных представлений о красоте, стоимость комплектующих не учитывалась. Поэтому бюджет проекта заметно больше разумного. Я использовал ГРИ типа ИН-12.
ИН12 наполнены смесью неона (либо смесью инертных газов) и паров ртути. Реально ограничения конечно есть всегда и, например, покупать большие ГРИ (газоразрядные индикаторы) типа ИН18 я не стал – цена их больше интуитивно определенной границы и они не вписывались в мою концепцию внешнего вида изделия. Другие ГРИ могут не содержать ртути и давать чистое неоновое свечение. Пары ртути обеспечивают значительный рост долговечности прибора и придают синеватый оттенок свечению плазмы.

Очень желательно, чтобы время при включении устанавливалось автоматически и не требовало никаких манипуляций от пользователя. Основная функция часов – показывать точное время (КЭП, привет!). Подобные приборы с десятком кнопок и сотнями функций, вызываемых разнообразными комбинациями нажатий и времен нажатий, вызывают у меня тихую грусть. С моей личной точки зрения кнопки на таких приборах не нужны совсем. Ничего другого не предусмотрено и попытки отобразить пункты меню и пр. Во-первых – ГРИ хорошо приспособлены для отображения только чисел. То же самое относится и к дополнительным функциям типа будильника и пр. на мой взгляд – применение негодного инструмента.

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

Norman Дизайн привычных вещей. Этот вопрос прекрасно рассмотрен в книге Donald A. Процитирую один пассаж:

Первый раз был самым кошмарным. «Во время поездок я пользовался несколько раз диапроектором фирмы Leitz. Когда нужно было перейти к следующему слайду, ответственный за показ студент осторожно нажал на кнопку и с ужасом начал наблюдать, как подставка поехала в обратную сторону, выскользнула из диапроектора и упала со стола на пол, перемешав все слайды. Я начал читать лекцию и показал первый слайд. В произошедшем был виноват не студент, а этот элегантный диапроектор. На то, чтобы расставить слайды по порядку, ушло 15 минут. Никто не смог бы сделать все правильно с первого раза.» Как может одна кнопка выполнять две противоположные функции?

Проблема была в том, что одна кнопка выполняла две противоположные функции – короткое нажатие выполняло смену слайда вперед, длинное – назад.»

Такие устройства оптимально настраивать с их собственной веб страницы с использованием компьютера, планшета или смартфона. Продолжим обсуждение настройки часов.

Во-вторых – часы на ГРИ не могут использовать автономный источник питания поскольку типичная мощность потребления (200 Вольт * 7 мА = 1400 мВт или 1. Будильник для часов с ГРИ на мой взгляд не нужен – во-первых, рядом всегда есть сотовые с такими функциями и гораздо более удобным интерфейсом. Следовательно, часы с ГРИ будут питаться от сети, и функция будильника окажется зависимой от надежности сети. 4 ватта) довольно велика и выходит за разумные пределы для химических источников тока.

Из вышеприведенных рассуждений вырисовывается следующая система:

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

Строгость этого правила я тем не менее нарушил, добавив следующие возможности:

Эта функция реализует мою личную потребность в знании наружной температуры, когда я утром собираюсь на работу. Часы могут показать уличную температуру, влажность и давление атмосферы. Функция оказалась удачной и весьма востребована как мной, так и членами моей семьи. Я застегиваю рубашку каждый день в одном и том же месте и когда часы обнаруживают меня там – показывают последовательно наружную температуру, влажность и давление воздуха в миллиметрах ртутного столба. При превышении таймаута (данные устарели) часы показывают текущую дату. Данные об уличной температуре, давлении и влажности принимаются автоматически и запоминаются на время между посылками от внешнего источника. При проектировании часов предполагалось, что внешнюю команду можно будет отдать голосом, например, сказать: «Часы, погода!». В моей домашней системе данные о параметрах внешней среды поступают с интервалом 10 минут, таймаут «данные устарели» установлен на 30 минут. Поэтому в дальнейшем голосовое управление было заменено на метод определения присутствия человека перед часами по данным времяпролетного лазерного локатора. Однако при макетировании оказалось, что этот способ ненадежен и неудобен. Часы должны показать данные погоды, если перед ними постоять примерно секунду.

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

Именно этот эффект, единственный из всех, мне очень нравится! Обязательные требования включили в себя также эффект плавной смены цифр.

Яркость свечения индикаторов должна подстраиваться под внешнюю освещенность, сохраняя неизменным контраст изображения.

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

Реализация задуманного, аппаратное решение

Выбор ГРИ

Для отображения времени и др. данных применены четыре ГРИ ИН-12А, две ИН-12Б и одна ИН-15А.

ИН-12Б содержат точки, которые я использовал для разделения часов-минут-секунд.

ГРИ ИН-15А может показывать ряд спецзнаков “+”, “-“, “%”, “P” и др., размещен в начале строки.

Оптимальное расстояние между индикаторами.

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

Синхронизация с серверами точного времени

Рассмотрим способы автоматического получения точного времени:

  1. Запрос по интернету на сервер точного времени.
  2. Глонасс\GPS приемник. К сожалению, в ряде случаев не работает: например, в моей квартире в глубине комнаты сигнал от спутников пропадает, сказывается неудачная конфигурация окружающих строений, в которой чистое небо видно только непосредственно у окна.
  3. Сотовая сеть. В теории можно запросить время у сотовой станции без регистрации (т.е. без симкарты). Я не пробовал. Теоретически наиболее универсальный способ, не требующий ничего от пользователя.
  4. Сигналы точного времени на длинноволновых диапазонах. Сложен для применения, нет портативных готовых решений.

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

Выбор процессора и микросхем управления ГРИ

Для управления часами требуется процессор с возможностью выхода в инет. Из доступных – это платы на основе ESP8266. Изучение вопроса показало, что плата дешева, распространена, имеет богатое готовое программное обеспечение, созданное энтузиастами, может программироваться в среде Ардуино.

Выбор системы (микросхем) управления ГРИ

ГРИ питаются от достаточно высокого напряжения около 200 вольт. По паспорту (см рис 1) ИН12 требуется не менее 170 вольт для нормального возникновения тлеющего разряда при токе до 2 мА. Система управления должна быть способна коммутировать ток в несколько миллиампер и выдерживать напряжения в районе 200 вольт. В Советском Союзе выпускались микросхемы К155ИД1 (133ИД1 и т.п.) (высоковольтный двоично-десятичный дешифратор). Они прекрасно работали в статическом режиме, на одну лампу требовался 1 дешифратор. Сейчас эти микросхемы доступны из старых запасов и даже выпускаются малыми партиями минским заводом Интеграл. В принципе – неплохой выбор для часов на микросхемах-счетчиках. Однако их сложно использовать в системе на микропроцессоре из-за ограниченности количества выводов у микропроцессоров. Так, у принятого за основу часов ESP8266 всего с десяток выводов, при этом часть имеет определенные ограничения. Для 7 дешифраторов требуется 28 выводов, либо промежуточный регистр, в который надо последовательно выводить данные и затем выдавать параллельно на К155ИД1, что резко усложняет схему.

Паспорт индикатора тлеющего разряда ИН-12
Рис 1.

Паспорт индикатора тлеющего разряда ИН-15
Рис 2.

Дело в том, что ГРИ – резко нелинейный прибор и управлять его яркостью аналоговым способом изменением напряжения – очень сложно из-за высокой крутизны характеристики ток – приложенное напряжение. При использовании 155ИД1 эффект плавной смены цифр требует динамической индикации. Также на устойчивое включение лампы влияет внешняя освещенность – при уменьшении внешней освещенности возрастает как напряжение пробоя, так и время включения индикатора. В области малых яркостей газовый разряд становится неустойчивым. Кстати сказать, высокая крутизна зависимости тока через газоразрядный прибор от приложенного напряжения используется для получения стабильного напряжения, фактически такой газоразрядный прибор является стабилизатором напряжения. Внешние фотоны служат своеобразной зажигалкой, инициаторами разряда. Поэтому для управления яркостью ГРИ требуется применение импульсного режима питания, в котором яркость пропорциональна среднему току через ГРИ, который в свою очередь пропорционален ширине имульса.

Так, из-за особенности схемотехники 155ИД1 (относительно низковольтные ключевые элементы – всего 60 вольт), возможны засветы соседних цифр и другие нежелательные эффекты. Динамическая индикация при использовании 155ИД1 + ГРИ вполне возможна, но имеет ряд ограничений. На сайте RADIOKOT. С этими эффектами борются разнообразными ухищрениями – как аппаратными, так и программными. RU есть огромная тема (https://radiokot.ru/forum/viewtopic.php?f=3&t=3210), посвященная NIXIE CLOCK, я прочел ее всю и сделал для себя выводы – динамическая индикация непригодна для моих целей.

Структурная схема показана на рис 3. Поиск по интернету дал отличный заменитель 155ИД1 – это микросхема HV5622, представляющая 32-х битный сдвиговый регистр с высоковольтными выходами.

Структурная схема HV5622, Supertex inc.
Рис 3. ©

Микросхемы можно включать последовательно в цепочку. HV5622 способна коммутировать напряжения до 230 вольт, принимать данные по последовательному интерфейсу с тактовой частотой до 8 МГц. Единственное, что вызывало некоторые сомнения – питающее напряжения. Для управления потребуется всего 4 вывода от МК: данные, тактовый сигнал, сигнал записи в выходной регистр и сигнал включения. А мне хотелось бы питать микросхемы от 5 вольт, да еще управлять ими логическим сигналом с уровнем 3. По мануалу оно должно быть не менее 8 вольт. В инете я нашел пару примеров использования таких микросхем и питания их от 5 вольт. 3в. Практика показала, что и так все отлично работает от 5 вольт. Поэтому при разработке я на всякий случай предусмотрел возможность установить преобразователь логических уровней и питания 5622 более высоким напряжением, но устанавливать эти узлы сразу не стал.

Питание часов

Для питания часов на ГРИ требуется источник питания с двумя выходами: на 5 вольт с током в районе полуампера и на 180-200 вольт с током около 10 мА. Стандартно авторы схем подобных часов решают вопрос питания так: используется внешний импульсный блок питания 220 ->12 вольт, из которых внутри часов делается 5 вольт, а 180 вольт для питания ГРИ получаются вторым импульсным преобразователем из входных 12в. Т.е. по сути в общей цепи питания используется 2 импульсных преобразователя, первый из которых делает 220 – 12, а второй 12 – 180. На мой взгляд – неэффективно. Поэтому я выбрал очень традиционный путь использования готового тороидального трансформатора TorAN15. Внешний вид этого трансформатора представлен на рис 4.

Трансформатор TorAN15
Рис 4.

COM. Я купил этот трансформатор на сайте ISTOK2. 3 в. У трансформатора есть две вторичные обмотки – одна на 170 вольт, вторая на 6. Высокое для питания ГРИ выпрямляется диодным мостом и фильтруется на конденсаторах. Это дало возможность обойтись простейшей схемой источника питания. Низкое для питания микросхем также выпрямляется диодным мостом, фильтруется на электролитическом конденсаторе и стабилизируется на интегральном стабилизаторе 7805. Эти детали использованы из ненужной люминесцентной лампы-сберегайки. Плюс полное отсутствие высокочастотных помех. КПД такой схемы существенно выше системы с двумя преобразованиями, надежность системы гораздо выше. Но тяжесть трансформатора в данном случае скорее плюс – мне хотелось, чтобы часы были брутально массивными. Минус – немодно и трансформатор тяжелый.

В дальнейшем был добавлен узел определения человека перед часами на базе времяпролетного дальномерного лазерного модуля VL53L0X. Итак, схема часов определена: это готовый модуль на базе ESP12E, три микросхемы HV5622, датчик освещенности на базе MAX44009 и традиционный (я бы даже сказал консервативный) блок питания. Принципиальная электрическая схема часов приведена на рис 5.

Dronsky Nixie clock.
Рис 5. Схема электрическая принципиальная

Я разделил коммутацию выводов так: первые три лампы – первая HV5622, вторые три лампы – вторая HV5622, оставшаяся HV5622 управляет лампой со спецсимволами и точками в двух ИН12Б.

То, что раз в секунду вывести 96 бит не составит труда для ESP12E – сомнений не вызывало. На этапе проектирования было неясно, хватит ли быстродействия канала SPI для вывода данных для плавной смены цифр. По расчетам должно хватить с запасом. А вот хватит ли быстродействия для вывода эффектов? Но как известно, гладко было на бумаге…

Практическая проверка показала, что быстродействия канала SPI хватает с огромным запасом на эффекты даже при тактовой 4 МГЦ. Поэтому поначалу был запланирован вывод данных в три этапа, в каждую микросхему отдельно. В результате все микросхемы соединены в цепочку и вывод 96 бит производится одной командой. Даже возможность повысить быстродействие вдвое оказалась невостребованной. На рис 6 представлена запись логического анализатора вывода семи знаков на ГРИ. По расчетам время вывода 96 бит должно составить 24 мкс. Суммарное время вывода, с учетом генерации сигнала LE, составляет менее 30 мкС.

Запись логического анализатора вывода 96 бит каналом HSPI c тактовой частотой 4 МГц
Рис 6.

Вывод DI (Data Input) второй и третьей микросхемы присоединены к выводам DO (Data Out) первой и второй микросхемы соответственно. Выводы CLOCK всех микросхем объединены. До момента переноса лампы выводят то, что запомнено в выходном регистре. Выводы LE (Latch enable) объединены, на них подается импульс, переносящий данные из сдвигового в выходной регистр. Мануал рекомендует подать питание, сделать первый вывод данных и затем включить выходные каскады. Выводы BLOCK объединены, присоединены к земле через резистор 1к, чтобы удерживать выходные каскады HV5622 в выключенном состоянии до запуска программы в МК.

Управление яркостью

Для управления яркостью ГРИ с целью поддержания постоянного оптимального контраста индикаторов используется вывод BLOCK, на который подается ШИМ сигнал частотой 2500 Гц. Использована достаточно высокая частота ШИМ сигнала управления, что гарантировало отсутствие эффектов стробоскопа и др. В соответствии с нормами (СНиП (Строительные Нормы и Правила) 23 — 05 — 2010 (актуализированная редакция СНиП 23 — 05 — 95) и Санитарным правилам и нормам СаНПиН 2.21/2.1.1.1278-03) считается, что человек не воспринимает частоту пульсаций освещенности выше 300 Гц. В данном случае превышение частоты ШИМ почти на порядок обеспечивает должный уровень зрительного комфорта.

Эффект плавной смены цифр

Для того чтобы получить зрительный эффект плавной смены цифр нужно в течение времени смены одной цифры на другую (обычно 200-250 мС) включать попеременно старую и новую цифры, причем время горения старой цифры должно уменьшаться, а новой – увеличиваться. Алгоритм смены цифр (подпрограмма change()) выполняет 60 циклов. При запуске алгоритма смены цифр первая цифра включена 100% времени цикла, а вторая 0%. По мере прохождения циклов время включения первой цифры уменьшается со 100% до 0%, а время включения второй – увеличивается с 0% до 100%). Таким образом, алгоритм плавной смены цифр в течении 200 мС и 60 циклов уменьшает яркость первой цифры до погасания, а второй – до полной яркости.

Остальное время секундного интервала цифры включены непрерывно и статично, их общая яркость понижается путем управления общим включением\выключением индикации ШИМ сигналом на выводах BL.

Видно, что в начале выполнения подпрограммы смены старая цифра включена максимальное время, а новая – минимальное и за время смены (примерно 250 мС) время горения старой цифры уменьшается до 0, а новой нарастает до максимума. На рис 7 показаны сигналы, записанные логическим анализатором при смене цифр. Зрительно это проявляется как плавное уменьшение яркости старой цифры с одновременным «протаиванием» новой.

Запись сигналов управления при плавной смене цифр
Рис 7.

Видеозапись эффекта приведена тут

и тут

и тут:

Синхронизация с серверами точного времени

Изучив вопрос в интернете, я сделал вывод, что в основном авторы программ сами пишут (или используют готовые сторонние) подпрограммы для протокола NTP. Меня это несколько удивило, поскольку в SDK от Espressif упоминается встроенные функции для работы с реал тайм. Встроенный функционал обеспечивает запрос серверов времени (до трех), коррекцию времени (по моим наблюдениям – раз в 4-6 часов проходит запрос к тайм серверу), преобразование значения в виде юникс тайм в человеко-читаемый вид, коррекцию в соответствии с заданной тайм-зоной.

Из особенностей использования встроенной функции реал-тайм: на первый и несколько последующих запросов времени возвращается ноль и выдается диагностика «запустите rtc сначала» Как это сделать – я не нашел и поэтому просто ожидаю (пару секунд) пока не появится время, отличное от нуля.

Алгоритм запуска часов

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

Это функция, реализованная в SDK. ESP8266 запоминает эти реквизиты после успешного предыдущего присоединения самостоятельно в служебной памяти. В EEPROM также сохраняется и временная зона (число в диапазоне -12 — +12), которое в дальнейшем используется для правильного преобразования времени в локальный формат. Если это присоединение не удалось – выполняется следующая попытка, но имя и пароль к точке доступа используются прочитанные из EEPROM.

168. Если и это присоединение не удалось, то режим работы меняется на «точка доступа» и веб-страничка часов становится доступной по стандартному адресу 192. 1 для любого устройства, присоединенного к этой точке доступа. 4. Со смартфона, планшета или ноутбука надо зайти на страничку устройства, выбрать точку доступа и ввести пароль. В моем случае имя точки доступа ESP_D. Это связано с особенностями поведения системы в ситуации, когда присоединение к точке доступа не удалось. Пока включен режим «точка доступа» — режим «клиент» выключен. Внешне это будет проявляться как неприятное торможение интерфейса. Систему будет непрерывно повторять попытки присоединиться, будет занята только этим и ни на что другое ресурсов практически не останется. Внешний вид страницы представлен на рис 8.

Внешний вид WEB интерфейса часов и командная строка, демонстрирующая ответ на команду ping
Рис 8.

Точки доступа отсортированы по силе сигнала, верхняя строка – точка доступа с самым сильным сигналом и highly likely самая близкая (т.е. На этой страничке отображаются все найденные точки доступа. Надо ввести пароль, выбрать тайм зону и нажать ОК. та, к которой надо присоединяться). Если присоединение удалось – то параметры будут запомнены в EEPROM. Система включит режим «клиент» (одновременно с «точкой доступа»), попытается присоединиться. Если присоединение не удалось – появится соответствующее сообщение на страничке и можно еще раз попытаться ввести пароль и т.д.

страничка часов становится доступной только из внутренней сети.
Чтобы можно было обращаться к часам по имени (в моем случае «esp») запускается библиотека NBNS, обеспечивающая отклик по протоколу NetBios. После удачного входа в сеть режим «точка доступа» будет выключен и останется только режим «клиент», т.е. Работа библиотеки позволяет часам откликаться на команды типа ping esp и обращаться к ним можно будет просто по имени esp

Практически все описанные в инете устройства на ESP8266 не используют этот простой и удобный механизм. По неясной для меня причине эта замечательная библиотека, формирующая отклик на широковещательный запрос типа «на каком адресе «имя»?» и позволяющая забыть о муторной процедуре определения IP адреса прибора по внутренним данным рутера (коммутатора), используется очень редко. Лень должна двигать прогресс – но в данном случае не двигает.

Далее запускается основной цикл программы, в котором происходит следующее:

  • Опрашивается текущее время и при переходе секунд запускается смена отображения времени.
  • Производится опрос датчика освещенности и подстройка скважности ШИМ сигнала, которым управляется яркость часов. Целью подстройки является сохранение неизменной контрастности цифр при изменении освещенности в помещении.
  • Производится опрос датчика VL53L0X. Этот датчик представляет собой времяпролетный лазерный дальномер, способный измерять дистанции до предмета до 2 метров.

Эксперименты показали, что 2 метра – это в идеальных условиях, когда в качестве отражателя используется лист белой бумаги или алюминиевая фольга с коэффициентом отражения, близким к единице. Для обычных предметов с неидеальным коэффициентом отражения (ткань, кожа человека и т.п.) дистанция уверенного определения несколько более 1 метра. Если датчик показывает наличие предмета перед часами – запускается подпрограмма показа текущей температуры на улице, влажности и давления воздуха. Приняты меры к некоторому повышению помехоустойчивости – используется простейший алгоритм «более 50% срабатываний». Это значит, что за интервал 800 мС цель должна быть обнаружена на дистанции менее 1 метра более чем в половине измерений дальности. При отладке система показывала, что обычно получается 50-60 срабатываний при нахождении цели в поле зрения датчика.

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

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

На видео показана реакция системы на появление препятствия в поле зрения лазерного локатора:

Первоначальный план запуска индикации внешних данных состоял в использовании микросхемы распознавания голосовых команд. Для этого я использовал микросхему WTK6900B02 (распознаватель голосовых команд), любезно предоставленную фирмой Sound Technologies. По описанию, микросхема должна распознавать десяток звуковых команд и выдавать двоичный код, соответствующий принятой команде. Импульс с микросхемы был заведен на один из выводов ESP8266 и к нему был прицеплен обработчик аппаратного прерывания. По аппаратному прерыванию фиксируется факт распознавания голосовой команды. В полученной мной микросхеме были предзаписан ряд команд на английском языке. Я упорно тренировался в «правильном произношении» команд, так, чтобы они распознавались. Оказалось, что говорить надо вовсе не с оксфордским произношением, а с китайским акцентом :)), достаточно громко.

Лучшее, что я получил – примерно 50% правильного распознавания. Несмотря на значительное потраченное время, мне не удалось добиться надежного распознавания голосовых команд. Поэтому я был вынужден применить другой механизм запуска отображения внешних данных – лазерный измеритель дистанции VL53L0X.

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

Вывод данных в регистры HV5622

Как я уже упоминал выше, для управления газоразрядными лампами требуются микросхемы, способные коммутировать достаточно высокое напряжение. Я выбрал микросхемы HV5622, которые представляют собой 32-х разрядный регистр с последовательной записью и параллельным считыванием. Катоды ламп присоединены каждый к своему выводу HV5622. Для зажигания конкретной цифры необходимо на присоединенный вывод микросхемы вывести 0. К первым двум HV5622 присоединены катоды шести ГРИ, к третьей HV5622 – точки разделители часов-минут и минут-секунд и катоды седьмой лампы со спецсимволами. Для включения нужных цифр в лампах надо вывести в регистр 32-х битное число, в котором лог 1 (данные внутри HV5622 инвертируются) соответствуют нужным катодам ламп. В программе заведены массивы размерностью 10 32-х разрядных переменных. Каждый элемент такого массива содержит двоичное число с лог 1 на одной из позиций, вывод которого в регистр приведет к зажиганию нужной цифры. Так как каждая микросхема управляет несколькими ГРИ – то для вывода требуется предварительно сформировать из нескольких элементов одну 32-х разрядную переменную, состоящую в основном из логических 0, где лог 1 соответствуют нужным цифрам в каждой лампе.

Значительное количество и тесная компоновка выводов HV5622 делают перепайку двух соседних проводов затруднительной операцией. Стоит упомянуть, что решение использовать массивы для управления катодами ГРИ обладает серьезным достоинством: если при пайке жгутов от панелек ГРИ к панелькам HV5622 была сделана ошибка и перепутаны выводы ГРИ – то для исправления достаточно поменять в программе константу, ничего не перепаивая.

Делать это «ногодрыгом» неразумно – слишком долго, затратно по времени. Для полного заполнения всех трех регистров требуется вывести 3 32-х разрядных переменных (суммарно 96 бит).

C запуском этого механизма пришлось помучиться. К счастью, ESP8266 имеет в своем составе аппаратный механизм (HSPI) последовательного обмена данными, а в SDK имеются функции доступа к этому механизму. Чтобы разобраться с механизмом HSPI я использовал логический анализатор. Трудность оказалась в том, что было неясно куда класть 32-х разрядные переменные для вывода в режиме HSPI. Поиск в инете ничего не давал, но в какой момент я понял, что если есть инструкция вида WRITE_PERI_REG(SPI_W0(HSPI), d0); то можно попробовать написать WRITE_PERI_REG(SPI_W1(HSPI), d1); и далее WRITE_PERI_REG(SPI_W2(HSPI), d2); где d0, d1, d2 – 32-х разрядные переменные. После ряда экспериментов я понял, что 96 бит выводится, однако это нужное 32-х битное число вначале и два 32-х битных числа, содержащие произвольный мусор. надо сначала разложить данные по регистрам SPI_W0 — SPI_W2, а затем выдать команду запуска обмена. Т.е. Отмечу также, что модуль HSPI может выводить до 512 бит и регистров таких имеется всего 16 штук: W0 – W15.

Сигнал LE, по которому данные перемещаются в выходной регистр HV5622, генерируется программно.

Отладка системы

Я не рискнул отлаживать систему сразу с полноценным высоким напряжением (230 вольт) и сделал из десятка светодиодов отладочный индикатор с рабочим напряжением 5 вольт. После отладки, когда я убедился, что правильно включаются нужные светодиоды, были смонтированы ГРИ в панельки и подано высокое. В результате такой последовательности отладки не пострадала ни одна микросхема и ни одна индикаторная лампа :). Фотография узла, примененного для отладки, показана на рис 9.

Фотография отладочного светодиодного узла.
Рис 9.

Короткое видео процесса отладки тут

Корпус

Изначальная задумка была сделать брутальный корпус из толстого металла типа меди, латуни или бронзы. Однако поскольку Wi-Fi соединению требуется корпус из диэлектрика – то в окончательном варианте осталась только лицевая панель из толстого металла. Беглый поиск в интернете фирм, выполняющих корпуса на заказ, дал цифру в районе 5000 р за корпус. На мой взгляд, это неразумная сумма в текущих обстоятельствах. Поэтому я подобрал готовый корпус (Gainta G2119C), купил его по дороге на дачу в Щербинском магазине Чипа-и-Дипа и остановился на этом, оставив на потом вопрос лицевой панели и возможно другого корпуса.

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

Внешний вид корпуса на сегодняшний день представлен на рис 10.

Внешний вид корпуса часов
Рис 10.

Заключение

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

  • Режим статической индикации с одновременным эффектом плавной смены цифр
  • Использование микросхем HV5622 для управления ГРИ
  • Данные в HV5622 записываются с использование аппаратного механизма HSPI
  • Точное время берется с серверов точного времени из интернета
  • Обращение к часам возможно по имени из внутренней сети
  • Настройка требуется один раз при первом запуске.
  • Полное отсутствие кнопок, будильников и т.п.
  • Плавная регулировка яркости свечения ГРИ с целью сохранения постоянной контрастности изображения в заданных границах изменения внешней освещенности
  • Часы реагируют на приближение человека и показывают уличные температуру, влажность, давление воздуха.

Я доволен 🙂

→ Архив с программой лежит тут


Оставить комментарий

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

Перенос конфигурации АТС в сервис 3CX PBX Express

В этой статье мы расскажем, как в сервисе 3CX PBX Express восстанавливать резервные копии существующих инсталляций АТС. Возможность восстановления конфигурации позволяет, например, переместить локальный сервер в облако, сменить хостинг или восстановить АТС в облаке после серьезного локального сбоя. Единственное требование ...

Первые штрафы по GDPR: кого уже наказали

GDRP вступил в силу больше шести месяцев назад, но первые «письма счастья» регуляторы начали выписывать лишь недавно. В материале — о тех компаниях, которые их уже получили. / фото Kiefer CC BY-SA «Мягкий запуск» GDPR GDPR вступил в силу 25 ...