Для тех, кто не знает, объясняю: газоразрядный индикатор это колба, заполненная разреженным газом, в нашем случае неоном. Катоды выполнены в форме символов, а анод в виде сетки, которая их окружает. Если подавать на индикатор высокое напряжение, то есть порядка 200 вольт, то вокруг выбранного катода образуется светящаяся область тлеющего разряда.
![image](https://habrastorage.org/getpro/geektimes/post_images/414/f00/526/414f0052696f1926f75d0d6a1a5b3e93.jpg)
Так вот, была поставлена такая задача: сделать часы на газоразрядных индикаторах, которые при этом будут дублировать всю информацию на жидкокристаллическом экране, а время будут получать из микросхемы часов реального времени. В качестве ядра устройства был выбран микроконтроллер AtMega8. Это распространённый микроконтроллер, проверенный многими, и на него написано очень много разных библиотек, что сильно помогает.
Для самой индикации мне досталась планка из целых десяти газоразрядных индикаторов ИН-12 и ИН-15, так что о статической индикации не может идти и речи.
![image](https://habrastorage.org/getpro/geektimes/post_images/513/247/697/513247697cdc23b7fd5240b17d9f4bbc.jpg)
Разберёмся с устройством управляющего модуля:
Микроконтроллер ATmega8 сначала подключаем к питанию, и притягиваем резистором 10к ножку reset к плюсу, чтобы она не срабатывала, когда это не нужно.
ЖК экран подключается по шине из шести проводов, не считая питания. Я использовал модель экрана wh1602a, но они отличаются друг от друга только порядком выводов на плате, поэтому заменить экран легко.
![image](https://habrastorage.org/getpro/geektimes/post_images/969/845/c7f/969845c7fd556f40cd41c62d17b8243e.jpg)
Далее переходим к микросхеме часов реального времени. Она должна отсчитывать время, и при необходимости сообщать его микроконтроллеру. Я использовал модуль часов реального времени на микросхеме ds1307. Такой способ гораздо точнее вычисления времени в самом микроконтроллере, и к тому же, время сохраняется при отключении питания от часов, так как они имеют собственную батарейку. Как и часы БИОСа на материнской плате.
Для настройки часов используются семь кнопок, шесть из них напрямую идут на выводы микроконтроллера, а седьмую подключил диодами к двум выводам одновременно. То есть при её нажатии программа будет думать, что нажаты сразу две эти кнопки. Это сделано для экономии выводов, микроконтроллера, иначе их просто не хватает.
Ну, и в итоге, для вывода времени на газоразрядные индикаторы у нас остаётся один свободный порт B. Этого вполне достаточно для динамической индикации, если использовать два дешифратора.
![image](https://habrastorage.org/getpro/geektimes/post_images/d6e/db3/a6c/d6edb3a6cfb1d9d8f8bdb6ed31654030.jpg)
Первый дешифратор, это известная высоковольтная логическая микросхема к155ид1. Для неё используются пины порта B с четвёртого по седьмой. Она получает от микроконтроллера номер символа по четырёхбитной шине, и открывает необходимый вывод. Таким образом она снимает высокое напряжение с катодов индикатора, и сбрасывает его в минус, минуя микроконтроллер.
Развёртка же осуществляется через дешифратор к155ид10, подключённый к пинам порта B с нулевого по третий. Он работает так же, как и предыдущий дешифратор, только с низким напряжением. Его выводы имеют открытый коллектор, поэтому они притянуты к плюсу внешними резисторами. Далее сигнал инвертируется с помощью логических элементов «не», и открывает эти два каскада транзисторов, защищающие логику от высокого напряжения. Схема этих каскадов была взята из статьи на сайте schem.net, там этот процесс очень подробно описан. Только транзисторы я заменил на более доступные аналоги. NPN транзистор — кт604БМ, PNP — 2n5401.
![image](https://habrastorage.org/getpro/geektimes/post_images/3df/cc3/84f/3dfcc384f37a68088b5c0dafb128706a.jpg)
То есть, можно использовать всего один порт микроконтроллера для индикации на этом экране. Это позволяет сэкономить как выводы микроконтроллера, так и время работы процессора.
Я оформил часы в такой корпус, в корпусе от блока питания находятся два адаптера, а вентилятор не работает, как можно подумать.
![image](https://habrastorage.org/getpro/geektimes/post_images/1e9/943/956/1e9943956d7b0e91bc94f8bdae41f72b.jpg)
На фотографии видно: управляющий блок с часами реального времени, повышающий преобразователь напряжения, модуль с высоковольтной логикой и транзисторами, и саму планку с десятью газоразрядными индикаторами.
На переднюю часть корпуса выведены тумблеры для включения подсветки ЖК экрана, для включения самого повышающего преобразователя, регулятор контрастности ЖК экрана, и кнопка «F» для переключения режимов.
![image](https://habrastorage.org/getpro/geektimes/post_images/6a0/831/bc8/6a0831bc882ae8ad45f33cdb346bb652.jpg)
Сбоку находятся пять кнопок для настройки времени.
У часов есть три режима отображения времени: время и дата, только время, и время без отображнения секунд.
![image](https://habrastorage.org/getpro/geektimes/post_images/96a/4bf/c0b/96a4bfc0b763b72c4cfc5124cb53e515.jpg)
![image](https://habrastorage.org/getpro/geektimes/post_images/bdc/d13/d4f/bdcd13d4f9a9746c777daad9891ba6c9.jpg)
Видео с демонстрацией работы (ближе к его концу):
Все материалы по проекту (исходники, схемы, и печатные платы) я оставлю здесь: yadi.sk/d/-Gw5HAAgiLJbE
Использованные материалы:
Статья на schem.net о транзисторной развязке: cxem.net/mc/mc187.php
Статья о преобразователе напряжения: e-kit.su/main/1562
Комментарии (43)
stalinets
06.08.2015 18:08+1Они проматывают периодически все цифры от 0 до 9, чтобы избежать «отравления» электродов? Если нет, то лампы долго не прослужат.
NikitosZs
06.08.2015 18:59+1Не думаю, что огород на дешифраторах экономит порты и уж тем более нервы, в сравнении с грошевыми сдвиговыми регистрами. 3 провода и все дела.
Alexeyslav
07.08.2015 02:35Экономят, однако. С регистров потом еще на каждый вывод высоковольтный драйвер нужен будет… удовольствие по сборке этого счастья уже предвкушаете? Тут-то обошлось всего десятью драйверами… или кроме регистров, еще 10 корпусов ИД1(с популярностью этих часов их уже нигде не найти) зафигачить?
NikitosZs
08.08.2015 00:39Таки автор и впихал транзюки всё равно.
Alexeyslav
08.08.2015 00:43Так всего 20 штук…
А с регистрами, надо будет по 20 штук НА КАЖДЫЙ индикатор. Итого: 100 шт. одних и 100шт других. не считая резисторов…NikitosZs
08.08.2015 21:5320 штук на каждый индикатор это для статической индикации. Я же имел ввиду сделать динамическую индикацию на сдвиговых регистрах, это быстрые и простые штуки, которые могут менять состояние своих выводов все одновременно, хоть 500 их задействуйте.
ploop
09.08.2015 14:37Паять прикольно. Один раз паял 1400 точек — супер! Сначала интересно, потом надоедает, потом как робот на автомате… но за 3 дня осилил :)
eta4ever
06.08.2015 22:34Собственно, экономия выводов — это сдвиговые регистры. Получается примерно так. Есть, куда улучшать, но используется всего два пина микроконтроллера.
DDRDmakar
06.08.2015 22:55Это для статической индикации лучше подходит, а у меня динамическая.
eta4ever
06.08.2015 22:58А одно другому не мешает. Просто я делал статическую, а можно и динамическую.
DDRDmakar
06.08.2015 23:22В данном случае в часах десять разрядов, период горения индикатора занимает меньше 10% всего времени, и я стараюсь не уменьшать этот промежуток ещё больше. Понятно, что при использовании сдвигового регистра я сэкономлю 4, а то и 6 выводов, но это даст дополнительную нагрузку на процессор. Использовать 8 бит легче программно, так как при каждом такте развёртки выполняется всего пара условий.
А статья интересная, спасибо что показали. Буду использовать регистры при первом удобном случае.eta4ever
06.08.2015 23:37Я как бы не имел в виду, что надо делать именно так :)
Просто пример принципиальной экономии выводов. Сейчас этот проект у меня подзавис, но вообще доделаю.
Siper
07.08.2015 00:46+1Я бы добавил еще GPS модуль. На цене устройства это все равно почти не отразится.
r00tGER
07.08.2015 09:09Да и WiFi не помещает, для синхронизации времени.
ploop
07.08.2015 09:34GPS + WiFi + поднять на нём NTP-сервер для синхронизации остальных девайсов + удалённый доступ для настройки всего этого + планировщик для управления хозяйством + защита +…
Товарищи, это просто часы :)Siper
07.08.2015 10:10Так я про часы и имел ввиду, NMEA выдает очень точное время.
Alexeyslav
08.08.2015 00:28Вот только… GPS не учитывает поправки времени(координационные секунды и т.п.), там разница с мировым точным временем составляет порядка 20...30 секунд.
wolowizard
07.08.2015 14:09что-то не очень понял — а почему при использовании динамической индикации не использовали ее для реализации клавиатуры? В этом случае для клавиатуры хватило бы всего одного пина микроконтроллера, вместо огорода с диодами
DDRDmakar
07.08.2015 14:30Можно было и так, конечно, но я тогда даже не думал об этом. Часы настраиваются редко, кнопки я проверяю раз в секунду.
+ с диодами нет никакого огорода, всё получилось компактно. А для программы почти никакой разницы, одну кнопку опрашивать, или две.
shtirlitsus
07.08.2015 14:31-1сэкономить как выводы микроконтроллера, так и время работы процессора
не думаю, что в часах процессор сильно загружен
лично моё мнение — либо тёплые ламповые nixie, либо LCDtronix286
08.08.2015 09:11+1ЛСД — попса и новодел. Либо теплые ламповые газоразрядные, либо не менее ламповые, люминисцентно-вакумные:
DDRDmakar
08.08.2015 11:40Внимание! Печатка для логики исправлена, поэтому она немного отличается от той, что на фотографии. Но работает так же.
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 запрещенную комбинацию для выключения всех ламп… Работает как надо (яркость уменьшается, почти без моргания), но все-таки опасения от такого использования остаются -(
DDRDmakar
08.08.2015 15:37Я тоже если нужно затушить индикатор (на нём ноль), и во время опроса ЧРВ, когда развёртка простативает, подаю на порт В 0xFF,, то есть на обоих дешифраторах запрещённая комбинация. И c к155ид1 всё нормально, не греется.
Вот к155ид10 греется, зараза, но я прочитал, что это для неё нормально.
eta4ever
08.08.2015 19:02Я вот тоже вяло думаю над этим вопросом. Скорее всего, буду решать его кардинально и варварски — отрубать высокое вообще в то время, когда я не наслаждаюсь часами. В будни днем, например.
ClusterM
09.08.2015 09:37На сколько точно ходят такие часы? Я когда свои собирал, столкнулся с тем, что они немного спешат при включенных лампах, но более-менее точно идут при работе от батарейки. Похоже, что высокое напряжение даёт наводки на кварц :(
tronix286
09.08.2015 11:56Я не знаю, так как хотел конечно SPI или I2C микруху часов тоже поставить, чтоб меньше МГТФ паять (собирал на макетке), но поленился ехать ее специально покупать а под рукой был даллас паралельный восьмибитный в компаунде залитый такой с батарейкой внутри, который в старые матеря иногда ставился. Его и вкорячил, за неимением… Тем более что я стрелял из пушки по воробьям — у меня в качестве контроллера трудится жирный pic18f452 DIP-40 — 40 ног. 16 ушло сразу на статическую индикацию (4 x 4 ид1), 8 ушло на шину данных/адреса далласа, 4 на /CS, /RD, /WR, /ALE далласа. Две ноги на две кнопки. И еще по-моему остались свободные пины, за вычетом четырех ног питания и двух ног кварца. Ну там мож светодиодики какие или все-таки соберусь когда ключи в анодное поставить (хотя вряд-ли, так как на макетке уже места нет).
Дык, к чему это я, этот далас в компаунде идет как все-равно атомные часы. Стоит прям рядом с импульсником, ему побарабану все. ПЫК, к слову, тоже рядом стоит, и тоже не виснет. Точность секунда в секунду. Я когда собирал, еще подумал, что скорее всего ПЫК будет виснуть и глючить, но нет — пронесло -))
ploop
09.08.2015 14:43Похоже, что высокое напряжение даёт наводки на кварц :(
Нет, косяк где-то в другом. Кварц невозможно просто так сбить, он может возбудиться на другой гармонике, но там уже частоты на порядки могут отличаться.DDRDmakar
09.08.2015 15:38У меня внутренний генератор атмеги немного спешит, когда включены индикаторы.
Alexeyslav
13.08.2015 13:18внутренний генератор зависит от температуры сильно и от напряжения питания.
Может банально температура в корпусе поднимается на 5...10градусов когда индикаторы работают и как следствие…
Посмотри в даташите графики зависимости частоты встроенного RC-генератора от температуры…
Alexeyslav
13.08.2015 13:29Нет никаких наводок. Кварцевый генератор работает точно так же как и RC, только поскольку у кварца добротность выше — частота генератора гуляет меньше. Китайцы вообще мастера экономии, порой в такие вещи уходят кварцы с низкой добротностью — в следствие чего появляется зависимость частоты от температуры генератора(не обязательно даже кварца!) и напряжения его питания. И чем ниже добротность тем сильнее зависимость. Я бы просто поменял бы кварц на заведомо хороший.
И кстати, кварцы очень боятся ударов! ломается кристалл кварца и понижается добротность. Вплоть до того что меняется конфигурация кристалла и его резонансная частота — в пределах доли герца запросто, а для часов это очень большое изменение.
В больших кварцах кристалл укреплён на амортизаторах и не так сильно подвержен механическому воздействию, а в часовых цилиндриках-спичках он закреплен довольно жестко и удары сильно отражаются на его работе.
Попробуйте заменить резонатор. Попробуйте прогревать-охлаждать часовую схему чтобы исключить/подтвердить температурную зависимость. Достаточно феном подуть и на современном частотомере заметить изменение частоты на доли герца а то и больше.
ploop
Это неверно. Точность зависит от точности кварца, и в случае реализации на МК она будет такой же.
Единственный плюс — удобный бекап в виде батарейки. Ну или использовать RTC другого плана, с термокомпенсацией, те действительно точнее.
А дизайн классный! :)