3dx

Народное творчество

AURORA. Nixie clock. First step.

43 комментария

Мне всегда нравились старые советские приборы. Они были большие, тяжелые и как бы намекали своей тучностью о своей важности. Но больше всего в них мне нравились индикаторы, те самые индикаторы тлеющего разряда которые сейчас модно называть nixie. Мой дед когда-то очень давно сделал часы, с использованием таких индикаторов, на простой логике. Родственники говорят, что они даже работали, но я застал их уже в «потухшем» состоянии. Как я уже говорил здесь, мне досталось хорошая горсть этих самых никсов из которых я решил собрать и себе часы. Может кто-то когда-то скажет — «Вон у него тоже были такие часы, хоть сейчас они не светят, но раньше они работали, зуб даю!»

Собирался я долго, и с этой стороны смотрел, и стой заглядывал, примерялся, приценялся. Первой пробой стал тестер газоразрядных индикаторов. Работает! Начал продвигаться дальше. «Учебниками» в этом деле стали пару сайтов (первый и второй) и Форум. Это не все ресурсы, а только самые те, которые больше всего помогли. Начитавшись и насмотревшись, часы «обросли» идеями:

  • Сделать универсальную платформу, что бы при замене типа индикаторов и их количества можно было уложится в минимум работы.
  • Без smd монтажа, для простых людей.
  • А вдруг кто-то захочет красочную подсветку?
  • А если я захочу радио послушать?

В качестве мозга бала выбрана плата Arduino pro mini на базе кристалла ATmega168. Привлекли ее размеры и среда разработки, к которой я уже успел привыкнуть. Много читал про негодование публики об использовании ардуины при создании каких-либо законченных проектов. Если честно, я не понимаю почему. На этих платах распаяны обыкновенные atmel-овские чипы и программировать ардуины можно хоть на ассемблере для AVR. Если взять конкретно про мини, то ее габариты ненамного больше чем ATmega168 (328) в DIP исполнении, при этом уже имеем на борту, хоть и вшивенький, но стабилизатор напряжения, кварц и подтяжку сброса. А самое главное — цена! Микроконтроллер со всей необходимой обвязкой стоит дешевле, чем голый МК в DIP корпусе. МК в корпусе TQFP32 еще может посоревноваться в цене, но монтаж и изготовление плат под нее для меня весьма затруднителен. С микроконтроллером разобрались.

Если часы питаются от сети 220В, то должна быть гарантия, что во время отсутствия электропитания время сбиваться не будет. Для этих целей я для себя выбрал микросхему часов реального времени DS3231,  она вмещает в себе термокомпенсированный кварцевый генератор и кварцевый резонатор, что предвещает хорошую точность хода. А с ценой такая же история, как и с микроконтроллером, заказать распаянную платку с микросхемой в Китае гораздо дешевле чем покупать рассыпухой.

Много текста, схему в студию! И тут

Управление индикаторами без использования отечественной 155ид1, обошелся копеечным двоично-десятичным низковольтным дешифратором, транзисторами и стабилитронами. Лампы питаются от повышающего преобразователя на микросхеме MC34063. Сказал хочу приемник, значит будет приемник. Он выполнен на микросхеме TEA5767, собственно я применил готовый китайский модуль, опыт использования такого модуля был здесь. Усиливает сигнал PAM8403. Паршивенькое сочетание, но для начала пойдет. Забыл про самое главное — лампы. Здесь я применил две лампы ИН-12Б, по краям, с запятыми, первая запятая указывает на то, что включен будильник, вторая для индикации частоты настройки при использовании радио. Средние лампы — ИН-12А, без запятых. В качестве разделительной точки — ИНС-1. Далее по тексту будут еще пояснение конкретных моментов, а сейчас платы.

Как уже говорил, хотел сделать более-менее универсальную конструкцию, поэтому платы побил на модули. Хочешь 6 ламп — пожалуйста. 4 лампы? Не вопрос, просто откидываем лишнее. Не нужна подсветка или радио? Просто не делай эти платы. Ну это пока были просто картинки пока не заказал первые образцы. Именно заказал, потому что побоялся, что качественно ЛУТ-ом у меня не получится. Вот результат:

