Схемы бинарных часов на pic. Бинарные часы на базе Arduino своими руками

Началось все с того что захотелось сделать какое-нибудь полностью законченное устройство на микроконтроллере AVR.

Выбор пал на бинарные часы, т.к. они просты в изготовлении и достаточно эффектно смотрятся. А еще потому что мне всегда нравился плазмоид бинарных часов из KDE который выглядит вот так:

Что такое бинарные часы?

Для тех кто не знает что такое бинарные часы и как по ним определить время, сделаю небольшое отступление. Бинарные часы это просто часы которые показывают время в двоичной (или бинарной) системе счисления, вместо привычной нам десятичной.

Бинарные часы бывают разные (как в общем-то и обычные часы) - с разным количеством и расположением индикаторов, с секундами или без, с 24-х или 12-и часовым форматом времени и т.д. Я решил остановиться на варианте максимально похожем на вышеупомянутый плазмоид из KDE:


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

В часах четыре горизонтальных строки, так как нам нужно уметь показывать цифры от нуля до девяти (по крайней мере для младшего разряда), а двоичное представление девятки - 1001 , содержит четыре разряда (бита). Младший разряд находится снизу.

Проще всего понять какое время показывают часы анализируя "циферблат" слева на право, снизу вверх. Запишем значение двоичного числа представленного самым левым столбцом часов изображенных на картинке выше (условившись что горящий индикатор обозначает единицу, а потухший - ноль): 0010 в двоичной системе счисления это 2 - в десятичной. Аналогичным образом запишем значение второго столбца: 0001 в двоичной системе счисления (как и в десятичной), или просто единица. То есть на часах 21 час. Точно так же можно прочитать что часы показывают 35 минут и 28 секунд. Немного практики и читать время с бинарных часов будет получаться почти так же быстро как и с обычных.

Реализация

Итак, с идеей понятно, приступим к реализации.

Начнем с индикатора ("циферблата") - который представляет собой решетку из светодиодов.

Поскольку в часах 4 горизонтальных и 6 вертикальных рядов, общее количество необходимых светодиодов - 6 * 4 = 24. На самом деле, можно обойтись меньшим количеством светодиодов, т.к. не все разряды будут задействованы - например старшая цифра часов (самый левый столбец), может показывать число не больше двух (при двадцати часовом формате времени), а значит можно сэкономить целых два светодиода. Но я этого делать не стал и поставил все 24 светодиода, т.к. хотел (в будущем) использовать эти часы для показа простых текстовых сообщений.

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

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

Схема и печатная плата

Схема достаточно стандартная: микроконтроллер, питание, сброс, разъем для подключения программатора. К TOSC1 и TOSC2 подключен часовой кварц от которого будут тикать часы. Кнопки настройки времени подтянуты к напряжению питания. Десять выходов на светодиоды (6 столбцов+ 4 строки). На каждую горизонтальную строку подключен резистор для ограничения тока через светодиод.

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

Корпус

Наверное, это самая неинтересная часть. Но, в то же время, именно она заняла большую часть времени.

Сам корпус сделан из деревянных досок скрепленных гвоздями и клеем. После сборки доски были тщательно отшлифованы, вскрыты морилкой и несколькими слоями мебельного лака.

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

К передней части часов приклеено двустороннее матовое стекло. Заднюю часть закрывает крышка на шурупах, из которой торчат кнопки настройки времени.

Программная часть

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

Весь код описывать не буду, т.к. он достаточно подробно откомментирован. Опишу только ключевые моменты.

Развертка производится по столбцам, то есть сначала некоторое время горят светодиоды только первого столбца, затем второго и т.д. Происходит это очень быстро и глаз не успевает этого заметить, поэтому создается впечатление что все зажженные светодиоды горят одновременно. Для отображения значения времени в столбце используется макрос DISPLAY_COLUMN . Переключение столбцов осуществляется по таймеру Timer0.

Смена времени происходит раз в секунду по прерыванию переполнения таймера Timer/Counter2. Поскольку частота кварца равна 32768Гц, а предделитель таймера установлен на 128, то переполнение однобайтового таймера будет происходить раз в секунду (32768 / (128 * 256) = 1 ), что очень удобно.

