Реклама

Бинарные часы с будильником на Atmega48 (EvILeg-1124)

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

Введение

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

Бинарные часы EvILeg-1124
Рисунок 1 — Бинарные часы EvILeg-1124

Базой для развития идеи сборки бинарных часов послужила статья, опубликованная на хабре 9 марта 2012 года под названием «Бинарные часы своими руками (Mega32, DS1307)». Спешу выразить благодарность автору статьи, поскольку она послужила отправной точкой для моей вариации на тему бинарных часов.

Принципиальным отличием стало то, что часы показывают время не в чисто бинарной системе счисления, а в двоично-десятичном представлении. То есть старшая тетрада байта отвечает за десятки часов/минут/единиц, а младшая соответственно за единицы. Таким образом внешний вид часов становится таким, как и внешний вид одноимённого виджета в свободной среде рабочего стола KDE. Также функционал часов расширен будильником, поэтому часы не только становятся способны выполнять непосредственную функцию отсчета времени, но и не менее полезную функцию пробуждения владельца (рис.1).

Часы

Распиновка корпуса микросхемы DS1307
Рисунок 2 — Распиновка корпуса микросхемы DS1307

Для реализации функций отсчета времени была взята микросхема DS1307(рис.2), питающаяся от батарейки CR2032, впрочем в этом нет ничего удивительного, учитывая, что данная микросхема является наиболее оптимальной для развития навыков работы с микроконтроллерами при решении подобной задачи, как сборка часов. Плюсом данной микросхемы является то, что имеется большое количество материалов в интернете по подключению данной микросхемы к AVR-микроконтроллерам по шине I2C, на основе которых происходит знакомство с данным протоколом последовательной шины, на которую можно посадить до 128-ми устройств, что будет очень полезно, при разработке крупного проекта.

Схемотехническое решение

Распиновка Atmega48 в DIP-корпусе
Рисунок 3 — Распиновка Atmega48 в DIP-корпусе

В качестве управляющего микроконтроллера была взята Atmega48PU, которая имеет достаточное количество ножек (а именно 28, был взят вариант в DIP-корпусе ) и flash-памяти, хотя и кажется все-таки несколько избыточной для этого проекта, поскольку при имеющихся 4 Кбайтах памяти, использовано было всего 1124 байта, что отражено в названии данной модели часов. Распиновка Atmega48 отображена на рисунке 3.

Ножкам микроконтроллера были присвоены следующие функции:

  1. Ножка №1 — отвечает по умолчанию за реализацию сброса контроллера RESET (перезапуск контроллера, в случае его подвисания);
  2. Ножка №2 — отвечает за подключение «пищалки» будильника;
  3. Ножка №3 — отвечает за активацию будильника;
  4. Ножка №4 — присоединена к выходу микросхемы DS1307, на котором генерируется сигнал частотой 1 Гц, по падающему фронту которого отрабатывает прерывание INT0, присутствующее на данной ножке микроконтроллера. По данному прерыванию происходит считывание времени из микросхемы DS1307;
  5. Ножка №5 — отвечает за отработку прерывания INT1, присутствующее на данной ножке микроконтроллера. Данное прерывание отвечает за обработку шести кнопок, подключенных к ножкам №11, 12 и 13. Опрос кнопок происходит по низкому уровню на данной ножке;
  6. Ножки №11, 12, 13 — как было сказано выше, отвечают за кнопки часов. Каждая кнопка формирует собственный идентификационный код, по которому обработчик прерывания INT1 решает, какое действие необходимо выполнить;
  7. Ножки №9, 14-19, 23-26 — отвечают за динамическую светодиодную индикацию, а именно за отображение часов/минут/секунд и режимов работы часов;
  8. Ножки №27, 28 — отвечают за обмен данными с микросхемой DS1307 по шине I2C, за счет аппаратной реализации TWI-интерфейса на данных ножках.

    (TWI (Two Wire Interface) или TWSI (Two Wire Serial Interface) по сути та же самая шина I2C, но использует другое название по лицензионным причинам)

Принципиальная схема часов
Рисунок 4 — Принципиальная схема часов

Принципиальная схема и платы были подготовлены в пакете разработки DipTrace.

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

Программное решение

Прошивка микроконтроллера написана полностью на языке программирования Assembler в интегрированной среде разработки Atmel Studio 6.1. Прошивка микроконтроллера осуществлялась программатором ATAVRISP2.

Логика работы прошивки следующая:
При включении микроконтроллер опрашивает часы и сразу начинает выводить время на индикацию. По прерыванию INT0, которое активируется импульсом с вывода SQW/OUT микросхемы DS1307, происходит считывание времени раз в одну секунду. Развертка индикации осуществляется по прерыванию по таймеру 0. Также на табло часов имеются светодиоды режимов (зеленый, желтый и красные; данные светодиоды выделены на рисунке 5), каждый из которых отвечает за свой режим поведения часов. Это выражается в реакции часов на нажатие кнопок.

внешний вид передней панели
Рисунок 5 — внешний вид передней панели

Режимы поведения часов следующие:

  • Режим №1 — горит зеленый светодиод, в данном режиме на внешние воздействия отзываются только две кнопки, а именно кнопка включения будильника и кнопка переключения режимов Mode;
  • Режим №2 — горит желтый светодиод, в данном режиме на внешние воздействия отзываются все кнопки и настраивается время самих часов реального времени (микросхема RTC), разумеется настройка часов происходит в режиме реального времени, без их остановки;
  • Режим №3 — горит верхний красный светодиод, в данном режиме на внешние воздействия отзываются все кнопки и настраивается время будильника часов, при этом настроенное время записывается в энергонезависимую память EEPROM, поэтому в случае отключения часов от электропитания, время, настроенное на будильнике, не собьется;
  • Режим №4 — горят зеленый и нижний красный светодиоды, в данном режиме активирован будильник кнопкой Bip, при этом на внешние воздействия не реагирует ни одна кнопка, кроме самой кнопки Bip, которая единственная является кнопкой с фиксацией.

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

Сборка часов

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

Часы собраны из трех плат:

  1. Первая — это основная плата, на которой располагаются микроконтроллер, часы DS1307 и вся основная обвязка микроконтроллера;
  2. Вторая — непосредственно плата со светодиодами;
  3. Третья — плата с кнопками управления часами;

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

В процессе сборки и отладки часов имелись также проблемы с электропитанием, а именно покупка не совсем удачного нестабилизированного блока питания, который при заявленном номинале в 4,5В на самом деле выдавал 8,32В, вследствие чего погорел тестовый микроконтроллер. После чего было принято собрать простенькую схему электропитания на стабилизаторе напряжения 7805 (виновник павшего смертью храбрых микроконтроллера представлен на последнем фото). Однако теперь часы могут питаться постоянным напряжением от 5 до 30 Вольт.

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

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

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

Файлы проекта

clock-12

Архив исходников проекта из Atmel Studio и DipTrace, hex-файл, печатные платы и принципиальная схема преобразованы в jpeg/rar и выложены в качестве фото, на котором изображен светодиод.

Пользователям Windows необходимо открыть картинку в программе Winrar для получения содержимого архива

Заключение/Послесловие

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

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

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

Advertisement

Добавить комментарий