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

В преддверии дня рождения друга встал вопрос о выборе подарка. Друг – любитель разных необычный электронных устройств, изделий ручной работы. Променад по магазинам результатов не принес: гаджеты неприятно удивляли либо банальностью, либо дороговизной. Уже отчаявшись что-либо найти, бросил взгляд на виджет бинарных часов 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

Эти наручные электронные часы показывают время в двоичной системе, поскольку для этого требуется меньше светодиодов для отображения времени, чем у обычных цифроиндикаторных часов, да и оригинальность будет на уровне. Распространённый кварц 32С417 на 32.786 кГц был использован, чтобы PIC16F527 запустить в режиме низкой мощности и помочь повысить точность хронометража. Для ношения на запястье руки использовался подходящий матерчатый ремень.

Микроконтроллер PIC16F527 тут использовался потому, что он имеет самый маленький из доступных пакетов. Для питания часов подходят батареи типа CR2032 в специальном держателе. Эта батарея имеет приличную емкость, хотя она размером всего с монету. Чтобы уменьшить площадь печатной платы и стоимость конструкции, было выбрано одну-единственное гасящее сопротивление для всего блока SMD светодиодов.

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

А стандартный 20 мм ремешок как раз помещается внутри вырезов.

Алгоритм работы часов

Основной цикл отслеживает, в каком режиме работают часы в настоящее время. Первое состояние - в нерабочем виде, где часы опрашивает коммутатор и ждет ввода пользователя. После того, как кнопка нажата, система движется ко второму состоянию, которое вычисляет, как долго часы будут отображаться. Затем идёт переход на состояние три, которое делает большую часть работы по разветвлению исходя из того, что пользователь в данный момент делает. Часы включают светодиоды в таком состоянии. Если пользователь удержал кнопку в течение более 3 секунд - часы переходят в состояние четыре. Это состояние коррекции времени. Чем дольше кнопка нажата, тем быстрее время меняется.

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

Чтобы понять, что такое двоичная система счисления, запустим в компьютере имеющуюся в операционной системе Windows программу "Калькулятор". Поскольку в различных версиях системы эти программы различаются, здесь будем рассматривать ту, которая входит в состав Windows XP Запустив программу, найдите в её окне и нажмите мышью экранную кнопку "Вид", затем в выпавшем списке выберите "Инженерный". После этого к прежним простейшим функциям калькулятора добавится множество других, позволяющих производить сложные вычисления. Слева под индикатором появится переключатель системы счисления: "Hex" (шестнадцатеричная), "Dec" (десятичная), "Oct" (восьмеричная) и "Bin" (двоичная). Сразу после запуска программы он находится в положении "Dec". Это означает, что все исходные данные для вычислений и их результаты будут представляться в привычной для нас десятичной системе счисления.

Наберите для примера число 58, нажав на соответствующие цифровые кнопки. Если теперь перевести переключатель в положение "Bin", щёлкнув мышью по соответствующей надписи, то в окне результата цифры 58 сменятся на 111010. Это то же самое число, представленное в двоичной системе счисления. Чтобы убедиться в этом, можно воспользоваться таблицей, поясняющей принцип формирования двоичных и десятичных чисел. Двоичные разряды, в отличие от десятичных, могут принимать только два значения — 0 и 1. Веса двоичных разрядов увеличиваются справа налево в два раза, а не в 10 раз, как в десятичной системе.

Двоичная система исчисления широко используется в цифровых устройствах, поскольку позволяет обойтись простыми логическими элементами, различающими только два значения — 0 и 1. Сегодня многие фирмы выпускают такие часы. Чтобы убедиться в этом, достаточно поискать в Интернете фразу "Часы двоичные".

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

Схема часов показана на рис. 1. Отсчёт времени ведёт и выводит его на светодиоды микроконтроллер DD1 . Его тактовая частота 32768 Гц стабилизирована низкочастотным "часовым" кварцевым резонатором ZQ1. Питается устройство от литиевого элемента G1 напряжением 3 В. Как известно, такие элементы отличаются минимальной саморазрядкой и способностью работать при пониженной температуре. Конденсатор С1 подавляет высокочастотные импульсы. Благодаря низкой тактовой частоте микроконтроллер потребляет небольшой ток, что делает возможной длительную эксплуатацию часов без замены элемента питания.

К выходам микроконтроллера RA0— RA4, RB5, RB6 через ограничительные резисторы R1—R7 подключены светодиоды HL1—HL7. Шесть из них (HL2— HL7) показывают время, на них можно отобразить числа от 0 (все выключены) до 63 (все включены). Это позволяет вывести по очереди число часов от 0 до 23 и минут от 0 до 59. Около светодиодов указаны веса двоичных разрядов, которым они соответствуют.

Включают индикацию часов или минут соответственно кнопками SB1 и SB2, соединёнными с входами RB0 и RB1 микроконтроллера. Так как индикация включается всего на несколько секунд, в течение которых кнопка удерживается нажатой, энергия элемента питания расходуется экономно, он служит длительное время. Кнопкой SB3, подключённой к входу RB7 микроконтроллера, производят корректировку времени. Это следует делать только в начале очередного часа, так как в процессе корректировки счётчики минут и секунд обнуляются.

