Речь пойдёт о такой вещи, как часы на газоразрядных индикаторах. Многие такие видели, или даже читали про них.

Для тех, кто не знает, объясняю: газоразрядный индикатор это колба, заполненная разреженным газом, в нашем случае неоном. Катоды выполнены в форме символов, а анод в виде сетки, которая их окружает. Если подавать на индикатор высокое напряжение, то есть порядка 200 вольт, то вокруг выбранного катода образуется светящаяся область тлеющего разряда.

image

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

Для самой индикации мне досталась планка из целых десяти газоразрядных индикаторов ИН-12 и ИН-15, так что о статической индикации не может идти и речи.

image

Разберёмся с устройством управляющего модуля:

Микроконтроллер ATmega8 сначала подключаем к питанию, и притягиваем резистором 10к ножку reset к плюсу, чтобы она не срабатывала, когда это не нужно.

ЖК экран подключается по шине из шести проводов, не считая питания. Я использовал модель экрана wh1602a, но они отличаются друг от друга только порядком выводов на плате, поэтому заменить экран легко.

image

Далее переходим к микросхеме часов реального времени. Она должна отсчитывать время, и при необходимости сообщать его микроконтроллеру. Я использовал модуль часов реального времени на микросхеме ds1307. Такой способ гораздо точнее вычисления времени в самом микроконтроллере, и к тому же, время сохраняется при отключении питания от часов, так как они имеют собственную батарейку. Как и часы БИОСа на материнской плате.

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

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

image

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

Развёртка же осуществляется через дешифратор к155ид10, подключённый к пинам порта B с нулевого по третий. Он работает так же, как и предыдущий дешифратор, только с низким напряжением. Его выводы имеют открытый коллектор, поэтому они притянуты к плюсу внешними резисторами. Далее сигнал инвертируется с помощью логических элементов «не», и открывает эти два каскада транзисторов, защищающие логику от высокого напряжения. Схема этих каскадов была взята из статьи на сайте schem.net, там этот процесс очень подробно описан. Только транзисторы я заменил на более доступные аналоги. NPN транзистор — кт604БМ, PNP — 2n5401.

image

То есть, можно использовать всего один порт микроконтроллера для индикации на этом экране. Это позволяет сэкономить как выводы микроконтроллера, так и время работы процессора.

Я оформил часы в такой корпус, в корпусе от блока питания находятся два адаптера, а вентилятор не работает, как можно подумать.

image

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

На переднюю часть корпуса выведены тумблеры для включения подсветки ЖК экрана, для включения самого повышающего преобразователя, регулятор контрастности ЖК экрана, и кнопка «F» для переключения режимов.

image

Сбоку находятся пять кнопок для настройки времени.

У часов есть три режима отображения времени: время и дата, только время, и время без отображнения секунд.

image

image

Видео с демонстрацией работы (ближе к его концу):


Все материалы по проекту (исходники, схемы, и печатные платы) я оставлю здесь: yadi.sk/d/-Gw5HAAgiLJbE

Использованные материалы:

