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

от автора

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

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

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

Данной модели часов было дано название EvILeg-1124.

Внешний вид бинарных часов EvILeg-1124
Рисунок 1 — Внешний вид часов EvILeg-1124

Часы

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

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

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

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


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

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

  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, но использует другое название по лицензионным причинам)

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

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


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

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

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

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


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

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

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

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

Сборка часов

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

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

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

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

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

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

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

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

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

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

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

ссылка на оригинал статьи http://habrahabr.ru/post/190830/


Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *