7 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Бинарные часы своими руками

Простые бинарные часы на микроконтроллере. Схема

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

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

Принципиальная схема простых бинарных часов показана на рисунке 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 и более дней работы микроконтроллера, что является достаточным в типичных ситуациях.

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

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

Пример чтения времени показан на рисунке ниже.

Верхний ряд — это часы, средний минуты и нижний секунды.

Текущее время 21:14:59

Часы = 16 + 4 + 1 = 21

Минуты = 8 + 4 + 2 = 14

Секунды = 32 + 16 + 8 + 2 + 1 = 59

Скачать рисунок печатной платы и прошивку (65,7 KiB, скачано: 337)

Nullblog

Еще один небольшой технический блог

10 июня 2012 г.

Бинарные часы на AVR

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

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

Реализация

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

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

Корпус

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

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

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

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

Читать еще:  Лазерный гравер + плоттер с питанием по USB и управлением по Bluetooth своими руками

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

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

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

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

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

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

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

Бинарные часы своими руками


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

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

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

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

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

Большое внимание уделено энергопотреблению. В глубоком сне часы потребляют всего 10 мкА. Это дает срок службы батареи более двух лет.
Что касается пользовательского интерфейса, нужно просто нажать заводную головку часов, чтобы разбудить их и они сразу показывают время. При нажатии кнопки еще раз, будет отображаться дата. Поскольку срок службы батареи составляет два года, можете легко переключаться между летним временем без подключения к компьютеру. Для этого нужно нажать кнопку 15 раз подряд.

Шаг второй: выбор компонентов
Есть четыре основные части печатной платы. Микропроцессор atmega328p. Это то же самое, что и в популярных моделях Arduino. Это мозг, который будет связываться с модулем часов реального времени (RTC), обрабатывать время и отображать его с помощью светодиодов. Все это, конечно, нуждается в источнике питания, желательно крошечной батарее.

ATmega328P
Микропроцессор должен был соответствовать определенным критериям. Для GPIO требовалось как минимум девять контактов, восемь для светодиодов и один для кнопки. Ему также требовалась шина I2C, где он мог бы выступать в качестве ведущего устройства для опроса RTC на данный момент. Наконец, он должен был работать при низких напряжениях и не потреблять чрезмерного количества тока при питании. Atmega328P-AU соответствует всем этим критериям, и при этом достаточно мал, чтобы не занимать всю площадь печатной платы. Большой плюс в том, что он также используется для большинства популярных плат Arduino и многие могут с ним работать.

Печатная плата
Плата была разработана для использования керамического резонатора 8 МГц. Однако оказалось, что процессор должен работать с меньшей частотой, чтобы работать на низких напряжениях. Посмотрите на изображение в этом шаге, взятое со страницы 303 в техническом описании, которое объясняет соотношение между тактовой частотой и рабочим напряжением. Тактовая частота около 4 МГц должна быть максимальной для этого проекта. Мастер использовал внутренний генератор на 8 МГц и активировал деление на 8 бит, что дает видимую тактовую частоту как 1 МГц. Однако 8 МГц резонатор по-прежнему нужен при загрузке кода. После загрузки мастер не стал его удалять

DS3231
Сначала мастер хотел использовать DS1307 RTC. Это более популярная микросхема. Однако для нее требуется источник питания 5 В.
DS3231 может работать при низком напряжении 1,8 В. Чип имеет встроенный кварцевый кристалл. Встроенный кристалл часов также имеет температурную компенсацию. Температура окружающей среды может вызывать нерегулярные колебания часового кристалла. Это означает, что он становится менее точным. DS3231 измеряет температуру окружающей среды и использует ее в расчете для компенсации колебаний температуры. Идеально подходит для наручных часов, когда вы входите и выходите из разных комнат или выходите на улицу, когда температура не постоянна.

Читать еще:  Прибор для проверки светодиодов своими руками

