Многофункциональные цифровые часы на микроконтроллере Attmega8. Схема и описание

Данные часы с будильником основаны на микросхеме часов реального времени, что позволяет им работать от резервного источника питания при отсутствии основного. Заданное время будильника и режим работы хранится в энергонезависимой памяти микроконтроллера. Режим отображения - 24 часовой. Содержат имитацию «тикания» Индикация времени и режимов работы осуществляется посредством светодиодных индикаторов.

Принцип работы

Основой данных часов является микросхема DS1307 - часы реального времени, обменивающаяся информацией с управляющим контроллером посредством I2C интерфейса. Индикация времени осуществляется через 4 7-и сегментных индикатора, работающих в динамическом режиме. Ввод и корректировка времени осуществляется 5-ю кнопками: "+ минуты", "+ часы", «установка», «будильник» и «сброс». Звуковой сигнал будильника выводится через стандартный пьезоизлучатель и представляет из себя сигнал частотой 1кгц с секундными паузами.

В качестве управляющего микроконтроллера был выбран Atmega48 по причине его доступности и наличии необходимой периферии на борту(даже с избытком). Часы реального времени DS1307 подключены к аппаратным выходам I2C управляющего микроконтроллера. Для работы DS1307 в автономном режиме(в случае отключения питания главного контроллера) используется литиевая батарейка резервного питания на 3V, ресурса которой хватит на несколько лет из-за низкого энергопотребления микросхемы.

Рассмотрим подробнее управляющую программу:

Программа работает по принципу флагово-таймерного автомата: все состояния и события представлены в виде соответствующих флагов, выполняющихся в прерываниях соответствующего таймера 1с, 1мс и 263.17мс. Программа использует 2 аппаратных таймера.

Опрос часовой микросхемы и нажатие кнопок осуществляется с интервалом 263.17мс. Интервал 1мс служит для формирования звукового сигнала звонка, а 1с - для его модуляции. Секундный интервал также управляет миганием точки во 2-ом разряде индикатора, разделяющий часы и минуты и также служащим формированием «тиканья».
Рассмотрим принципиальную схему часов.

Обозначения и номиналы:
S4 - Увеличение часов
S3 - Увеличение минут
S2 - Установка
S1 - Включение будильника
S5 - Сброс

R6-R10 - 10k
R1-R5 - 510ом

Напряжение питания - 5 вольт.

Настройка и использование

Правильно собранные часы в дополнительной настройке не нуждаются. Необходимо лишь установить текущее время и будильник.
Установка текущего времени осуществляется следующим образом:
1) Кнопками S1 и S2 установить текущее время (точка между разрядами при этом не мигает)
2) Запустить часы кнопкой S3
Установка будильника:
1) Нажать S3 и убедиться в том, что загорелась точка в 1-ом разряде
2) Установить время звонка кнопками S1 и S2
3) Включить звонок кнопкой S4
Дополнительные возможности:
Включить тиканье - удерживая S4 нажать S2 до появления характерных звуков. Отключается так-же.
Отображение минут и секунд - удерживая S4 нажать S1. Если после этого нажать S3 произойдёт сброс секунд в 00. Возврат - та-же комбинация.

Фото и видео часов

Часы собраны в корпусе из под нерабочей «электроники».


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

Конструктор покупался на ebay.com за 1.38 фунтов (0.99+0.39 доставка), что эквивалентно 2.16$. На момент покупки это самая низкая цена из всех предложенных.

Доставка заняла около 3х недель, набор пришел в обычном полиэтиленовом пакетике, который в свою очередь был упакован в небольшой «пупырчатый» пакет. На выводах индикатора был небольшой кусочек пенопласта, остальные детали были без какой либо защиты.

Из документации только небольшой листочек формата А5 со списком радиодеталей с одной стороны и принципиальной электрической схемой с другой.

1. Принципиальная электрическая схема, используемые детали и принцип работы



Основой или «сердцем» часов является 8-ми разрядный КМОП микроконтроллер AT89C2051-24PU оснащенный Flash программируемым и стираемым ПЗУ объемом 2кб.
Узел тактового генератора собран по схеме (рис.1) и состоит из кварцевого резонатора Y1 двух конденсаторов C2 и С3, которые образуют вместе параллельный колебательный контур.


Изменением емкости конденсаторов можно в небольших пределах изменять частоту тактового генератора и соответственно точность хода часов. На рисунке 2 показан вариант схемы тактового генератора с возможностью регулировки погрешности часов.