Светодиод HL1 при нажатой кнопке SB1 или SB2 вспыхивает каждую секунду. Он служит индикатором активности устройства и позволяет убедиться в его работоспособности при нулевых значениях часов или минут. Если бы его не было, возникала бы неприятная ситуация, когда при нажатой кнопке ни один из светодиодов не подаёт "признаков жизни".

Вывод 4 микроконтроллера, обычно служащий входом его установки в исходное состояние MCLR, в данном случае сконфигурирован как обычный дискретный вход RA5. Начальная установка при включении питания производится внутренними средствами микроконтроллера. Для исключения случайных помех вход RA5 соединён с общим проводом. Остальные линии порта A программа конфигурирует как выходы.

Линии RB0, RB1, RB7 порта B она конфигурирует как входы и подключает к ним внутренние резисторы, поддерживающие на этих входах высокий логический уровень (при отпущенных кнопках). Остальные линии порта B конфигурируются как выходы. В завершение процедуры инициализации программа по очереди включает на секунду каждый светодиод. Это позволяет оценить правильность монтажа и убедиться в работоспособности программы.

Счёт времени в микроконтроллере DD1 ведёт встроенный таймер T1. Программа настраивает его так, что он каждую секунду генерирует запрос прерывания. Подпрограмма-обработчик прерывания формирует в оперативной памяти микроконтроллера значение текущего времени — секунды, минуты и часы.

Обработчик прерывания при каждом вызове проверяет также логические уровни на входах RB0, RB1 и RB7, зависящие от состояния кнопок SB1—SB3. При низких уровнях на входах RB0 или RB1 включается соответственно индикация часов или минут. При низком уровне на входе RB7, свидетельствующем о нажатой кнопке SB3, и одновременно низком уровне на одном из входов RB0 или RB1 производится корректировка времени. Так сделано для уменьшения вероятности сбоя хода часов в результате случайного нажатия на кнопку SB3.

Программа микроконтроллера небольшая по размеру и несложная. Без всяких изменений она может работать как в микроконтроллерах PIC16F628A, так и в PIC16F628. Исходный текст программы, приложенный к статье, снабжён подробными комментариями, позволяющими разобраться в алгоритме работы и даже усовершенствовать программу. Например, ввести индикацию секунд или режим секундомера. Для этого нет необходимости менять схему часов, так как можно организовать включение этих функций одновременным нажатием на кнопки SB1 и SB2.

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

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

Часы собраны на фрагменте макетной платы, как показано на рис. 2. Резисторы (для поверхностного монтажа) смонтированы на обратной стороне платы. Светодиоды FYL-3014SRC можно заменить другими. Чтобы убедиться в пригодности светодиода, подключите его к источнику напряжения 3 В через резистор 390 Ом и оцените яркость свечения.

Конденсаторы, резисторы, кнопки — любые малогабаритные. Желательно, чтобы кнопка SB3 была с укороченным толкателем. Его конец не должен возвышаться над поверхностью корпуса часов и даже быть утоплен, чтобы нажать на него было можно только каким-либо заострённым предметом. Такое конструктивное решение служит дополнительной к программной защитой от случайного нажатия на кнопку.

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

Шаг 1: Что же такое бинарные часы?

Для начала вспомним, что же такое бинарное (двоичное) число – это число представленное в двоичной системе исчисления, числовыми значениями, что используют всего два символа: 0 (ноль) и 1 (единица).

Бинарные часы – это часы, что отображают время в двоичном формате. В проекте используются 6 колонок светодиодов для отображения нулей и единиц. Каждая колонка отображает одну цифру/разряд, такой формат известен, как двоично-десятичное число (ДДЧ). Каждая линия отображает степень двойки, от 2^0 (или 1), до 2^3 (или 8). Поэтому всё, что нужно сделать при чтении информации с часов – просуммировать значения колонок с включенными светодиодами. Например, в первой колонке включены 4-й и 1-й светодиоды. Прибавляем 8 к 1 и получаем 9 (количество секунд равное 9). Следующая колонка десятые секунды, в ней светится только 3-й светодиод, поэтому общее значение будет равно 49 секундам, точно также с минутами и часами. Пожалуйста, отметьте следующее, что часы отображают время в 24-х часовом формате.

Шаг 2: Составные части

  • Arduino Pro Mini 328 5 V использовал такую плату, но фактически можете использовать любую другую. Если вы ни разу не использовали Pro Mini, то наверняка вам будет нужен CP 2102 (программатор) для подключения платы к компьютеру;

  • DS 1302 — модуль часов реального времени ;

  • 20-ть 10 мм диффузных «тёплых» светодиодов (советую брать с запасом);

  • 20-ть резисторов с номиналом сопротивления 10Ω;

  • 2 тактовые кнопки;

  • 2 резистора с номиналом сопротивления 10kΩ (используются, как нагрузочные резисторы).

Шаг 3: Изготавливаем прототип

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

