Часы на микроконтроллере своими руками

Добавил пользователь Владимир З.
Обновлено: 18.09.2024



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

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

UPD: Оформил в корпус.

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

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

Чуть не забыл! Нужно сделать резервное питание, чтобы при отключении основного источника часы не сбрасывались, но выключалась индикация и потребление снижалось до минимума.

Схема получилась вот такая:

Индикатор с общим анодом, аноды подключены напрямую к порту C микоконтроллера, резисторы сегментов я поставил 220 Ом, можно даже меньше больше, ночью очень ярко светятся (То есть, можно и меньше, но не меньше 100 Ом, тогда на каждую ножку порта будет нагрузка 35мА максимум, а по даташиту можно 40мА). Неправильно посчитал. Надо больше. Гораздо больше… Переделал на 560 Ом, и то ток больше чем по даташиту. Но работает.
На транзисторе Q1 сделан детектор напряжения питания. Он, как и кнопки, подключен на линии внешних прерываний, у ATMega16 их всего три.

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

Теперь разберем код:
Динамическая индикация использует Timer0, часы на Timer2, кнопки на внешних прерываниях Int0 и Int1, контроль питания на внешнем прерывании Int2.
В основном цикле осталось только преобразование времени в двоично-десятичное и уход в спячку, причем функцию Bin2BCD специально сократил, потому что минут и часов не бывает больше 100, значит, нет смысла проверять ее на 10000, 1000 и 100.
Сама функция времени была взята из AVR ApNote134 и урезана до необходимых размеров.
Установку часов и минут сначала поместил в обработку прерывания счетчика секунд, но потом решил, что шаг в одну секунду — это слишком медленно и переместил в обработчик динамической индикации, подобрав опытным путем количество переполнений таймера для нормальной скорости коррекции.


Для начала я собрал макет на Pinboard2:


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

Плату делал ЛУТом. Сначала попробовал ламинатором, но, видимо, температуры в 170 градусов оказалось недостаточно и перевелось все плохо. Так что сделал по-старинке утюгом. В этой плате я впервые провел две дорожки под резистором 1206. Как видите, получилось нормально.

Во фьюзах нужно выставить внутренний RC-генератор на 4 или 8 МГц и отключить JTAG.

Ну и, как обычно, несколько фоток:



Во вложении исходник, схема, файл Протеуса для моделирования, прошивка.


UPD: Оформил в корпус:

Коробочку взял от автомобильного ароматизатора. Под индикатор подложил антистатический пакетик в один слой.
Кстати, параметры делителя датчика напряжения питания в итоге получились 39кОм и 6.2кОм.
END_UPD


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

Дисплей построен на шести 7-сегментных светодиодных индикаторов с регулировкой яркости. Часы также оснащены резервным питанием от батарей.

Описание конструкции микроконтроллерных часов

Как уже было сказано выше, часы имеют шестизначный дисплей, состоящий из двух трехзначных дисплеев T-5631BUY-11, работающий в мультиплексном режиме. Аноды индикаторов сгруппированы по разрядам и переключаются с помощью транзисторов Т1…Т6.

Катоды сгруппированы в сегменты и питаются непосредственно от микроконтроллера IO1 Attmega8. Частота мультиплексирования составляет 100Гц.

Часы контролируется низкочастотным кварцевым резонатором X1 с частотой 32768 Гц. В результате активации бита CKOPT, разрешающего использование внутренних конденсаторов 36пф для кварца, отпадает необходимость в использовании внешних конденсаторов.

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

Пъезоизлучатель REP1 издает звуковой сигнал будильника и сигнализирует о завершении работы таймера. Во время звукового сигнала на выводе 16 (порт PB2) появляется лог.1. Этот сигнал можно использовать для управления какой-либо нагрузкой.

Управление часами производится тремя кнопками — минуты, часы и режим. Кнопки подключены через резисторы, которые защищают порты микроконтроллер Attmega8. Схема питается от источника 5 вольт (7805). Потребление тока в основном зависит от числа активных индикаторов, а так же от степени настройки яркости.

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


Часы на микроконтроллере Attiny2313

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

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

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

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

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

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

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

Часы на микроконтроллере PIC16F628A

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

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

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


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

Схему программатора для PIC микроконтроллеров и саму программу, можно также найти и у нас

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

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

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

режим отображения минут и секунд. Если одномоментно нажать на кнопку PLUS и MINUS, то секунды обнуляться.
установка минут текущего времени.
установка часов.
величина ежесуточной коррекции точности хода (будет ежесуточно прибавляться или вычитаться из текущего времени.
символ t. Настройка продолжительности отображения времени на дисплеи.
символ o. - температуры.
символ P. времемя индикации рекламной заставки.
Пределы установки для времени отображения 0-60 сек.

Абсолютно, во всех ячейках удержанием кнопок 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). Д - секунды корректируемое в день. ВНИМАНИЕ! При выключенном питании корректировка не осуществляется. При включении - проверьте правильность времени.