Узел начального сброса служит для установки внутренних регистров микроконтроллера в начальное состояние. Он служит для подачи после подключения питания на 1 вывод МК единичного импульса длительностью не менее 1 мкс (12 периодов тактовой частоты).
Состоит из RC цепочки, образуемой резистором R1 и конденсатором C1.

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

Модуль индикации собран на четырехразрядном семисегментном индикаторе с общим катодом DS1 и резистивной сборке PR1.
Резистивная сборка представляет собой набор резисторов в одном корпусе:


Звуковая часть схемы представляет собой схему собранную на резисторе R2 10кОм, pnp транзисторе Q1 SS8550(выполняющего роль усилителя) и пьезоэлемента LS1.

Питание подается через разъем J1 с подключенным параллельно сглаживающим конденсатором C4. Диапазон питающих напряжений от 3 до 6В.

2. Сборка конструктора

Сборка трудностей не вызвала, на плате подписано, куда какие детали паять.

Много картинок - сборка конструктора спрятана под спойлером

Я начал с панельки, так как она единственная не является радиодеталью:

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


После этого установил на плату соблюдая полярность электролитический конденсатор, резисторную сборку (также обращая внимание на первый вывод) и элементы тактового генератора - 2 конденсатора и кварцевый резонатор

Следующим шагом припаиваю кнопки и конденсатор фильтра питания:

После этого очередь за звуковым пьезоэлементом и транзистором. В транзисторе главное установить правильной стороной и не перепутать выводы:

В последнюю очередь припаиваю индикатор и разъем питания:

Подключаю к источнику напряжением 5В. Все работает!!!


3. Установка текущего времени, будильников и ежечасового сигнала.

После включения питания дисплей находится в режиме («ЧАСЫ: МИНУТЫ») и отображает время по умолчанию 12:59. Ежечасный звуковой сигнал включен. Оба будильника включены. Первый установлен на время срабатывания 13:01, а второй – 13:02.


При каждом кратковременном нажатии на кнопку S2 дисплей будет переключаться между режимами («ЧАСЫ: МИНУТЫ») и («МИНУТЫ: СЕКУНДЫ»).
При длительном нажатии кнопки S1 происходит вход в меню настроек, состоящее из 9 подменю, обозначенных буквами A, B, C, D, E, F, G, H, I. Подменю переключаются кнопкой S1, значения изменяются кнопкой S2. После подменю I следует выход из меню настроек.

А: Установка показаний часов текущего времени
При нажатии кнопки S2 значение часов изменяется от 0 до 23. После установки часов необходимо нажать S1 для перехода в подменю B.

B: Установка показаний минут текущего времени


C: Включение ежечасного звукового сигнала
По умолчанию включено (ON) – каждый час с 8:00 до 20:00 подается звуковой сигнал. При нажатии кнопки S2 значение изменяется между ON (Вкл.) и OFF (Выкл.). После установки значения необходимо нажать S1 для перехода в подменю D.

D: Включение\выключение первого будильника
По умолчанию будильник включен (ON). При нажатии кнопки S2 значение изменяется между ON (Вкл.) и OFF (Выкл.). После установки значения необходимо нажать S1 для перехода в следующее подменю. Если будильник выключен, то подменю E и F пропускаются.

E: Установка показаний часов первого будильника
При нажатии кнопки S2 значение часов изменяется от 0 до 23. После установки часов необходимо нажать S1 для перехода в подменю F.

F: Установка показаний минут первого будильника
При нажатии кнопки S2 значение минут изменяется от 0 до 59. После установки минут необходимо нажать S1 для перехода в подменю С.

G: Включение\выключение второго будильника
По умолчанию будильник включен (ON). При нажатии кнопки S2 значение изменяется между ON (Вкл.) и OFF (Выкл.). После установки значения необходимо нажать S1 для перехода в следующее подменю. Если будильник выключен, то подменю H и I пропускаются и происходит выход из меню настроек.

H: Установка показаний часов второго будильника
При нажатии кнопки S2 значение часов изменяется от 0 до 23. После установки часов необходимо нажать S1 для перехода в подменю I.

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

Коррекция секунд
В режиме («МИНУТЫ: СЕКУНДЫ») необходимо удержать кнопку S2 для обнуления секунд. Далее коротким нажатием на кнопку S2 запустить отсчет секунд.

4. Общие впечатления от часов.

Плюсы:
+ Низкая цена
+ Легкая сборка, минимум деталей
+ Удовольствие от самостоятельной сборки
+ Достаточно низкая погрешность (у меня за сутки отстали на несколько секунд)

Минусы:
- После отключения питания не держит время
- Отсутствие какой либо документации, кроме схемы (данная статья частично решила этот минус)
- Прошивка в микроконтроллере защищена от считывания

