Самодельные бинарные часы. Бинарные часы на базе Arduino своими руками. Как определить время

Многие задаются вопросом по поводу того, . Здесь дам некоторые инструкции и расскажу, как пользоваться некоторыми бинарными часами и как определять на них время. Обо всех моделях часов рассказывать не буду, а только о тех, которые сам держал когда-либо в руках. Бинарные часы отличаются от обычных тем, что не имеют как такового циферблата. Время закодировано. Но на самом деле определить время на них не составляет особого труда, а особенно владельцам, которые пользуются ими постоянно. Представленные ниже часы в интернете могут называться по-разному. Так что ориентируетесь по фотографиям.


Производство: Китай.
Определение времени : самый левый столбец, состоящий из 12 светодиодов, отображает часы; остальные 5 столбцов, состоящие из 60 светодиодов, отображают минуты. Цифры по бокам позволяют лучше ориентироваться в определение времени. На часах с фотографии: 4 часа 41 минута.
Аналогично определяется и дата. Левый столбец показывает месяц. Светодиоды в остальных столбцах показывают число. Если включен режим даты, то максимум могут загореться только 31 диод (31 число месяца).
(Virus)
Производство: Китай.
Как пользоваться бинарными часами Вирус : один красный светодиод равен одному часу, один желтый светодиод равен пяти минутам, один зеленый светодиод равен одной минуте. Время определяется посредством подсчета светодиодов. На часах Вирус с фотографии: 10 часов 54 минуты, так как горит 10 красных светодиодов (10 часов), 10 желтых светодиодов и 4 зеленых (10×5+4=54)
(Mickey mouse )
Производство: Китай.
Определение времени на часах : "мордочка", состоящая из 12 светодиодов отображает часы; "правое ухо" отображает десятки минут; каждый светодиод на "левом ухе" равен одной минуте. Цифры позволяют лучше ориентироваться в определение времени. Дата определяется следующим образом: "мордочка" показывает месяц, "правое и левое ухо" число.

(Flash Lights)
Производство: Китай.
Как пользоваться бинарными часами Спидометр : 12 верхних светодиодов отображают часы, средние 5 светодиодов отображают десятки минут, каждый светодиод из нижней части отображает 1 минуту. Цифры позволяют лучше ориентироваться в определение времени. Индикаторы AM и PM указывают на время суток (день, ночь). Дата отображается следующим образом: верхние 12 светодиодов указывают месяц, остальные - число. Настроить часы, думаю, каждый сможет самостоятельно.

Двоичные часы (Singularity)
Производство: Китай.
Определение времени на двоичных часах: вертикальная шкала с цифрами 1, 2, 4, 8 отображает часы. Чтобы узнать сколько часов, необходимо суммировать цифры, светодиоды которых подсвечены. Нижние горизонтальные светодиоды отображают минуты. Для определения количества минут необходимо сложить подсвеченные цифры. Индикаторы AM и PM указывают время суток (день, ночь). Дата определяется также с помощью арифметических подсчетов.


Определение времени на часах Winston аналогично определению времени на часах Singularity. Winston отличается от вышеупонянутых часов только присутствием на циферблате логотипа Winston.

Бинарные часы Matrix
Производство: Китай
Определение времени на бинарных часах : два левых столбца показывают часы, а два правых - минуты. Время читается слева направо.
Часы имеют несколько индикаторов: доллар говорит о том, что отображается год; солнце - отображается день недели, число и месяц.
Наглядно всё показано на схеме ниже.

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

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



Схема



RTC

Проблему сохранения текущих настроек прекрасно решают часы реального времени (RTC). Мой выбор пал на микросхему DS1307 .

По заверениям производителя, при отключении питания, она может сохранять время и дату в течении 10 лет, потребляя энергию одной лишь литиевой батарейки типа CR2032. Т.е часы продолжают тикать, сохраняя приемлемую точность хода. Время не сбивается, снова включив часы, мы получаем реальное время на циферблате, а не время на момент выключения. Микросхема общается с микроконтроллером через «квадратную шину» I 2 C, сообщая точное время и принимая новые его значения.

Сердце устройства

Выбор микроконтроллера Mega32a был продиктован следующими факторами:
Достаточное количество портов, чтобы не использовать динамическую индикацию, которую я не люблю, в первую очередь из-за того, что она раздражает зрение (мигание с высокой частотой в любом случае неестественно). С ней я познакомился, играясь с микроконтроллерами PIC на языке Proton PICBasic, и если есть возможность не использовать динамическую индикацию, я предпочту так и сделать.
Относительно низкая стоимость в 130 рублей (Mega16a, например, стоит столько же), а со скидкой так вообще 104 рубля.
Четкий QPF-44 корпус, с удобным расположением выводов


Порт «А» отображает секунды, порт «В» - минуты и порт «С» - часы. Очень удобно то, что можно присвоить портам значения времени, принятые из DS1307, без каких – либо изменений. К порту «D» подключены кнопки (пины 3 – 7), пины 0 и 1 работают как линия тактирования (SCL) и линия последовательной передачи данных (SDA) соответственно. Микросхема RTC настроена так, что выдает на своей седьмой ноге импульсы с частотой 1 герц. Эта нога подключена к 3-му пину порта «D». Сам этот порт сконфигурирован на вход, и на всякий случай включены внутренние подтяжки к плюсу питания, продублированные SMD резисторами снаружи. Такие действия в полной мере защищают от всяких неожиданностей.

Светодиоды


Светодиоды я выбрал в матовом корпусе с низкой светимостью. Сначала были опробованы яркие диоды в прозрачном корпусе, но даже при токе в 3 мА они слишком ярко и неравномерно светили, что опять таки вызывало дискомфорт. При падении напряжения на диоде в 2 вольта, напряжении питания 5 вольт и резисторе 1 кОм, значение тока, текущего через диод будет равно (5 – 2)/1000 = 3 мA. Это значение было подобрано эмпирически, а яркость свечения отлично подходит для полутемной комнаты. Если планируется устанавливать часы под прямой солнечный свет, то номинал резисторов следует уменьшить, вплоть до 200 ом, для более яркого свечения (спасибо кэп).

Кнопки

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

Софт

Код написан в среде CodeVisionAvr.
Программа начинается с того, что мы настраиваем периферию микроконтроллера.
Конфигурируем порты (A,B,C – выход, D – вход)
На всякий случай предусмотрена пауза 300 мс, чтобы DS1307 успела «очухаться»
Инициализируем «квадратную шину»
Настраиваем микросхему RTC так, чтобы она выдавала прямоугольные импульсы каждую секунду на выводе SQW/OUT
Проверяем, нажата ли кнопка CLR. Если да, то сбрасываем все значения в 0
Разрешаем глобальные прерывания
Да, пару слов про них. Мы используем внешние прерывания INT0 на PD2 по спаду, т.е. каждую секунду программа будет уходить в обработчик прерываний, в котором мы считываем значения времени из DS1307 и выводим их на светодиодные индикаторы.
Уходим в бесконечный цикл, где опрашиваем кнопки
Если кнопка нажата, прибавляем (отнимаем) час (минуту) и посылаем новое значение по I2C
Попутно проверяем, вписываются ли новые значения времени в 24-х часовой и 60-ти минутный диапазоны.

Печатная плата

Плата выполнена по Великой Космической Лазерно – Утюжной Технологии на одностороннем текстолите. При изготовлении верхней платы, использовалась обычная бумага (неудачный эксперимент).


Существует много вариаций этой технологии. На мой взгляд, вот этот самый лучший:
1. Выпиливаем нужного размера кусок текстолита.
2. Шкурим торцы, избавляясь от вредных заусенцев.
3. Смазываем будущую плату чистящим порошком или зубной пастой и жесткой стороной губки драим ее до блеска.
4. Окунаем наш кусок на пару десятков секунд в слабый раствор теплого хлорного железа, до появления равномерной, матовой, бардово-коричневой поверхности. При вытаскивании из раствора, жидкость должна полностью смачивать поверхность.
5. Смываем каку, аккуратно сушим, не прикасаясь к поверхности пальцами, или чем другим жирным. Сразу кладем на чистую бумагу медью вниз, чтобы избежать попадания пыли или волос.
6. Распечатываем отзеркаленный рисунок на тонкой(!) глянцевой бумаге, можно вырезать из журнала, например. Не прикасаемся к рисунку руками. Аккуратно вырезаем, кладем рисунком вниз.
7. Прикладываем к подготовленному куску текстолита, проглаживаем через 1-2 слоя чистой бумаги, выставив утюг на максимальную температуру. Секунд 10 должно быть достаточно, ибо если передержать, дорожки расплющатся и затекут друг на друга. Тонер должен полностью прилипнуть к меди.
8. Отмачиваем под струей теплой воды, можно оставить в воде на 10 минут. Аккуратно отдираем, соскребаем бумагу. Мне в этом помогает старая зубная щетка. Удаляем оставшиеся кусочки бумаги иголкой. Тонер остается на текстолите.
9. Нагреваем на водяной бане крепкий раствор хлорного железа, бросаем туда нашу плату и бултыхаем в течении нескольких минут (по правилу Вант-Гоффа, при увеличении температуры на 10 градусов, скорость реакции увеличивается в 2 раза. Медь исчезает прямо на глазах. Можно и не греть, но ждать придется дольше.
10. Как только вся ненужная медь исчезла, выключаем газ, вытаскиваем (например пинцетом) плату, пытаемся отмыть плиту и пальцы от хлорного железа. Смываем его с платы проточной водой.
11. Берем ацетон (жидкость для снятия лака) и оттираем тонер. Можно попробовать соскрести его шкуркой или губкой.
12. Сверлим отверстия.
13. Лудим. В качестве флюса использую ЛТИ, и вам советую, однако после лужения и пайки этот флюс нужно обязательно смыть (тем же ацетоном, а лучше смесью спирто-бензин 1:1), т.к. ЛТИшка обладает некоторой проводимостью.
Все работы обязательно проводить в проветриваемом помещении, в процессе
выделяется много вредных паров.


Платы соединяются между собой PBS и PLD разъемов. Первые соединяются с верхней платой при помощи тонкого монтажного провода, его можно выковырять, например, из старого LPT кабеля или переходника.


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

Печатные платы в формате SprintLayout5.0 прилагаются. На фотографиях есть пару косяков, но они уже исправлены в приложенных файлах.

Прошивка микроконтроллера

Для этого дела был собран программатор USBasp , который можно увидеть на фото сверху. Довольно приятная штука, прост в использовании и можно всегода носить его с собой в кармане(надеюсь, никто так делать не станет). Для прошивки mega32 придется установить джампер «Slow SCK».
Фьюзы:
Low fuse = 0xC4
High fuse = 0xD9
Наш микроконтроллер тактируется от внутреннего RC генератора с частотой 8 МГц. Пришлось отключить JTAG интерфейс на PortC, иначе некоторые светодиоды не будут светиться.
На плате предусмотрен ISP10 разъем, для быстрой прошивки/отладки.

Лицевая панель

Выполнена из алюминиевой пластины, шириной 40 мм и толщиной 1,5 мм. В ней просверлены 18 отверстий диаметром 5 мм, и 4 отверстия диаметром 3 мм для крепления стоек.


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


В завершении, пластина была загнута, ошкурена мелкой шкуркой и отполирована пастой ГОИ.
Шаблон прилагается к приложенным файлам в виде файла layout5.0

Красный светодиод в левом верхнем углу

Повторяет импульсы, генерируемые DS1307 на 7-ой ноге, т.е. мигает каждую сегунду. Маленький p-канальный MOSFET транзистор работает в ключевом режиме, открываясь и закрываясь в такт импульсам. Сначала я хотел сделать фоновую подсветку (как Ambilight), для чего был слеплен КМОП инвертор на комплиментарной паре транзисторов(чтоб уж наверняка). Но мне не понравилось. Для одного светодиодика вполне достаточно одного транзистора, можно использовать даже pnp типа bc857. Я использовал бескорпусные mosfet irlml6402 или irlml6302.

Файлы

Исходники, hex-файл, печатные платы, схемы, схема в proteus и фьюзы заключены вот в эту картинку в виде архива. Я не доверяю файлохранилищам, своего сервера у меня пока нет, поэтому, на мой дилетантский взгляд, самым надежным местом для хранения будет Хабр. Пользователи windows могут добраться до файлов открыв сохраненную картинку с помощью WinRar.
Да, вот эта картинка.

Видео

Заключение

Источник питания можно использовать любой, способный выдать 5 вольт при токе в 70 мА. USB-порт вполне для этого подойдет. Главное, чтобы питание было «чистым», и не превышало 5 вольт. Питая часы от DC-DC преобразователя из на микросхеме mc34063 с уровнем помех ~50 мВ, я заметил глюки при установке времени. Сейчас устройство питается от свича, висящего рядом. Он выдает строго 5 вольт. По хорошему, нужно еще сделать защиту от дурака в виде диода, и какой-нибудь линейный стабилизатор на 3.3 - 5 вольт.
Отсутствие в часах функций будильника и отображения даты вполне обосновано: и то и другое присутствует в телефоне, а значит, пользоваться ими в бинарных часах с большой долей вероятности никто не будет (спасибо дядюшке Оккаму за этот вывод).

В преддверии дня рождения друга встал вопрос о выборе подарка. Друг – любитель разных необычный электронных устройств, изделий ручной работы. Променад по магазинам результатов не принес: гаджеты неприятно удивляли либо банальностью, либо дороговизной. Уже отчаявшись что-либо найти, бросил взгляд на виджет бинарных часов Sony. И тут я поймал себя на мысли: «Ты же электронщик со стажем, и руки из того места растут!» Сделай своими руками бинарные часы, будет лучшим подарком! Именно так родилась идея изготовить нижеописанный девайс.

Бинарные часы предназначены для представления времени в двоично-десятичном формате, то есть часы, минуты и секунды разбиваются по десятичным разрядам и представляются в двоичном виде (см. рис. ниже)

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

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

В результате была создана следующая схема:

В качестве МК используется, быть может, несколько устаревший, но не менее популярный ATmega8A-AU. В качестве микросхемы часов реального времени - доступная 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 секунд в месяц.

Вопросы, критику, пожелания и предложения с удовольствием выслушаю в комментариях.

P.S. Файлы с прошивкой и исходным кодом, конфигурация FUSE-бит и проект в находятся в архиве.

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
U1 МК AVR 8-бит

ATmega8A-AU

1 TQFP-32 В блокнот
U2 Часы реального времени (RTC)

DS1307

1 SO-8 В блокнот
Q1-Q6 Биполярный транзистор

BC817

6 В блокнот
D1-D20 LED 20 В блокнот
R1-R6, R11-R13 Резистор

4.7 кОм

6 В блокнот
R7-R10 Резистор

150 Ом

4

Длится уже много веков. За это время каких только способов определения ни было придумано изобретательными людьми - начиная с зависящих от положения Солнца в небе до электронных. Последний писк моды на данный момент - это часы бинарные, совсем непривычные на первый взгляд. Так что же это и как по загорающимся точкам определить, который час? Давайте разберемся в этой интересной новинке получше.

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

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

На своем экране, в отличие от механических или электронных, бинарные наручные часы имеют не стрелки и цифры, а разноцветные светящиеся точки (которые в некоторых моделях мигают).

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

Как они появились?

Первый раз часы бинарные вышли в свет в 2008 году. Именно тогда фирма Anelace представила свою инновационную разработку всему миру. Однако появлению стильных наручных часов с LED-экраном предшествовали годы усовершенствований, проб и ошибок.

Модели-прототипы бинарных часов, созданные еще в начале 20-го века, были огромными махинами с электронными лампами (как, впрочем, и первые компьютеры). Тогда для человека они почти не представляли практического интереса.

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

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

Зачем такие сложности?

Первый вопрос, который возникает при взгляде на бинарные часы: как пользоваться ими? Поначалу таким вот странным способом может показаться глупой причудой, которая понравится только или совсем уж сдвинутым на почве технологий фрикам, или гениям. Обычно ведь часы нужны для того, чтобы лишь мельком взглянуть на них и узнать время, а с бинарными хронометрами такой фокус не пройдет. Можно даже опоздать на встречу, пока пытаешься считать с них показания.

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

Преимущества

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

А если говорить серьезно, то бинарные часы - это сразу несколько полезных гаджетов в одном.

  1. Часы. Естественно, по ним можно определять время, иначе какие же это часы?
  2. Игра-головоломка. Позволяет устроить себе развлечение в любой момент, когда заблагорассудится. К тому же разные модели таких часов основаны на немного отличающихся друг от друга системах счисления, что делает их еще интереснее.
  3. Особенно полезен этот гаджет для профилактики старческих умственных отклонений, но и молодым людям он станет отличным мозговым тренажером.
  4. Ультрамодное и современное украшение с инновационным дизайном. И да, эти часы светятся в темноте.

Настройка

Бинарные наручные часы не имеют в своем механизме ни циферблата, ни стрелок. Вместо этого вся информация о и времени выводится на LED-экран с помощью светодиодов. Из-за этого перед пользователем встает насущный вопрос: а как настроить бинарные часы?

Система кодировки может различаться в разных моделях бинарных часов, однако есть некоторые основные моменты, о которых стоит помнить. Обычно у таких хронометров есть 1 или 2 режима: время и, реже, дата, переключающиеся кнопкой. Для настройки нужной величины чаще всего сначала нужно нажать кнопку Set ("Установка"). Мигающие индикаторы покажут, что вы делаете все правильно. Кнопка Select ("Выбор") позволяет переключиться от установки часов к минутам и секундам, а также от месяца к числу.

Чтобы правильно выставить на часах нужные значения, стоит освоить основной принцип двоичной системы счисления. «Вес» каждого разряда можно определить, умножив предыдущий на 2. Получим следующий ряд: 1, 2, 4, 8, 16, 32. Например, чтобы число 110101 перевести в привычный нам вид, нужно сложить «вес» каждого из значимых разрядов. Получим 32 + 16 + 0 + 4 + 0 + 1 = 53.

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

Какие бывают бинарные часы?

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

  • Хронометры с двумя рядами светодиодов. Один ряд показывает часы, второй - минуты. Кроме того, на экране есть 2 индикатора времени суток (AM и РМ).
  • Часы со светодиодами, расположенными в 6 рядов (по 2 на часы, минуты и секунды). Показывают время в формате HH:MM:SS. Чтобы узнать по ним время, нужно записать показания каждого столбика по порядку, предусмотренному этим форматом.

  • Экран часов может напоминать спидометр с двумя окружностями: внешней, показывающей часы, и внутренней, которая определяет минуты.
  • В некоторых часах имеется по 2 дорожки - справа (часы) и слева (минуты).

Есть и более навороченные варианты бинарных часов. Какой из них выбрать, зависит только от вашего желания и финансовых возможностей.

Оценка 1 Оценка 2 Оценка 3 Оценка 4 Оценка 5

Идея

Началось все с того что захотелось сделать какое-нибудь полностью законченное устройство на микроконтроллере 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).

Class="eliadunit">

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

Результат

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



Бизнес идеи