Светодиоды
Светодиоды мастер использует форм-фактора 0603. Они могут потреблять до 20 миллиампер, но, благодаря тому, что одновременно могут работать не более трех светодиодов это не проблема. Ток также уменьшается при использовании резисторов большего номинала, чем необходимо. Мастер говорит, что наиболее эффективно, для этих светодиодов, использовать резисторы 100 — 400 Ом.

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





На первом рисунке мы видим матрицу 4Х4 с 13 светодиодами. Ряды матрицы пронумерованы цифрами 1,2,4,8.
Для того, чтобы узнать время необходимо сложить все светодиоды в одном ряду, затем в следующем и т.д.
Например, рисунок 2, первый квадрат. Слева-направо горит один светодиод первый столбец, первый ряд. Первый ряд у нас под цифрой 1, значит первая цифра часа 1. Далее второй столбец горят два светодиода под номерами 1 и 2. Складываем цифры, получается 3. Следующий столбец один светодиод номер 4. И последний столбец светодиоды 1+2+4=7. Получаем 13 часов 47 минут.

Шаг четвертый: схема
Печатная плата имеет круглую форму, как и классические часы. Стандартный корпус часов обычно составляет 42 мм с диаметром стекла 38 мм. Это внешний край стекла. Однако, если стекло опирается на кромку шириной 1 мм, доступный диаметр становится равен 36 мм. Это означало, что печатная плата должна быть около 35 мм.

Мастер заказал плату на известном сайте. Платы имеют толщину 0,8 мм.







Шаг шестой: доработка кнопки
Как можно заметить, заводная головка часов на боковой стороне корпуса предназначена, в данном устройстве, для управления часами. Она взаимодействует с микрокнопкой подключенной к микроконтроллеру. Для этого кнопку нужно переделать.

Самые дешевые тактильные кнопки, имеют маленькую круглую черную пластиковую деталь, на которую нужно нажать, чтобы замкнуть контакты. Её нужно заменить. Мастер разбирает кнопку, срезая металлический крепеж. Удаляет кнопку. На металлическую пластинку наклеивает кусочек малярной ленты и устанавливает обратно. Склеивает корпус кнопки. Теперь можно припаять кнопку.





Шаг седьмой: кодирование
Микроконтроллер не может и работать с кодом Arduino на этом этапе. Сначала нужен загрузчик. Это подпрограмма, которую необходимо сохранить на чипе, чтобы загрузить и выполнить написанную программу.

Поскольку это Atmega328P со сверхнизким напряжением, для него требуется специальный тип загрузчика.
Откройте Arduino IDE, выберите «Файл»> «Настройки»> «URL-адреса менеджера дополнительных плат» и добавьте запятую после последнего URL-адреса перед вставкой нижеследующего URL

https: //mcudude.github.io/MiniCore/package_MCUdude .
Нажмите «ОК» несколько раз и перейдите в « Инструменты»> «Доска»> «Менеджер плат» . Откройте его, найдите minicore и установите его.

Подключите Arduino по схеме, как на фото. Зайдите в примеры Arduino и откройте пример кода «ArduinoISP». Загрузите код.
Дальше нужно установить установите Tools> Programmer: в «Arduino as ISP». Выберите следующую конфигурацию из загрузчика MiniCore. Вы также можете дважды проверить свою конфигурацию в соответствии с конфигурацией на картинке, прикрепленной к этому шагу.

Настройки загрузчика
Board: ATmega328
Bootlader: Yes
Clock: 1 MHz internal
Compiler LTO: Disabled
Variant: 328P / 328PA
BOD: 1.8V

Теперь последний шаг — подключить провода от Arduino к плате часов. Выберите опцию Tools> Burn Bootloader . Подождите немного, и вы получите сообщение об удачной установке загрузчика.









Вставьте заводную головку в корпус часов.

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

Вставьте шестигранные гайки в соответствующие им шестигранные пазы и зафиксируйте их на месте небольшим кусочком скотча.








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

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









Простые бинарные часы

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

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

Ссылка на основную публикацию
Статьи c упоминанием слов:
Adblock
detector