Часы на avr схема

Часы на avr схема

Популярное

  • Устройство и программирование микроконтроллеров AVR для начинающих — 143
  • Трехканальный термостат, терморегулятор, таймер на ATmega8 — 70
  • Двухканальный термостат, терморегулятор на ATmega8 — 67

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

Конструкция собрана на микроконтроллере ATTiny26 и часов реального времени DS1307. В качестве индикатора текущего времени использован четырехразрядный семисегментный светодиодный индикатор (ультраяркий, голубого цвета свечения, что неплохо смотрится в темное время, и, заодно, часы играют роль ночника). Управление часами происходит двумя кнопками. Благодаря использованию микросхемы часов реального времени DS1307, алгоритм программы получился довольно простым. Общение микроконтроллера с часами реального времени происходит по шине I2C, и организованно программным путем.

К сожалению, в схеме есть ошибка:
— выводы МК к базам транзисторов нужно подключать:
РВ0 к Т4, РВ1 к Т3, РВ2 к Т2, РВ3 к Т1
или поменять подключение коллекторов транзисторов к разрядам индикатора:
Т1 к DP1 ….. Т4 к DP4

Детали, используемые в схеме часов:

♦ микроконтроллер ATTiny26:

♦ часы реального времени DS1307:

♦ 4-разрядный семисегментный светодиодный индикатор – FYQ-5641UB -21 с общим катодом (ультраяркий, голубого цвета свечения):

♦ кварц 32,768 кГц, с входной емкостью 12,5 пф (можно взять с материнской платы компьютера), от этого кварца зависит точность хода часов:

♦ все транзисторы — NPN-структуры, можно применить любые (КТ3102, КТ315 и их зарубежные аналоги), я применил ВС547С
♦ микросхемный стабилизатор напряжения типа 7805
♦ все резисторы мощностью 0,125 ватт
♦ полярные конденсаторы на рабочее напряжение не ниже напряжения питания
♦ резервное питание DS1307 – 3 вольтовый литиевый элемент CR2032

Для питания часов можно использовать любое ненужное зарядное устройство сотового телефона (в этом случае, если напряжение на выходе зарядного устройства в пределах 5 вольт ± 0,5 вольта, часть схемы — стабилизатор напряжения на микросхеме типа 7805, можно исключить)
Ток потребления устройством составляет — 30 мА.
Батарейку резервного питания часов DS1307 можно и не ставить, но тогда, при пропадании напряжения в сети, текущее время придется устанавливать заново.
Печатная плата устройства не приводится, конструкция была собрана в корпусе от неисправных механических часов. Светодиод (с частотой мигания 1 Гц, от вывода SQW DS1307) служит для разделения часов и минут на индикаторе.

Установки микроконтроллера заводские: тактовая частота — 1МГц, FUSE-биты трогать не надо.

Алгоритм работы часов (в Algorithm Builder):

1. Установка указателя стека
2. Настройка таймера Т0:
— частота СК/8
— прерывания по переполнению (при такой предустановленной частоте вызов прерывания происходит каждые 2 миллисекунды)
3. Инициализация портов (выводы РА0-6 и РВ0-3 настраиваются на выход, РА7 и РВ6 на вход)
4. Инициализация шины I2C (выводы РВ4 и РВ5)
5. Проверка 7-го бита (СН) нулевого регистра DS1307
6. Глобальное разрешение прерывания
7. Вход в цикл с проверкой нажатия кнопки

При первом включении, или повторном включении при отсутствии резервного питания DS307, происходит переход в первоначальную установку текущего времени. При этом: кнопка S1 – для установки времени, кнопка S2 – переход к следующему разряду. Установленное время – часы и минуты записываются в DS1307 (секунды устанавливаются в ноль), а также вывод SQW/OUT (7-й вывод) настраивается на генерацию прямоугольных импульсов с частотой 1 Гц.
При нажатии кнопки S2 (S4 — в программе) происходит глобальный запрет прерываний, программа переходит в подпрограмму коррекции времени. При этом, кнопками S1 и S2 устанавливаются десятки и единицы минут, затем, с 0 секунд, нажатием кнопки S2 происходит запись уточненного времени в DS1307, разрешение глобального прерывания и возвращение в основную программу.

Читайте также:  Skoda octavia iii обзор

Часы показали хорошую точность хода, уход времени за месяц — 3 секунды.
Для улучшения точности хода, кварц рекомендуется подключать к DS1307, как указано в даташите:

Программа написана в среде «Algorithm Builder».
Вы можете, на примере программы часов, ознакомиться с алгоритмом общения микроконтроллера с другими устройствами по шине I2C (в алгоритме подробно прокомментирована каждая строчка).

Фотография собранного устройства и печатная плата в формате .lay от читателя сайта Анатолия Пильгук, за что ему огромное спасибо!

В устройстве применены: Транзисторы — СМД ВС847 и ЧИП резисторы

Приложения к статье:

Схема часов в SPL7 (42,9 KiB, 3 303 hits)

Программа часов в "Algorithm Builder" (6,3 KiB, 4 245 hits)

Программа часов в HEX коде (3,1 KiB, 2 706 hits)

Даташит DS1307 на русском языке (312,1 KiB, 6 000 hits)

Второй вариант программы часов в АБ (для тех у кого нескачивается верхний)

Программа часов в АБ (11,4 KiB, 1 998 hits)

Печатная плата часов от Анатолия Пильгук в формате .lay (61,2 KiB, 690 hits)

(13 голосов, оценка: 4,92 из 5)


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

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

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

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

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

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

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

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

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

Читайте также:  Как использовать комбо в мортал комбат 10