Статья на schem.net о транзисторной развязке: cxem.net/mc/mc187.php
Статья о преобразователе напряжения: e-kit.su/main/1562

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


  1. ploop
    06.08.2015 16:07
    +1

    Я использовал модуль часов реального времени на микросхеме ds1307. Такой способ гораздо точнее вычисления времени в самом микроконтроллере

    Это неверно. Точность зависит от точности кварца, и в случае реализации на МК она будет такой же.
    Единственный плюс — удобный бекап в виде батарейки. Ну или использовать RTC другого плана, с термокомпенсацией, те действительно точнее.

    А дизайн классный! :)


  1. stalinets
    06.08.2015 18:08
    +1

    Они проматывают периодически все цифры от 0 до 9, чтобы избежать «отравления» электродов? Если нет, то лампы долго не прослужат.


    1. DDRDmakar
      06.08.2015 21:18

      Нет, не знал об этом. Спасибо.


    1. tronix286
      08.08.2015 09:07

      А как часто проматывать надо? Ну там раз в минуту, раз час, раз в сутки? Я просто тоже недавно свои построил, тоже не знал про эту фишку.


      1. stalinets
        08.08.2015 11:15

        Я покупал себе вот такие часы, они проматываются раз в 10 минут.


  1. NikitosZs
    06.08.2015 18:59
    +1

    Не думаю, что огород на дешифраторах экономит порты и уж тем более нервы, в сравнении с грошевыми сдвиговыми регистрами. 3 провода и все дела.


    1. Alexeyslav
      07.08.2015 02:35

      Экономят, однако. С регистров потом еще на каждый вывод высоковольтный драйвер нужен будет… удовольствие по сборке этого счастья уже предвкушаете? Тут-то обошлось всего десятью драйверами… или кроме регистров, еще 10 корпусов ИД1(с популярностью этих часов их уже нигде не найти) зафигачить?


      1. NikitosZs
        08.08.2015 00:39

        Таки автор и впихал транзюки всё равно.


        1. Alexeyslav
          08.08.2015 00:43

          Так всего 20 штук…
          А с регистрами, надо будет по 20 штук НА КАЖДЫЙ индикатор. Итого: 100 шт. одних и 100шт других. не считая резисторов…


          1. NikitosZs
            08.08.2015 21:53

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


          1. ploop
            09.08.2015 14:37

            Паять прикольно. Один раз паял 1400 точек — супер! Сначала интересно, потом надоедает, потом как робот на автомате… но за 3 дня осилил :)


  1. HWman
    06.08.2015 22:25

    DDRDmakar добро пожаловать на гиктаймс.
    А видео почему не добавил в шапку статьи?


    1. DDRDmakar
      06.08.2015 23:25
      +1

      Побоялся сначала, что забанят за пиар :/
      Приятно, когда тебя узнают)))
      Добавлю.


  1. eta4ever
    06.08.2015 22:34

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


    1. DDRDmakar
      06.08.2015 22:55

      Это для статической индикации лучше подходит, а у меня динамическая.


      1. eta4ever
        06.08.2015 22:58

        А одно другому не мешает. Просто я делал статическую, а можно и динамическую.


        1. eta4ever
          06.08.2015 23:06

          Хотя, да, для динамической не так немножко будет.


        1. DDRDmakar
          06.08.2015 23:22

          В данном случае в часах десять разрядов, период горения индикатора занимает меньше 10% всего времени, и я стараюсь не уменьшать этот промежуток ещё больше. Понятно, что при использовании сдвигового регистра я сэкономлю 4, а то и 6 выводов, но это даст дополнительную нагрузку на процессор. Использовать 8 бит легче программно, так как при каждом такте развёртки выполняется всего пара условий.
          А статья интересная, спасибо что показали. Буду использовать регистры при первом удобном случае.


          1. eta4ever
            06.08.2015 23:37

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


  1. eta4ever
    06.08.2015 22:41

    А ящик реально убойный получился.


  1. Siper
    07.08.2015 00:46
    +1

    Я бы добавил еще GPS модуль. На цене устройства это все равно почти не отразится.


    1. r00tGER
      07.08.2015 09:09

      Да и WiFi не помещает, для синхронизации времени.


      1. ploop
        07.08.2015 09:34

        GPS + WiFi + поднять на нём NTP-сервер для синхронизации остальных девайсов + удалённый доступ для настройки всего этого + планировщик для управления хозяйством + защита +…

        Товарищи, это просто часы :)


        1. r00tGER
          07.08.2015 09:40

          «С блютузом всё становиться лучше»©


        1. Siper
          07.08.2015 10:10

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


          1. ploop
            07.08.2015 10:42

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


          1. Alexeyslav
            08.08.2015 00:28

            Вот только… GPS не учитывает поправки времени(координационные секунды и т.п.), там разница с мировым точным временем составляет порядка 20...30 секунд.


        1. Alexeyslav
          08.08.2015 00:26

          Да, простые первичные часы…


  1. wolowizard
    07.08.2015 14:09

    что-то не очень понял — а почему при использовании динамической индикации не использовали ее для реализации клавиатуры? В этом случае для клавиатуры хватило бы всего одного пина микроконтроллера, вместо огорода с диодами


    1. DDRDmakar
      07.08.2015 14:30

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


  1. shtirlitsus
    07.08.2015 14:31
    -1

    сэкономить как выводы микроконтроллера, так и время работы процессора

    не думаю, что в часах процессор сильно загружен

    лично моё мнение — либо тёплые ламповые nixie, либо LCD


    1. tronix286
      08.08.2015 09:11
      +1

      ЛСД — попса и новодел. Либо теплые ламповые газоразрядные, либо не менее ламповые, люминисцентно-вакумные:

      image


  1. DDRDmakar
    08.08.2015 11:40

    Внимание! Печатка для логики исправлена, поэтому она немного отличается от той, что на фотографии. Но работает так же.


  1. tronix286
    08.08.2015 14:41
    +1

    Я сделал прокрутку от 0 до 9 и затем обратно от 9 до 0 всех индикаторов через 7 минут. Это для уменьшения эффекта «отравления» катодов. Но меня другой вопрос беспокоит: анодное у меня ни как не управляется, то есть оно есть всегда, с постоянным напряжением 190V. Без ключей. Индикация у меня статическая — 4 индикатора, 4 ид1. Хочется все-таки уменьшать яркость в период что-то вроде 22:00 — 06:00. У меня ид1, если им подать на вход запрещенную комбинацию N > 9 тушат индикаторы. Но вот прочитал где-то, что это типа плохо, через микросхему начинает течь высокий ток и ид1 могут просто пробиться от такого использования. Но когда я налаживал часики, у меня некоторые индикаторы не горели по полчаса (с запрещенной комбинацией на входе N > 9) — и вроде ничего страшного не случилось… Короче плюнул, и сделал щаз яркость через таймер 10мс вкл-выкл-вкл-выкл и тд. То есть каждые 10 мс подаю на все четыре ид1 запрещенную комбинацию для выключения всех ламп… Работает как надо (яркость уменьшается, почти без моргания), но все-таки опасения от такого использования остаются -(


    1. DDRDmakar
      08.08.2015 15:37

      Я тоже если нужно затушить индикатор (на нём ноль), и во время опроса ЧРВ, когда развёртка простативает, подаю на порт В 0xFF,, то есть на обоих дешифраторах запрещённая комбинация. И c к155ид1 всё нормально, не греется.
      Вот к155ид10 греется, зараза, но я прочитал, что это для неё нормально.


    1. eta4ever
      08.08.2015 19:02

      Я вот тоже вяло думаю над этим вопросом. Скорее всего, буду решать его кардинально и варварски — отрубать высокое вообще в то время, когда я не наслаждаюсь часами. В будни днем, например.


  1. ClusterM
    09.08.2015 09:37

    На сколько точно ходят такие часы? Я когда свои собирал, столкнулся с тем, что они немного спешат при включенных лампах, но более-менее точно идут при работе от батарейки. Похоже, что высокое напряжение даёт наводки на кварц :(


    1. tronix286
      09.08.2015 11:56

      Я не знаю, так как хотел конечно SPI или I2C микруху часов тоже поставить, чтоб меньше МГТФ паять (собирал на макетке), но поленился ехать ее специально покупать а под рукой был даллас паралельный восьмибитный в компаунде залитый такой с батарейкой внутри, который в старые матеря иногда ставился. Его и вкорячил, за неимением… Тем более что я стрелял из пушки по воробьям — у меня в качестве контроллера трудится жирный pic18f452 DIP-40 — 40 ног. 16 ушло сразу на статическую индикацию (4 x 4 ид1), 8 ушло на шину данных/адреса далласа, 4 на /CS, /RD, /WR, /ALE далласа. Две ноги на две кнопки. И еще по-моему остались свободные пины, за вычетом четырех ног питания и двух ног кварца. Ну там мож светодиодики какие или все-таки соберусь когда ключи в анодное поставить (хотя вряд-ли, так как на макетке уже места нет).
      Дык, к чему это я, этот далас в компаунде идет как все-равно атомные часы. Стоит прям рядом с импульсником, ему побарабану все. ПЫК, к слову, тоже рядом стоит, и тоже не виснет. Точность секунда в секунду. Я когда собирал, еще подумал, что скорее всего ПЫК будет виснуть и глючить, но нет — пронесло -))
      image

      image


    1. ploop
      09.08.2015 14:43

      Похоже, что высокое напряжение даёт наводки на кварц :(

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


      1. DDRDmakar
        09.08.2015 15:38

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


        1. ploop
          09.08.2015 19:19

          Так это без кварца — там RC-цепь. Само собой может сбоить.


        1. Alexeyslav
          13.08.2015 13:18

          внутренний генератор зависит от температуры сильно и от напряжения питания.
          Может банально температура в корпусе поднимается на 5...10градусов когда индикаторы работают и как следствие…

          Посмотри в даташите графики зависимости частоты встроенного RC-генератора от температуры…


    1. Alexeyslav
      13.08.2015 13:29

      Нет никаких наводок. Кварцевый генератор работает точно так же как и RC, только поскольку у кварца добротность выше — частота генератора гуляет меньше. Китайцы вообще мастера экономии, порой в такие вещи уходят кварцы с низкой добротностью — в следствие чего появляется зависимость частоты от температуры генератора(не обязательно даже кварца!) и напряжения его питания. И чем ниже добротность тем сильнее зависимость. Я бы просто поменял бы кварц на заведомо хороший.

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

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