5. Дополнительно:

1) На безграничных просторах интернета нашел инструкцию к этим часам на английском языке и перевел ее на русский. Скачать ее можно Данные часы с будильником основаны на микросхеме часов реального времени, что позволяет им работать от резервного источника питания при отсутствии основного. Заданное время будильника и режим работы хранится в энергонезависимой памяти микроконтроллера. Режим отображения - 24 часовой. Содержат имитацию «тикания» Индикация времени и режимов работы осуществляется посредством светодиодных индикаторов.

Принцип работы

Основой данных часов является микросхема DS1307 - часы реального времени, обменивающаяся информацией с управляющим контроллером посредством I2C интерфейса. Индикация времени осуществляется через 4 7-и сегментных индикатора, работающих в динамическом режиме. Ввод и корректировка времени осуществляется 5-ю кнопками: "+ минуты", "+ часы", «установка», «будильник» и «сброс». Звуковой сигнал будильника выводится через стандартный пьезоизлучатель и представляет из себя сигнал частотой 1кгц с секундными паузами.

В качестве управляющего микроконтроллера был выбран Atmega48 по причине его доступности и наличии необходимой периферии на борту(даже с избытком). Часы реального времени DS1307 подключены к аппаратным выходам I2C управляющего микроконтроллера. Для работы DS1307 в автономном режиме(в случае отключения питания главного контроллера) используется литиевая батарейка резервного питания на 3V, ресурса которой хватит на несколько лет из-за низкого энергопотребления микросхемы.

Рассмотрим подробнее управляющую программу:

Программа работает по принципу флагово-таймерного автомата: все состояния и события представлены в виде соответствующих флагов, выполняющихся в прерываниях соответствующего таймера 1с, 1мс и 263.17мс. Программа использует 2 аппаратных таймера.

Опрос часовой микросхемы и нажатие кнопок осуществляется с интервалом 263.17мс. Интервал 1мс служит для формирования звукового сигнала звонка, а 1с - для его модуляции. Секундный интервал также управляет миганием точки во 2-ом разряде индикатора, разделяющий часы и минуты и также служащим формированием «тиканья».
Рассмотрим принципиальную схему часов.

Обозначения и номиналы:
S4 - Увеличение часов
S3 - Увеличение минут
S2 - Установка
S1 - Включение будильника
S5 - Сброс

R6-R10 - 10k
R1-R5 - 510ом

Напряжение питания - 5 вольт.

Настройка и использование

Правильно собранные часы в дополнительной настройке не нуждаются. Необходимо лишь установить текущее время и будильник.
Установка текущего времени осуществляется следующим образом:
1) Кнопками S1 и S2 установить текущее время (точка между разрядами при этом не мигает)
2) Запустить часы кнопкой S3
Установка будильника:
1) Нажать S3 и убедиться в том, что загорелась точка в 1-ом разряде
2) Установить время звонка кнопками S1 и S2
3) Включить звонок кнопкой S4
Дополнительные возможности:
Включить тиканье - удерживая S4 нажать S2 до появления характерных звуков. Отключается так-же.
Отображение минут и секунд - удерживая S4 нажать S1. Если после этого нажать S3 произойдёт сброс секунд в 00. Возврат - та-же комбинация.

Фото и видео часов

Часы собраны в корпусе из под нерабочей «электроники».


Предлагаю для повторения схемы электронных часов на микроконтроллере ATmega 8, с отображением информации большими светодиодами. Часы рабочие, проверенные. Прошивки на данный момент дорабатываются. Делается больше табло, которое будет на удалении от основного блока, метров 5. На основном блоке тоже будет индикация - дублировать большое табло. Принципиальная схема светодиодных часов показана на рисунке - клик для увеличения.

Описание прибора

1. Функции.
1.1 Часы. Формат отображения времени 24-х часовый. Цифровая коррекция точности хода.


1.2 Термометр. Измерение температуры с двух датчиков в диапазоне -55,0 оС - 125,0 оС.


1.3 Поочередный вывод информации на индикатор.
1.4 Контроль основного источника питания.
1.5 Использование энергонезависимой памяти микроконтроллера для сохранения настроек и установок при отключении питания.
1.6 Три кнопки для установки и настройки: PLUS , MINUS , SET .

Работа устройства