Шаг 4: Корпус

Корпус самоделки (состоит из двух половинок) будет изготовлен из дерева. Оно будет контрастно смотреться на фоне бинарных часов и придаст поделке ретро стиль.

Шаг 5: Схема

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

Шаг 6: Код

За основу кода взят пример с Arduino Playgroud post для модуля часов DS1302. После чего были внесены изменения для отображения времени на светодиодной матрице.

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

Конструкция собрана на микроконтроллере и часов реального времени DS1307 . В качестве индикатора текущего времени использован четырехразрядный семисегментный светодиодный индикатор (ультраяркий, голубого цвета свечения, что неплохо смотрится в темное время, и, заодно, часы играют роль ночника). Управление часами происходит двумя кнопками. Благодаря использованию микросхемы часов реального времени DS1307, алгоритм программы получился довольно простым. Общение микроконтроллера с часами реального времени происходит по шине I2C, и организованно программным путем.

Схема часов:

К сожалению, в схеме есть ошибка:
— выводы МК к базам транзисторов нужно подключать:
РВ0 к Т4, РВ1 к Т3, РВ2 к Т2, РВ3 к Т1
или поменять подключение коллекторов транзисторов к разрядам индикатора:
Т1 к DP1 ….. Т4 к DP4

Детали, используемые в схеме часов:

♦ микроконтроллер ATTiny26:

♦ часы реального времени DS1307:

♦ 4-разрядный семисегментный светодиодный индикатор – FYQ-5641UB -21 с общим катодом (ультраяркий, голубого цвета свечения):

♦ кварц 32,768 кГц, с входной емкостью 12,5 пф (можно взять с материнской платы компьютера), от этого кварца зависит точность хода часов:

♦ все транзисторы — NPN-структуры, можно применить любые (КТ3102, КТ315 и их зарубежные аналоги), я применил ВС547С
♦ микросхемный стабилизатор напряжения типа 7805
♦ все резисторы мощностью 0,125 ватт
♦ полярные конденсаторы на рабочее напряжение не ниже напряжения питания
♦ резервное питание DS1307 – 3 вольтовый литиевый элемент CR2032

Для питания часов можно использовать любое ненужное зарядное устройство сотового телефона (в этом случае, если напряжение на выходе зарядного устройства в пределах 5 вольт ± 0,5 вольта, часть схемы — стабилизатор напряжения на микросхеме типа 7805, можно исключить)
Ток потребления устройством составляет — 30 мА.
Батарейку резервного питания часов DS1307 можно и не ставить, но тогда, при пропадании напряжения в сети, текущее время придется устанавливать заново.
Печатная плата устройства не приводится, конструкция была собрана в корпусе от неисправных механических часов. Светодиод (с частотой мигания 1 Гц, от вывода SQW DS1307) служит для разделения часов и минут на индикаторе.

Установки микроконтроллера заводские: тактовая частота — 1МГц, FUSE-биты трогать не надо.

Алгоритм работы часов (в Algorithm Builder):

1. Установка указателя стека
2. Настройка таймера Т0:
— частота СК/8
— прерывания по переполнению (при такой предустановленной частоте вызов прерывания происходит каждые 2 миллисекунды)
3. Инициализация портов (выводы РА0-6 и РВ0-3 настраиваются на выход, РА7 и РВ6 на вход)
4. Инициализация шины I2C (выводы РВ4 и РВ5)
5. Проверка 7-го бита (СН) нулевого регистра DS1307
6. Глобальное разрешение прерывания
7. Вход в цикл с проверкой нажатия кнопки

При первом включении, или повторном включении при отсутствии резервного питания DS307, происходит переход в первоначальную установку текущего времени. При этом: кнопка S1 – для установки времени, кнопка S2 – переход к следующему разряду. Установленное время – часы и минуты записываются в DS1307 (секунды устанавливаются в ноль), а также вывод SQW/OUT (7-й вывод) настраивается на генерацию прямоугольных импульсов с частотой 1 Гц.
При нажатии кнопки S2 (S4 — в программе) происходит глобальный запрет прерываний, программа переходит в подпрограмму коррекции времени. При этом, кнопками S1 и S2 устанавливаются десятки и единицы минут, затем, с 0 секунд, нажатием кнопки S2 происходит запись уточненного времени в DS1307, разрешение глобального прерывания и возвращение в основную программу.

Часы показали хорошую точность хода, уход времени за месяц — 3 секунды.
Для улучшения точности хода, кварц рекомендуется подключать к DS1307, как указано в даташите:

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

Фотография собранного устройства и печатная плата в формате.lay от читателя сайта Анатолия Пильгук, за что ему огромное спасибо!

В устройстве применены: Транзисторы — СМД ВС847 и ЧИП резисторы

Приложения к статье:

(42,9 KiB, 3 198 hits)

(6,3 KiB, 4 161 hits)

(3,1 KiB, 2 640 hits)

(312,1 KiB, 5 913 hits)


Второй вариант программы часов в АБ (для тех у кого нескачивается верхний)

(11,4 KiB, 1 928 hits)