Обработка нажатий на кнопки происходит в процедурах button_stop_pressed для кнопки перевода часов в режим настройки и обратно, button_set_pressed для кнопки установки времени и button_switch_pressed для кнопки переключения столбца. Обратите внимание, что в процедуре button_stop_pressed текущее время сохраняется в EEPROM. Это сделано для того что бы время не сбрасывалось если нужно, например, переключить часы в другую розетку (при включении часов время считывается из EEPROM).

Вся основная "работа", такая как - опрос состояние кнопок, переключения активного столбца развертки и вывод времени происходит в main . Начальная инициализация выполняется в reset .

Результат

То что получилось в результате можно посмотреть на видео ниже. Там же запечатлены и некоторые стадии процесса изготовления.

Файлы

Исходные коды прошивки, схематика и разведеная плата находятся в этом репозитории на GitLab .

В качестве заключения

В общем, для первого устройства, думаю, получилось весьма неплохо.

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

Добрый день, уважаемые радиолюбители. Представляю Вашему вниманию бинарные , схему их нашёл на радокоте, только изменил прошивку под кварцевый резонатор на 7,2 МГц (т.к уже давно он ловил пыль на полке и не знал куда его применить, переделал плату, т.к. автор разработки её развёл на мой взгляд не совсем грамотно (надеюсь он не обидится на мои слова), добавил на линию питания ионистор - это такой конденсатор большой ёмкости, на 0,47 Фарада

(на фото он чёрный, прямоугольной формы, отпаяный из какой-то автомагнитолы), чтобы не сбрасывалось время в моменты переключения реле UPS (именно в него я собираюсь встроить эти часы), и стабилизатор 78L05, так как в моём бесперебойнике нет напряжения 5в (вся логика в нём питается от 12в). А что? Как-то слишком просто смотрелся UPS, а тепер будет время показывать и ещё и помогать мыслить двоичным кодом, что не даст мозгу атрофироваться.


Надеюсь все знают как переводить числа из десятеричных в двоичные? На всякий случай повторю. Четырьмя битами можно передать число от 1 до 15, цена битов считается справа налево, т.е так 8_4_2_1, как видно, цена более старщего бита равна удвоеной цене более младшего. Пример: переведём 5 из десятичной системы исчисления в двоичную, получится 0_1_0_1, т.е складываем цену битов равных логической еденице. А теперь наоборот 1_0_0_1 будет 8+1=9. Усвоили? Отлично.


В данных часах светящийся светодиод означает еденицу, а не светящийся - ноль. К статье прилагаю фото повторённого мной устройства.

Небольшое полминутное видео работы часов

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

Схема часов


Часы выполнены на микроконтроллере atmega8 .

К будущим часам на этапе создания сразу были предъявлены следующие требования:

  • сравнительно небольшие габариты как платы, так и устройства в целом;
  • использование максимально доступных компонентов;
  • презентабельный внешний вид корпуса.

В качестве микросхемы часов реального времени - доступная DS1307. Также параллельно линиям питания вблизи МК и на входе питания установлены неполярный конденсаторы 100 нФ и полярный (танталовый) на 47 мкФ. Все резисторы и конденсаторы - в SMD-корпусах типоразмера 0805. Из выводных компонентов - лишь светодиоды, колодка для батарейки и кнопки настройки. Кнопки - любые без фиксации; для корпусного варианта подойдут кнопки с длинными "пимпочками", например такие:

Резисторы R1..R6, R14..R18 могут варьироваться в достаточно широких пределах. Габариты светодиодов значения не имеют, однако корпус и плата рассчитаны на 5 мм круглые светодиоды. "Reserved port" - вывод на плате, который предусмотрен на плате для потенциального расширения функционала часов, например, добавления динамика.

Ниже представлена печатная плата устройства:


Так как число различных связей между светодиодами и МК достаточно велико, а большое число "висячих" перемычек делать не хотелось, устройство реализовано на двусторонней ПП. Толщина стеклотекстолита - 1,5 мм, габаритные размеры платы - 80 х 50 мм. Плата с органами управления (пятью кнопками) выполнена отдельно и будет представлена ниже. На плате дополнительно находятся (не указаны в схеме): разъем для подключения питания + программатора; дополнительный отверстия для подключения проводом питания; резистор в цепи сброса; пятачки для конденсаторов в цепи часового кварца (про них будет сказано ниже).

Плата изготовлена на фрезерном станке с ЧПУ, что позволило получить практически заводское качество. Фото собранной платы представлено ниже:


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

Плата с органами управления соединяется основной при помощи семипроводного шлейфа (2 - питание, 5 - кнопки); размер - 68 х 22 мм.

После сборки платы и прошивки МК осталось выполнить последний пункт - создать красивый корпус для устройства. Ввиду наличия фрезерного станка с ЧПУ, было принято решение вырезать стенки из стеклотекстолита толщиной 1,5 мм и соединить их между собой при помощи пайки; переднюю панель - из алюминия толщиной примерно 1 мм. Общая длина корпуса - 104 мм, высота (с ножками и кнопками) - 77 мм, толщина - 25 мм. Разметка корпуса со всеми отверстиями находится в одном файле с печатной платой. Боковые, верхняя и нижняя стенки соединены друг с другом при помощи латунных стоек под винт М3:

Естественно, предварительно у стоек была удалена винтовая часть. Разные стадии результата сборки представлены ниже (последнее фото было сделано уже после окончательной сборки, поэтому явно видны следы краски):


Плата с кнопками крепится к верхней панели на две стойки (с одной стороны такой стойки - гладкая поверхность, с другой - винт М3) при помощи гаек, для этого на плате предусмотрены отверстия. Высота стоек компенсирует высоту кнопок, поэтому над корпусом последние возвышаются незначительно:


Лицевая сторона передней панели была обработана мелкозернистой наждачкой, затем пастой ГОИ. Обратная сторона, наоборот, обработана грубой наждачкой для крепления к боковым стенкам через 5 мм деревянные бруски при помощи эпоксидной смолы. В задней стенке предусмотрен micro-USB разъем для подачи питания, а также отверстие для потенциального динамика; крышка крепится на вышеупомянутые латунные шестигранники при помощи четырех винтов М3 х 15 мм.



Торцевые и задняя стенка была окрашены автомобильной краской из баллончика.

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

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


Правильное собранное устройство в наладке не нуждается и начинает работать сразу. Настройка времени осуществляется следующим образом:

  • примерно на 2,5 с необходимо зажать кнопку "0"SEC/SET (находится над секундами). После этого счетчик секунд сбросится в ноль, часы остановят ход;
  • затем при помощи кнопок настройки времени необходимо установить нужное время;
  • затем нажать кнопку "0"SEC на 2,5 с; часы возобновят свой ход с обновленным временем.

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

В заключении хочется описать следующую проблему (для опытных радиолюбителей). Не всегда часовые кварцы бывают надлежащего качества. Может получиться так, что частота вашего кварца отличается от заявленной на несколько герц. Результатом такого отклонения является плохая точность хода: так, отклонение от «эталонной» частоты на 2 герца приводит к отставанию в 5,27 секунд в сутки, или две с половиной минуты в месяц.
Частоту часового кварца можно подстроить, путем установки последовательно или параллельно кварцу конденсатора емкостью в несколько пикофарад. Таким образом, автору удалось снизить разницу частот до 0,1Гц, что приводит к гораздо меньшей погрешности – 7 секунд в месяц.

Проект в Proteus и прошивка с исходниками находится в архиве-скачать

Возможно, кто-то еще помнит, как выглядели панели управления первых электронно-вычислительных машин (ЭВМ). Сегодня их можно увидеть только на архивных фотографиях. Длинные ряды лампочек, которые мелькали на первый взгляд хаотично – завораживали энтузиастов электроники тех лет.

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

Принципиальная схема простых бинарных часов показана на рисунке 1. Схема построена на базе микроконтроллера ATmega48. В схеме часов нет внешнего модуля реального времени (RTC), что в свою очередь несколько снижает стоимость устройства.

При возможном сбое питания от внешнего источника, отсчет времени поддерживается встроенной батарей типа CR2032, при этом светодиоды отключаются. Для обнаружения питающего напряжения от внешнего блока питания используется схема с транзистором VT1 (BC847).

Если на клеммах разъема питания есть напряжение, то оно проходит через диод D1 в результате чего транзистор входит в состояние насыщения, а на вход PC0 микроконтроллера подается логический ноль, который запускает работу светодиодов.

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

Просмотр осуществляется только в формате 24 часа. Для отображения количества минут и секунд необходимо 6 светодиодов, а для часов 5 светодиодов.

Микроконтроллер ATmega48V-10AU способен работать при пониженном питании вплоть до 1,8В, что является большим преимуществом. Кроме того, ATmega48V-10AU потребляет меньший ток. Частота тактового сигнала стабилизируется кварцевым резонатором на 4 МГц, который одновременно является эталоном для отсчета времени.

Установка текущего времени (часы и минуты) осуществляется с помощью кнопок SW2 и SW1 соответственно. Счетчик секунд обнуляется при нажатии на любую из кнопок.

Стоит отметить, что эти кнопки неактивны при работе от резервной батареи, чтобы предотвратить возможность непреднамеренного изменения времени. Часы собраны на односторонней печатной плате размером 103мм×67мм.

При программировании микроконтроллера, необходимо установить работу микроконтроллера от внешнего кварцевого резонатора 4 МГц и отключить деление тактовой частоты на 8 (этот бит называется CKDIV8).

После правильной сборки часы начинают работать сразу и должны показать 00:00:00.

Питание схемы осуществляется от источника питания с напряжением +5 В. Резервное питание – батарея типа CR2032 не является обязательной, она только поддерживает отсчет времени после пропадания питания от сети.

Потребление тока от батареи составляет около 1,5 мА. При емкости аккумулятора порядка 200 мАч, ее должно хватить на 5 и более дней работы микроконтроллера, что является достаточным в типичных ситуациях.

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

И продолжая тему публикуем следующий материал. Эти часы настоящего радиогика (radiogeek - радиофанат, англ.) и отображают время в двоичном коде, в момент когда кнопка нажата. Устройство показывает часы и минуты путём мигания двух светодиодов в последовательности и представляют собой два 4-разрядных двоичных числа. Вот описание того, как читать двоичные числа.

Первое число представляет час, а второе - количество минут. Например, если часы мигают 0010 - 0110, это соответствует 2 - 6, что означает часов "2" и минут "6". То есть 2:30. В устройстве отсутствует индикация "am" или "pm", но, думаем, всем понятно - это 2:30 ночи или дня. Проект предполагает также, что вы имеете опыт работы с поверхностного монтажа электронных компонентов, и, что вам знакомы навыки пайки SMD деталей.

Схема часов

Как определить время

Было сделано много вариантов и экземпляров этих часов - вы видите их на фотографиях. В архиве имеются версии 2.5 и 3.1, которая использует для поверхностного монтажа контроллер ATtiny и мини-USB порт для программирования. В контроллере ATtiny 8 контактов. Этот чип может быть запрограммирован для выполнения различных функций. У ATtiny есть внутренние часы, и подключенные светодиоды запрограммированы на мигание для отображения времени.

Электронные компоненты схемы

  • Atmel микроконтроллер ATtiny85
  • 2 SMD светодиода поверхностного монтажа
  • 2 SMD резистора 50 Ом
  • Маленькая SMD кнопка
  • CR2032 3-х вольтовая батарея типа "Таблетка"
  • Минидержатель для аккумулятора

Пайка часов

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

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

Поскольку чип очень маленький, то чтоб запрограммировать его, пришлось добавить мини-USB порт, который подключается к необходимым контактам. На другой конец вешаем обычный USB-кабель, так что все, что вам нужно сделать, это подключить часы к программатору. Ну а ремешок выбирайте сами - хоть кожаный, хоть силиконовый. Корпус же здесь не нужен вообще - пусть все видят, что это часы настоящего радиоманьяка!

Обсудить статью ЧАСЫ РАДИОГИКА