Теперь разберем код:
Динамическая индикация использует 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

Популярное

  • Устройство и программирование микроконтроллеров AVR для начинающих — 143
  • Трехканальный термостат, терморегулятор, таймер на ATmega8 — 70
  • Двухканальный термостат, терморегулятор на ATmega8 — 67

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

Конструкция собрана на микроконтроллере ATTiny26 и часов реального времени DS1307. В качестве индикатора текущего времени использован четырехразрядный семисегментный светодиодный индикатор (ультраяркий, голубого цвета свечения, что неплохо смотрится в темное время, и, заодно, часы играют роль ночника). Управление часами происходит двумя кнопками. Благодаря использованию микросхемы часов реального времени DS1307, алгоритм программы получился довольно простым. Общение микроконтроллера с часами реального времени происходит по шине I2C, и организованно программным путем.

К сожалению, в схеме есть ошибка:
— выводы МК к базам транзисторов нужно подключать:
РВ0 к Т4, РВ1 к Т3, РВ2 к Т2, РВ3 к Т1
или поменять подключение коллекторов транзисторов к разрядам индикатора:
Т1 к DP1 ….. Т4 к DP4

Детали, используемые в схеме часов:

♦ микроконтроллер ATTiny26:

♦ часы реального времени DS1307:

♦ 4-разрядный семисегментный светодиодный индикатор – FYQ-5641UB -21 с общим катодом (ультраяркий, голубого цвета свечения):

♦ кварц 32,768 кГц, с входной емкостью 12,5 пф (можно взять с материнской платы компьютера), от этого кварца зависит точность хода часов:

♦ все транзисторы — NPN-структуры, можно применить любые (КТ3102, КТ315 и их зарубежные аналоги), я применил ВС547С
♦ микросхемный стабилизатор напряжения типа 7805
♦ все резисторы мощностью 0,125 ватт
♦ полярные конденсаторы на рабочее напряжение не ниже напряжения питания
♦ резервное питание DS1307 – 3 вольтовый литиевый элемент CR2032

Читайте также:  Как называется навязчивая реклама

Для питания часов можно использовать любое ненужное зарядное устройство сотового телефона (в этом случае, если напряжение на выходе зарядного устройства в пределах 5 вольт ± 0,5 вольта, часть схемы — стабилизатор напряжения на микросхеме типа 7805, можно исключить)
Ток потребления устройством составляет — 30 мА.
Батарейку резервного питания часов DS1307 можно и не ставить, но тогда, при пропадании напряжения в сети, текущее время придется устанавливать заново.
Печатная плата устройства не приводится, конструкция была собрана в корпусе от неисправных механических часов. Светодиод (с частотой мигания 1 Гц, от вывода SQW DS1307) служит для разделения часов и минут на индикаторе.

Установки микроконтроллера заводские: тактовая частота — 1МГц, FUSE-биты трогать не надо.

Алгоритм работы часов (в Algorithm Builder):

1. Установка указателя стека
2. Настройка таймера Т0:
— частота СК/8
— прерывания по переполнению (при такой предустановленной частоте вызов прерывания происходит каждые 2 миллисекунды)
3. Инициализация портов (выводы РА0-6 и РВ0-3 настраиваются на выход, РА7 и РВ6 на вход)
4. Инициализация шины I2C (выводы РВ4 и РВ5)
5. Проверка 7-го бита (СН) нулевого регистра DS1307
6. Глобальное разрешение прерывания
7. Вход в цикл с проверкой нажатия кнопки

При первом включении, или повторном включении при отсутствии резервного питания DS307, происходит переход в первоначальную установку текущего времени. При этом: кнопка S1 – для установки времени, кнопка S2 – переход к следующему разряду. Установленное время – часы и минуты записываются в DS1307 (секунды устанавливаются в ноль), а также вывод SQW/OUT (7-й вывод) настраивается на генерацию прямоугольных импульсов с частотой 1 Гц.
При нажатии кнопки S2 (S4 — в программе) происходит глобальный запрет прерываний, программа переходит в подпрограмму коррекции времени. При этом, кнопками S1 и S2 устанавливаются десятки и единицы минут, затем, с 0 секунд, нажатием кнопки S2 происходит запись уточненного времени в DS1307, разрешение глобального прерывания и возвращение в основную программу.

Часы показали хорошую точность хода, уход времени за месяц — 3 секунды.
Для улучшения точности хода, кварц рекомендуется подключать к DS1307, как указано в даташите:

Программа написана в среде «Algorithm Builder».
Вы можете, на примере программы часов, ознакомиться с алгоритмом общения микроконтроллера с другими устройствами по шине I2C (в алгоритме подробно прокомментирована каждая строчка).

Фотография собранного устройства и печатная плата в формате .lay от читателя сайта Анатолия Пильгук, за что ему огромное спасибо!

В устройстве применены: Транзисторы — СМД ВС847 и ЧИП резисторы

Приложения к статье:

Схема часов в SPL7 (42,9 KiB, 3 303 hits)

Программа часов в "Algorithm Builder" (6,3 KiB, 4 245 hits)

Программа часов в HEX коде (3,1 KiB, 2 706 hits)

Даташит DS1307 на русском языке (312,1 KiB, 6 000 hits)

Второй вариант программы часов в АБ (для тех у кого нескачивается верхний)

Программа часов в АБ (11,4 KiB, 1 998 hits)

Печатная плата часов от Анатолия Пильгук в формате .lay (61,2 KiB, 690 hits)

(13 голосов, оценка: 4,92 из 5)

Ссылка на основную публикацию
Adblock detector