Самодельные электронные часы на контроллере

Как видно из схемы часов, микроконтроллер является единственной микросхемой, используемой в данном устройстве. Для задания тактовой частоты используется кварцевый резонатор на 4 МГц. Для отображения времени использованы индикаторы красного цвета с общим анодом, каждый индикатор состоит из двух цифр с десятичными точками. В случае использования пьезоизлучателя, конденсатор С1 - 100мкФ можно не ставить.

Печатная плата и детали часов с будильником на PIC16F628

Можно применить любые индикаторы с общим анодом, лишь бы каждая цифра имела собственный анод. Чтоб электронные часы были хорошо видны в темноте и с большой дистанции - старайтесь выбрать АЛС-ки чем покрупнее.

электронные часы с светодиодными индикаторами

Индикация в часах осуществляется динамически. В данный конкретный момент времени отображается лишь одна цифра, что позволяет значительно снизить потребление тока. Аноды каждой цифры управляются микроконтроллером PIC16F628A. Сегменты всех четырех цифр соединены вместе и через токоограничивающие резисторы R1 … R8 подключены к выводам порта МК. Поскольку засвечивание индикатора происходит очень быстро, мерцание цифр становится незаметным.

электронные часы своими руками на АЛС

Для настройки минут, часов и будильника - используются кнопки без фиксации. В качестве выхода для сигнала будильника используется вывод 10, а в качестве усилителя - каскад на транзисторах VT1,2. Звукоизлучателем является пьезоэлемент типа ЗП. Для улучшения громкости вместо него можно поставить небольшой динамик.

конструкция самодельных часов с МК

Питаются часы от стабилизированного источника напряжением 5В. Можно и от батареек. В часах реализовано 9 режимов индикации. Переход по режимам осуществляется кнопками "+" и "-". Перед выводом на индикацию самих показаний, на индикаторы выводится короткая подсказка названия режима. Длительность вывода подсказки - одна секунда.

электронные часы с будильником в плите

Кнопкой "Коррекция" часы - будильник переводятся в режим настроек. При этом кратковременная подсказка выводится на пол секунды, после чего корректируемое значение начинает мигать. Коррекция показаний осуществляется кнопками "+" и "-". При длительном нажатии на кнопку, включается режим автоповтора, с заданной частотой. Все значения, кроме часов, минут и секунд, записываются в EEPROM и восстанавливаются после выключения - включении питания.


светящиеся электронные часы на микроконтроллере

Если в течение нескольких секунд ни одна из кнопок не нажата, то электронные часы переходят в режим отображения времени. Нажатием на кнопку "Вкл/Выкл" включается или выключается будильник, это действие подтверждается коротким звуком. При включенном будильнике светится точка в младшем разряде индикатора. Думал куда бы пристроить часы на кухне, и решил вмонтировать их прямо в газовую плиту:) Материал прислал in_sane.

Форум по обсуждению материала ЭЛЕКТРОННЫЕ ЧАСЫ БУДИЛЬНИК


Микрофоны MEMS - новое качество в записи звука. Подробное описание технологии.


Про использование технологии беспроводного питания различных устройств.


В каком направлении течет ток - от плюса к минусу или наоборот? Занимательная теория сути электричества.


Приводятся основные сведения о планарных предохранителях, включая их технические характеристики и применение.


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


Простые часы из отдельных светодиодов на микроконтроллере ATMEGA8

time 0

Часы-будильник на ATMEGA8 с функцией измерения атмосферного давления, температуры и влажности.

time 0

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

time 0

Будильник на ATMEGA88 с функцией измерения атмосферного давления и температуры.

Часы 2313

Автор vitalyadm

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



- часы на PIC16F628A и датчике температуры DS18B20.

- 4-х сегментный светодиодный индикатор.

- анимированная смена индикации.


Любительская измерительная схема на микроконтроллере,

с программной конвертацией информации в виде текста, на экран телевизора или монитора,

имеющих низкочастотный AV вход.

ТВ текст

Схема обладает функцией, вывода на экран телевизора или аналогового монитора, часов реального времени, с отображением даты, и данных цифрового термометра.

В виде текстовой строки ЧЧ:ММ.СС_ДД/ММ/ГГ термометр с точностью до 0.1ºС.

часы ЛЕД

Устройство 2 в 1 часы и секундомер, на Attiny2313.

Отображение в полном формате; часы, минуты, секунды.

Раздельное, удобное управление.


Счётчик отработанного времени предназначен, для контроля за временем наработки ресурсоограниченного устройства в рабочем состоянии.

Счет всегда начинается с включением устройства в активное состояние, и заканчивается когда устройство отключается , а данные остаются в памяти МК ATtiny2313. Срок хранения информации при отключении питающего напряжения не ограничен.


– часы с цифровой коррекцией точности.
– будильник.
– термометр.
– индикация на семисегментный индикатор.
– автоматическая регулировка яркости индикатора.

Читайте также: