Для тех, кто не знает, объясняю: газоразрядный индикатор это колба, заполненная разреженным газом, в нашем случае неоном. Катоды выполнены в форме символов, а анод в виде сетки, которая их окружает. Если подавать на индикатор высокое напряжение, то есть порядка 200 вольт, то вокруг выбранного катода образуется светящаяся область тлеющего разряда.
Так вот, была поставлена такая задача: сделать часы на газоразрядных индикаторах, которые при этом будут дублировать всю информацию на жидкокристаллическом экране, а время будут получать из микросхемы часов реального времени. В качестве ядра устройства был выбран микроконтроллер AtMega8. Это распространённый микроконтроллер, проверенный многими, и на него написано очень много разных библиотек, что сильно помогает.
Для самой индикации мне досталась планка из целых десяти газоразрядных индикаторов ИН-12 и ИН-15, так что о статической индикации не может идти и речи.
Разберёмся с устройством управляющего модуля:
Микроконтроллер ATmega8 сначала подключаем к питанию, и притягиваем резистором 10к ножку reset к плюсу, чтобы она не срабатывала, когда это не нужно.
ЖК экран подключается по шине из шести проводов, не считая питания. Я использовал модель экрана wh1602a, но они отличаются друг от друга только порядком выводов на плате, поэтому заменить экран легко.
Далее переходим к микросхеме часов реального времени. Она должна отсчитывать время, и при необходимости сообщать его микроконтроллеру. Я использовал модуль часов реального времени на микросхеме ds1307. Такой способ гораздо точнее вычисления времени в самом микроконтроллере, и к тому же, время сохраняется при отключении питания от часов, так как они имеют собственную батарейку. Как и часы БИОСа на материнской плате.
Для настройки часов используются семь кнопок, шесть из них напрямую идут на выводы микроконтроллера, а седьмую подключил диодами к двум выводам одновременно. То есть при её нажатии программа будет думать, что нажаты сразу две эти кнопки. Это сделано для экономии выводов, микроконтроллера, иначе их просто не хватает.
Ну, и в итоге, для вывода времени на газоразрядные индикаторы у нас остаётся один свободный порт B. Этого вполне достаточно для динамической индикации, если использовать два дешифратора.
Первый дешифратор, это известная высоковольтная логическая микросхема к155ид1. Для неё используются пины порта B с четвёртого по седьмой. Она получает от микроконтроллера номер символа по четырёхбитной шине, и открывает необходимый вывод. Таким образом она снимает высокое напряжение с катодов индикатора, и сбрасывает его в минус, минуя микроконтроллер.
Развёртка же осуществляется через дешифратор к155ид10, подключённый к пинам порта B с нулевого по третий. Он работает так же, как и предыдущий дешифратор, только с низким напряжением. Его выводы имеют открытый коллектор, поэтому они притянуты к плюсу внешними резисторами. Далее сигнал инвертируется с помощью логических элементов «не», и открывает эти два каскада транзисторов, защищающие логику от высокого напряжения. Схема этих каскадов была взята из статьи на сайте schem.net, там этот процесс очень подробно описан. Только транзисторы я заменил на более доступные аналоги. NPN транзистор — кт604БМ, PNP — 2n5401.
То есть, можно использовать всего один порт микроконтроллера для индикации на этом экране. Это позволяет сэкономить как выводы микроконтроллера, так и время работы процессора.
Я оформил часы в такой корпус, в корпусе от блока питания находятся два адаптера, а вентилятор не работает, как можно подумать.
На фотографии видно: управляющий блок с часами реального времени, повышающий преобразователь напряжения, модуль с высоковольтной логикой и транзисторами, и саму планку с десятью газоразрядными индикаторами.
На переднюю часть корпуса выведены тумблеры для включения подсветки ЖК экрана, для включения самого повышающего преобразователя, регулятор контрастности ЖК экрана, и кнопка «F» для переключения режимов.
Сбоку находятся пять кнопок для настройки времени.
У часов есть три режима отображения времени: время и дата, только время, и время без отображнения секунд.
Видео с демонстрацией работы (ближе к его концу):
Все материалы по проекту (исходники, схемы, и печатные платы) я оставлю здесь: 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 другого плана, с термокомпенсацией, те действительно точнее.
А дизайн классный! :)