aurora_first_step_01

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

Затарился рассыпухой.

aurora_first_step_02

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

aurora_first_step_03

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

aurora_first_step_04

Вот и лампы установлены.

aurora_first_step_05

Соединятся платы между собой будут кабельными косичками. Провода я успешно надергал из VGA кабеля для монитора.

aurora_first_step_06

А на фото ниже плата питания. На ней отлично разместился понижающий трансформатор 220-14 В. Его работу я проверил сразу после монтажа, во время отладки и тестирования его использовать не буду, игры с сетевым напряжением чревато последствиями. Питание я подал 9В от лабораторного блока питания, девяти вольтовый стабилизатор пока не впаивал. Он будет запаян перед установкой плат в корпус. Напряжение питания ламп — 190 В. Забегая на перед, скажу, что законченное устройство вместе с подсветкой потребляет не более 200 мА при 9 В, поэтому трансформатор на ток больше 500 мА применять бессмысленно.

aurora_first_step_08

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

aurora_first_step_07

На фотографиях ниже, модульная плата с радиоприемником на чипе TEA5767.

aurora_first_step_11

aurora_first_step_12

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

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

aurora_first_step_10

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

Программа писалась в среде разработки Arduino IDE. От использования библиотек для TEA5767 и DS3231 я отказался, не вижу в них смысла, так как эти библиотеки все равно используют библиотеку «Wire». Достаточно посидеть над даташитами на эти микросхемы и все становится понятно, что и по какому адресу надо передавать. Одна особенность библиотеки «Wire», все функции библиотеки используют 7-битную адресацию! Это важно, так как я постоянно пытался пропихнуть 8-й бит с направлением передачи данных, понятное дело ничего не работало. Это наверно от избытка ума, я же начитался даташитов, а вот на мануал по Arduino меня не хватило. Должно быть так:

  • Макрос для конвертации числовых значений прописывается вне функции:

byte decToBcd(byte val) {return ((val / 10 * 16) + (val % 10));}
byte bcdToDec(byte val) {return ((val / 16 * 10) + (val % 16));}

  • Запись:

Wire.beginTransmission(0x68);
Wire.write(0x00);
Wire.write(decToBcd(second));
Wire.write(decToBcd(minute));
Wire.write(decToBcd(hour));
Wire.write(decToBcd(weekday));
Wire.write(decToBcd(monthday));
Wire.write(decToBcd(month));
Wire.write(decToBcd(year));
Wire.endTransmission();

  • Чтение:

Wire.beginTransmission(0x68);
Wire.write(byte(0));
Wire.endTransmission();
Wire.requestFrom(0x68, 7);
second = bcdToDec(Wire.read());
minute = bcdToDec(Wire.read());
hour = bcdToDec(Wire.read());
weekday = bcdToDec(Wire.read());
monthday = bcdToDec(Wire.read());
month = bcdToDec(Wire.read());
year = bcdToDec(Wire.read());

У микросхемы DS3231 есть один чудный программируемый вывод, INT/SQW. На этот вход можно настроить сигнал по факту срабатывания будильника в самой микросхеме или вывести меандр с определенной частотой (1Hz, 1.024kHz, 4.096kHz, 8.192kHz). Меня заинтересовало возможность подачи сигнала один раз в секунду (1Hz). Если завести этот сигнал на прерывание, то можно успешно считать секунды без постоянного опроса DS-ки. По факту переполнения секунд инкрементируем минуты, потом часы. И я считаю это правильно, щелкать время должен контроллер, а опрашивать DS-ку только по крайней необходимости. Пин INT/SQW необходимо обязательно подтянуть к плюсу питания резистором 4,7 кОм. Вот команда для включения меандра с частотой в 1 Гц:

Wire.beginTransmission(0x68);
Wire.write(0x0E); //выставляемся в 14 байт по адресу 0Eh
Wire.write(B01000000); //Устанавливаем меандр на пине INT/SQW частотой в 1 Гц
Wire.endTransmission(); //Заканчиваем передачу

