Часы на ВЛИ индикаторе ИВ-18

Небольшое вступление

Привет всем уважаемые читатели! Меня как и многих тут посещала мысля сделать что-нибудь эдакое. Руки чесались, голова пухла и таки придумал. Данные часы разрабатывались не неделю или две. Все начиналось с прототипов отдельных узлов, потом, поняв как работать с этим индикатором — начались всякие веселые бегущие строки со словами из трех букв на нем, ну и все в таком духе. Что-ж присказка закончилась, сказка начинается!

Краткое описание схемотехники

Схема часов на ВЛИ индикаторе ИВ-18

Особо-интересных узлов тут нету, все по стандарту. В основу лег микроконтроллер ATmega168. Схема питается от 5 вольт. Преобразователь на MC34063 повышает напряжение до 32 вольт для работы сегментов и сеток. По поводу драйвера: чувствую волну годовых запасов тухлых помидоров по поводу коммутации: запирать нужно отрицательным напряжением, а открывать небольшим положительным! Накал надо питать от переменного тока, а то разряды будут неравномерно светиться! Ну что я могу вам сказать: засветка конечно есть, но очень малозаметная, даже в темноте! По поводу неравномерности свечения разрядов: такого не наблюдал, все ровно. Я делал тупо из того, что было под рукой. Питание с повышайки поступает на массив Дарлингтона (UDN2981) и затем уже на сегменты/сетки. Само отображение работает по принципу динамической индикации, т.е. все синхронизировано так, что-бы в нужный момент времени засвечивались нужные сегменты под нужной сеткой. Об этом пойдет речь чуть дальше. Остальные все элементы включены по даташиту и думаю, что особого разъяснения ничего не требует.

Немного о программном коде

Программа написана в среде Atmel Studio 7.0. При написании самой программы я не использовал ничего готового. Все библиотеки написаны в ручную. Немного пробежимся по принципам работы программы.

IRDA (Инфракрасное управление)

Инфракрасное управление работает по протоколу NEC/NEC 2.0. Другие протоколы не поддерживаются! Почему? Да потому-что пультов с NEC у меня полным-полно, да и разбираться с другими протоколами было дико лень. Значит, как оно работает. В системе есть таймер (таймер 2 в этом случае). Наш таймер настроен на переполнение каждые 100 мкс. Так-же в системе есть для этого внешнее прерывание (INT0 в этом случае), настроенное на работу по нисходящему фронту. И так, рассмотрим, что такое NEC

Мы видим опорный импульс (9мс) и паузу (4.5мс). Лог 1. Длится 2.25мс, лог. 0 длится 1.12мс. Но! У нас прерывание настроено по нисходящему фронту! Хорошо, Наш опорный импульс в таком случае будет 13.5мс, а остальные данные — как и были. Важно понимать, что в данных (0 и 1) всегда есть импульс 560мкс. т.е. если не взирать на то, что прерывание настроено на нисходящий фронт и принимать импульсы по смене логического состояния, то лог 1. — это первый импульс 560 мкс, второй 1690мкс, и тож самое с лог. 0. Ладно, надеюсь, поняли =))) Значит пришло внешнее прерывание с ИК-приемника, запустился таймер, начался отсчет. Смотрим, сколько мы там насчитали и уже проводим нужные операции. К примеру пришел стартовый импульс 13.5мс, значит выставляем флаг начала приема и можем приступать к приему данных. Так-же в том самом таймере 2 присутствует сброс при достижении какого-либо значения, если ничего не пришло после стартового импульса или когда все данные приняли. Посылка NEC выглядит вот так:

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

Описание часов, настройка и обучение ИК-пульту

Как только включили часы — нужно настроить время. Можно это сделать двумя способами:

  1. Кнопками
  2. ИК-пульт

Но при включении пульт у нас не настроен. Давайте для начала настроим время и дату. Нажимаем и удерживаем кнопку «MENU», до тех пор, пока не начнет мигать первое значение. Кнопками UP, DOWN можно настроить время/дату, перемещаться по меню — коротким нажатием на MENU. Сохранение настроек — короткое нажатие на ОК. Кстати при настройке кнопки UP, DOWN можно нажимать одиночным нажатием или нажать и удерживать.

Настройка ИК-Пульта

Для входа в настройки ИК-пульта в обычном режиме нажимаем и удерживаем OK, пока не увидим подобный экран 

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

 

Это означает, что код кнопки уже сохранен в EEPROM

Если кнопка с таким кодом уже будет в системе, то вы увидите:

Кнопками UP, DOWN можно перемещаться по номерам настраиваемых кнопок, кнопкой MENU можно сбросить текущую настройку (если не настроить ничего после сброса, то останется предыдущая запись). Теперь поговорим о номерах настраиваемых кнопок:

  1. POWER OFF (пока что не используется)
  2. MENU (вход в меню)
  3. PLUS (прибавление значения)
  4. MINUS (убавление значения)
  5. CLEAR (сброс настраиваемого значения в начальное положение)
  6. PLAY (она же OK, для сохранения настроек)
  7. FWND (перемотка вперед, перемещение вперед по меню или отображаемой информации)
  8. RWND (перемотка назад, перемещение назад по меню или отображаемой информации)
  9. RETURN (выход из настроек)

Выйти из настроек можно при помощи нажатии и удержании кнопки ОК

Теперь, когда мы настроили пульт — можно поговорить еще о настройках

Поддерживается нажатие и удержание кнопки (повторные сообщения в NEC). Кнопками FWND, RWND перемещаемся по меню, кнопками PLUS и MINUS настраиваем значения. Вроде все просто, ничего не забыл. А да, в основном экране можно переключать режим отображения (Часы, дата, температура) кнопками UP, DOWN на часах или кнопками FWND, RWND на ИК-пульте

Фотографии

Часы на ВЛИ индикаторе ИВ-18

Послесловие

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

Прикрепил к статье исходный код и файл печатной платы в Sprint-Layout.

P.S. Основную плату заказывал на заводе JLCPCB