При первом включении на дисплее рекламная заставка в течении 1 сек. Потом отображение времени.
Нажатие на SET_TIME переводит индикатор по кругу из основного режима часов (отображение текущего времени):
– режим отображения минут и секунд. Если в этом режиме одновременно нажать на кнопку PLUS и MINUS , то произойдет обнуление секунд.
– установка минут текущего времени.
– установка часов текущего времени.
– величина ежесуточной коррекции точности хода часов. Символ c и значение коррекции. Пределы установки -25?25 сек. Выбранная величина будет ежесуточно в 0 часов 0 минут и 30 секунд прибавлена/вычтена из текущего времени.
– символ t . Настройка продолжительности отображения часов.
– символ i . Время отображения символов индикации внутренней температуры (int ).
– символ d . установка времени индикации температуры с внутреннего датчика.
– символ o . Время отображения символов индикации внешней температуры (out ).
– символ u . установка времени индикации температуры с внешнего датчика.
– символ P . установка времени индикации рекламной заставки.
Пределы установки для времени отображения 0-60 сек. Если установлен 0, данный параметр на индикатор не выводится. Если все параметры установить в 0 – на индикаторе будут часы.

Настройка часов

3.1 Во всех режимах удержанием кнопок PLUS /MINUS производится ускоренная установка.
3.2 Если производились изменения настроек, через 10 секунд от последнего изменения новые значения запишутся в энергонезависимую память (EEPROM) и будут считаны оттуда при повторном включении питания. Индикатор перейдет в основной режим времени.
3.3 Новые настройки вступают в силу по ходу установки.

Контроль питания

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


На данный момент разрабатываются печатные платы, проводится корекция схемы, можно и коллективно. Если будут идеи и пожелания по усовершенствованию часов - пишите на форуме. Авторы конструкции: Александрович & SOIR (Soir&C.E.A)

Предлагаю для самостоятельной сборки две очень простые схемы, а именно часы на микроконтроллере PIC и AVR. Основа одной схемы микроконтроллер AVR Attiny2313, а другой PIC16F628A

Эти схемы часов на микроконтроллере очень помогут начинающим радиолюбителям разобраться с вопросами работы и программирования микроконтроллеров.

Рассмотрим подробней эту простую схему: Питание можно подавать как от трех пальчиковых батареек, так и от


Микроконтроллер Attiny2313 тактируется кварцем на 16 МГц. В качестве счетчика времени, в внутренней схеме микроконтроллера используется 16 битный таймер с делителем на 256. Как только внутренний счетчик досчитает до 625, осуществится прерывание. Поэтому у нас будут происходить прерывания 100 раз в секунду.

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

В соответствии с этим принципом, создаем значение текущего времени записанное в глобальных переменных. Теперь нам необходимо визуально отобразить эти данные. Так как микроконтроллер имеет ограниченное число портов, то воспользуемся такой особенностью как инерционность цифрового сегментного индикатора sa15-11gwa. Катоды его индикаторов соединены параллельно, а аноды имеют раздельное управление, что позволяет в любой момент времени вывести цифру на любой из четырех индикаторов.

Быстро переключая порт микроконтроллера, к которому подсоединены все катоды и быстро коммутируя аноды, создается иллюзия отображения всех четырех цифр в сегментном индикаторе, хотя фактически работает только один из сегментов. Если текущее время 11:57, то сначала выводим цифру один на первый индикатор часов, через 1 мс выводим цифру 1 на второй индикатор еще через 1 мс отображаем 5 на 3 индикатор, спустя 1 мс отображаем 7 на 4 индикаторе и так далее циклически, обновляя каждый индикатор через 1 мс.

Состояние кнопок управления часами опрашиваются по завершению каждого цикла отображения около 40 раз в секунду.

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

Эта конструкция хоть и на другом типе микроконтроллера, но не менее сложная чем предыдущая схема.


Алгоритм работы прошивки также простой в архиве имеются очень подробные комментарии по коду программы. Два тумблера кн1 и кн2 предназначены для коррекции времени - часов и минут. Точность часов зависит от частоты используемого кварца.

Конструктивно часы выполнены на двух печатных платах, располагающихся рядом под углом 90 градусов. На первой плате расположен индикатор, а вся остальная электроника на второй. Резервное питание в роли которых используется три батарейки размещенные в держателе из старой китайской зажигалки со светодиодом. Для питания от сети переменного тока подойдет любой на 5В и током 150мА.


В архиве который вы можете скачать по зеленой ссылке находится разводка обоих печатных плат в программе Sprint Layout и прошивка на микроконтроллер PIC с исходным кодом программы под MP_LAB IDE, с подробными комментариями.

И саму программу, можно также найти и у нас

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


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

При первом включении на дисплее возникает рекламная заставка в течении одной секунды. Потом осуществляется отображение времени. Нажатие на кнопку SET_TIME переключает индикатор по кругу из основного режима часов:

Абсолютно, во всех ячейках удержанием кнопок PLUS/MINUS осуществляется ускоренная установка. Если настройки изменялись пользователем, то через 10 секунд новые значения сохраняться в энергонезависимой память микроконтроллера и будут считываться. при прошивки МК выставляем следующим образом:


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


В прошивки будильника реализованы графики смен: 4/5 (четыре на пятый) – 4 дня по 1 сменам, 1 выходной, 4 дня по 2 сменам, 1 выходной, 4 дня по ночным, 1 выходной; – день, ночь, 2 выходных; По будням – Пн-Пт - рабочие дни, Сб-Вс - Выходной; (Праздничные дни не учитываются); Ежедневно.

Пользователь сам выбирает тип граффика будильника и задает любое время срабатывания. В вариантах 4/5 и день, ночь, 2 выходных – необходимо дополнительно выбрать текущую смену.

Кроме того в прошивке МК реализованы следующие функции: Переход на летний-зимний период; Корректировка времени; Ускоряющийся сигнал будильника; Отображение нуля в разряде часов и в разряде даты

Схема часов построена на базе часовой микросхемы DS1307 и микроконтроллера MEGA8. Схема (помещена в архив с прошивкой МК и чертежами печатных плат) рассчитана на применение семисегментных цифровых индикаторов с общим анодом на напряжение 5В. (ВНИМАНИЕ! На схеме для упрощения не нарисованы балластные резисторы. Их требуется устанавить на каждый сегмент индикаторов. Всего 112 шт. Номинал рассчитывается согласно документации. В я использовал сегментные индикаторы типа fys15011 и fyd-5622. Если примените более мощные, то скорей всего без дополнительных транзисторных ключей не обойтись.

Чертеж печатной платы разрабатывалась под уже имеющуюся коробку от старых сломанных часов. На разъём Alarm (будильник) можно подсоединить маломощную нагрузку, допустим музыкальную открытку, а джампером JP1 – отсоединяем внутренний биппер. Микроконтроллер можно прошиватьь сразу на плате, что существенно облегчает настройку в случае модификации конструкции.

Настройка часов
Для этого необходимо войти в режим задания параметров:
Параметр-Значение- Сохранять в памяти
P.01 - ЧАСЫ [-]
P.02 - МИНУТЫ [-]
P.03 - ДЕНЬ [-]
P.04 - МЕСЯЦ [-]
P.05 - ГОД [-]
Р.06 - Тип будильника [+] (1-4/5; 2-5/8; 3-ЖД график; 4-ежедневно)
P.07 - СМЕНА [+]
P.08 - Буд.1.ЧЧ [+]
P.09 - Буд.1.ММ [+]
P.10 - Буд.2.ЧЧ [+]
P.11 - Буд.2.ММ [+]
P.12 - Буд.3.ЧЧ [+]
P.13 - Буд.3.ММ [+]
P.14 - Корректировка (Д.Ч) [+]
P.15 - Летний/зимний период [+]
P.16 - Ускоряющийся бипер [+]
P.17 - Отображать незначащий ноль в разряде часов [+]
P.18 - Отображать незначащий ноль в разряде даты [+]

Настройка Будильника: Кнопкой Вкл/Вкл Буд. - осуществляется Вкл/Вкл, при этом:При типе будильника 1: Буд.1 - 1 смена; Буд.2 - смена; Буд.3 - 3 смена;
График смен:1,2,3,4 - первая смена; 5 - выходной; 6,7,8,9 - вторая смена; 10 - выходной; 11,12,13,14 - 3 смена; 15,16 - выходной; Затем дни повторяются.
При первом типе будильника 2: Буд.1 - задает время сигнала; Буд.2, Буд.3 - не срабатывает; График смен: По будням.
При третьем типе будильника: Буд.1 - устанавливается время день; Буд.2 - задает время ночь; Буд.3 - не срабатывает;
График смен: – день, ночь, 2 выходных;. При типе будильника 4 Буд.1, Буд.2, Буд.3- задается время; Если планируете использовать только один будильник - задайте время трех одинаковым.
При графике смен: Ежедневно. Если нажать кнопки Выкл.Буд. в режиме задания параметров - произойдет выход из настроек без сохранения.
Корректировка: При корректировки применяется следующий способ: +/- Ч.Д, где: Ч - количество секунд корректируемое в час (max 9). Д - секунды корректируемое в день. ВНИМАНИЕ! При выключенном питании корректировка не осуществляется. При включении - проверьте правильность времени.