С микросхемой радиоприемника TEA5767  тоже относительно все просто.

frequencyB = 4 * (Fr * 1000000 + 225000) / 32768; // Fr-необходимая частота, например 98.5
frequencyH = frequencyB >> 8;
frequencyL = frequencyB & 0xff;
Wire.beginTransmission(0x60);
Wire.write(frequencyH);
Wire.write(frequencyL);
Wire.write(B10111000); // B10111000 — моно режим, B10110000 стерео режим
Wire.write(0x10);
Wire.write(0x00);
Wire.endTransmission();

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

aurora_first_step_13

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

Собираю бутерброд дальше.

aurora_first_step_15

aurora_first_step_16

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

 

aurora_first_step_22

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

Спереди можно увидеть фоторезистор, он предназначен для уменьшения яркости ламп в темное время суток. Но… В моем проекте используется динамическая индикация с частотой отображения каждой цифры примерно 56 Гц. В отведенный интервал времени для свечения конкретного индикатора, анодным ключом делаем некий ШИМ сигнал на основании полученного значения АЦП фоторезистора. Программно уменьшить скважность получается до определенного момента, а дальше я упираюсь в команды среды разработки, arduino IDE. Относительно долго они выполняются, надо переходить на прямое управление портами, минуя макро команды. Но это потом, на будущее. Яркость изменяется, но в небольшом диапазоне. Для отключения изменения яркости ламп, вместо фоторезистора необходимо запаять постоянный резистор 1 кОм. К слову, анодные сопротивления (смотри схему) у меня 10 кОм, для динамической индикации, а для статической оно должно составлять порядка 47 кОм. Каждый час происходит тренировка ламп в течении одной секунды повышенным током. Ну и пару картинок.

aurora_first_step_14

aurora_first_step_17

По конструктивным особенностям как бы все. Расскажу про функционал. Если часы не трогать, то как ни странно, они будут показывать время. При нажатии кнопки SB3 на пару секунд выводится дата. При нажатии кнопки SB2 включается радио, если оно включено в настройках. Кнопка SB1 отвечает за переход в меню основных настроек.

Основное меню:

  • Включение — отключение будильника.
  • Настройка минут будильника, если будильник включен.
  • Настройка часов будильника, если будильник включен.
  • Настройка цвета подсветки.
  • Настройка минут текущего времени.
  • Настройка часов текущего времени.

Существует и дополнительное меню, чтобы попасть в него нужно зажать SB1 до подачи питания.

Дополнительное меню:

  • Включение — отключение подсветки.
  • Использовать пищалку или радио.
  • Разрешение смены летнего времени на зимнее.
  • Установка дня недели. 1-й день понедельник.
  • Установка дня месяца.
  • Установка месяца.
  • Установка года.

Я думаю функционал понятен. Ну и все, отпаиваю секундные индикаторы и начинаю тестировать в пассивном режиме до того, пока не сделаю корпус. Но это будет уже другая статья.

aurora_first_step_18

aurora_first_step_19

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

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

Электроника обзавелась корпусом, статья про это тут.

Инструкция к изделию тут, там же есть некоторые пояснения по версиям прошивок.

Появилась версия часов на smd компонентах, платы значительно меньших размеров, почитать про них можно тут.


Материалы для скачивания: Скачать

Прошивки с номером 1.0х разработаны для настройки приемника переменным резистором. Прошивки с номером 1.1х разработаны для настройки приемника кнопками. Скачать их можно по ссылкам ниже.

V1.04

V1.11

 

Прошивать микроконтроллер необходимо программатором, я пользовался дешевым USBasp. Для его использования необходимо установить драйвера. Фьюз биты для ATmega168 и ATmega168P с кварцем на 16 МГц следующие:

  • low_fuses=0xff
  • high_fuses=0xdd
  • extended_fuses=0x00

Фьюз биты для ATmega328 с кварцем на 16 МГц:

  • low_fuses=0xFF
  • high_fuses=0xDA
  • extended_fuses=0x05

Залить прошивку можно через программу SinaProg.

43 thoughts on “AURORA. Nixie clock. First step.

  1. Уведомление: Тестер газоразрядных индикаторов | 3dx

  2. Уведомление: Из подстроечного в переменный | 3dx

  3. Уведомление: AURORA. Nixie clock. | 3dx

  4. здравствуйте еще раз
    подготовил платы в .lay
    1 — можно ли сделать на 4 лампах, только вместо мигающей лампы использовать точку во втором разряде, лампы выстроил на одинаковом расстоянии друг от друга,
    2 — сделать подсветку автоматической (чтобы цвет сам менялся),
    3 — перебор цифр сделать каждую минуту
    4 — можно ли вместо ds3231 использовать модуль ds1307?
    5 — для чего транзистор на сигнал на плате радио и не понятно подключение R12?
    6 — можно ли вместо многооборотного резистора как-то применить энкодер?
    это вообще можно сделать? (я имею ввиду прошивку)
    извините за вопросы и хотелки)
    спасибо
    с уважением, Игорь

    Нравится

    • 1-4. Прошивку сделать можно, ds1307 применить тоже можно. На днях посмотрю, возможно даже с не измененной прошивкой заработает. Но когда это смогу переписать прошивку — неизвестно. Во всяком случае, кристалл останется Atmega168 (328) и архитектура платы не измениться.
      5. Транзистор отключает питание приемника и усилителя. R12 спаренный переменный резистор, подключение, вроде, правильное: на выход звука — на землю и с ползунка снимаем «погашенный»сигнал.
      6. Теоретически можно, если отказаться от разделительной точки. Энкодер делать точно не буду, это займет у меня много времени и нервов, я ж не программист. В будущих планах перевести настройку на кнопки.

      Нравится

    • Если будете собирать мою конструкцию, учтите, что линейные стабилизаторы греются. В последствии мне пришлось установить радиаторы «хороших» размеров. В дальнейшем буду переходить на импульсные решения.

      Нравится

  5. В любом случае, спасибо
    Я пока буду собирать, то, что задумал, как у вас будет получаться, так и делайте
    Если в радио будет управление кнопками, то будет просто прекрасно
    Я так полагаю, что в качестве транзистора можно применить bc547 (или тот же А42) по схеме — положительный сигнал от ардуины через резистор в базу, эмиттер на землю, коллектор на нагрузку?
    По поводу нагрева не удивительно, помнится мне, что потребляемая мощность этого усилителя в пике примерно 1,5А , а стабилизатор сам рассчитан на такой ток. Тут надо думать про отдельный блок питания для усилителя.
    спасибо
    с уважением, Игорь

    Нравится

    • У меня сейчас на включение приемника стоит транзистор С945, нагрев не наблюдается.
      Усилитель до пика никак не дотянет. Суммарное потребление по 9В при включённом приемнике составляло порядка 200 мА. Сильный нагрев я ощутил когда установил платы в корпус, слабая вентиляция.

      Нравится

  6. Здравствуйте
    Наконец-то спаял платы, но еще вместе их не соединял
    Пока ломаю голову над разьемами на плате:
    1 — для чего разьем под разьемом от блока питания на основной плате? (возможно для переключателя для прошивки?)
    2 — где подключается пищалка к плате?
    спасибо
    с уважением, Игорь

    Нравится

    • Добрый день!
      Быстро Вы работаете!
      1. Я так понял, Вы имеете в виду перемычку. Через перемычку подается напряжение или непосредственно 5В на ардуину, или напряжение превышающее 5В на распаянный стабилизатор на платке ардуины. То есть от стабилизатора LM7805 на плате блока питания можно отказаться если ограничить потребление по 5В.
      2. Пищалка подключается в место разъема радиоприемника, подключение следует выполнять через транзистор.

      Нравится

      • Ага, по первому вопросу понял)
        А вот по второму не совсем, просто у вас в тексте написано, что в меню можно выбрать или пищалку или радио, вот я и подумал, что их можно ставить вместе
        В принципе, так как я отказался от секундных ламп и моргающего индикатора, то пищалку можжно вывести на какой-нибудь из этих выводов и управлять ей из меню)

        Нравится

        • По моей конструкции вместе работать радио с пищалкой не будут. Повесить пищалку на свободный пин можно, а если настройку радио перевести на кнопки, то освободится еще один пин. Но это переписывать прошивку.

          Нравится

          • Понятно, а допиливание прошивки планируется?

            Нравится

            • Планирую, после майских

              Нравится

              • Вы сейчас собрали на ds1307 или ds3231?

                Нравится

                • Дело в том, что у меня есть и то, и то, только ds1307 у меня в готовом модуле, а 3231 просто микросхема
                  А еще я собирал без индикатора секунд, поэтому, если можно, сделать мигающую точку между часами и минутами)

                  Нравится

                  • Я сейчас поправлю прошивку под ds1307, что бы Вы могли запустить часы. А потом потом постараюсь сделать все остальное. Было бы хорошо, если бы Вы повторили пожелания в части прошивки, одно пожелание — один пункт.
                    Какой микроконтроллер у Вас?

                    Нравится

  7. У меня про мини 168 на 5вольт

    Нравится

  8. Ок, сейчас на работе, вечером займусь подключением
    1307 подключать как и 3231?
    Сигнал int подключать?

    Нравится

    • Сигнал инт подключать обязательно, на этом у меня построена логика счета времени. Все подключения согласно даташиту. Прошивку сбросил на почту.

      Нравится

  9. так в том-то и дело, что в 1307 нет такого сигнала, есть сигнал SQW
    или это то же самое?

    Нравится

  10. Так его подключать к int ?

    Нравится

  11. Так он же на основной плате вроде уже стоит?

    Нравится

  12. На всякий случай напомнил

    Нравится

  13. Здравствуйте
    попробовал запустить сегодня часы
    ничего не вышло, при включении просто начинают перебираться цифры во всех четырех разрядах, причем без остановки
    пробовал прошивку для 1307 и вашу последнюю с сайта версия В
    подскажите, где копать?
    спасибо
    с уважением, Игорь

    Нравится

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

      Нравится

  14. Уведомление: Nixie clock. SMD version. | 3dx

  15. Как купить?

    Нравится

  16. Здравствуйте! Собрал Ваши часы по предложенной схеме и по вашим рекомендациям. Все заработало без проблем. Но в процессе работы выяснилось, что если будильник выставить на определенное время часов без минут, то минутное тикание будильника после минути.переходить в постояний писк, для прекращения Надо нажать кнопку » — » или » + » дважды. Подскажите пожалуйста где искать ошибку. С Уважением. Зураб.

    Нравится

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

      Нравится

  17. Спасибо за ответ. Версия прошивки V1.11 от 05_05_17, та, которая выложена на сайте. Конечно я все установки проверил, выбрана пищалка. При срабатывании будильника пищалка пищит прерывисто а потом постоянный писк.
    Приемник пока не установлен.
    Я попытался исправить код и добавил 535 -ю строку, но не знаю правильно ли я поступил, Интересно послушать Ваше мнение

    531 if ((Alarm == 1 && flagA == 1) {
    532 if (Alarm_minute > minute || Alarm_minute < minute) {
    533 flagA = 0; //Сброс флага сработавшего будильника
    534 Bip = 0;
    535 digitalWrite(A2, LOW); //. Эту строку добавил я.
    536 }

    Нравится

  18. Большое спасибо. z4l1al@yandex.ru

    Нравится

  19. Я очень извиняюсь, но пока не получил от вас ответа и прошивки

    Нравится

  20. К сожалению на обоих ссылках файл удалён. Я еще раз приношу свои извинения, что принес вам много хлопот. Будьте добры пожалуйста и отправте по новому адресу zdzirtkbila@gmail.com Заранее благодарен.

    Нравится

  21. Здравствуйте, при настройке времени в 1 индикаторе ноль отображается, а при работе нет, после 10 часов все нормально работает. Что может быть?

    Нравится

    • Если судить по описанию, то так и должно быть. Но для уверенности, возможно я не так понял, снимите видео с проблемным вопросом.

      Нравится

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