Простые часы на микроконтроллере AVR

Простые часы на микроконтроллере AVR

Схема и программа очень простых часов на микроконтроллере AVR с использованием микросхемы реального времени DS1307

Доброго дня уважаемые радиолюбители!
Приветствую вас на сайте «Радиолюбитель«

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

Конструкция собрана на микроконтроллере ATyni26 (просто именно этот МК был под рукой). Но вы можете применить любой другой МК, главное чтобы у него было 13 свободных входов — 11 для вывода текущего времени на четырехразрядный семисегментный светодиодный индикатор и 2 вывода — на кнопки установки и коррекции времени.

Схема часов:

часы на микроконтроллере ATiny26

[yandex_up]

В схеме применены следующие детали:
— Микроконтроллер — ATyni26 в DID корпусе
— Часы реального времени — DS1307 в DIP корпусе
— Кварц — 32,768 кГц, с входной емкостью 12 пф (можно взять с материнской платы компьютера), от этого кварца зависит точность хода часов
— резервное питание DS1307 — 3 вольтовый литиевый элемент CR2032
— 4-разрядный семисегментный светодиодный индикатор — FYQ-5641UB -21 с общим катодом (ультраяркий, голубого цвета свечения)
— все транзисторы — NPN-структуры, можно применить любые (КТ3102, КТ315 и их зарубежные аналоги), я применил ВС547С
— микросхемный стабилизатор напряжения типа 7805
— все резисторы мощностью 0,25 ватт
— полярные конденсаторы на рабочее напряжение 50 вольт
Ток потребления устройством составляет до 30 мА.
Для питания конструкции можно использовать любое ненужное зарядное устройство от телефона или подходящий блок питания с выходным напряжением 7-9 вольт.
Общение микроконтроллера с часами DS1307 происходит по шине I2C и организовано программным путем.
Батарейку резервного питания часов DS1307 можно и не ставить, но в этом случае, при пропадании напряжения в сети, текущее время придется устанавливать заново.
Печатная плата устройства не приводится, конструкция была собрана в корпусе от неисправных механических часов. Светодиод (с частотой мигания 1 Гц) служит для разделения часов и минут в конструкции.

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

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

Расположение выводов микроконтроллера ATyni26:

Attyni26

Расположение выводов DS1307:

Выводы DS1307

Типовая схема подключения D1307:

Схема подключения DS1307

Рекомендуемая схема подключения кварца к DS1307:

Рекомендуемое подключение кварца к DS1307

Общение микроконтроллера с часами реального времени DS1307 организовано программным путем, поэтому в схеме можно применить микроконтроллер у которого нет аппаратного модуля I2C.

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

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




3 комментария к “Простые часы на микроконтроллере AVR”

  1. Сделал такие часы на ATtiny26.Идут, но выставить минуты и часы переключателями S1 и S2 нельзя.S1 обнуляет , а S2 сбрасывает.
    Наверное надо доделать и дописать программу часов 1111.alp. Допишите пожалуйста.Очень надо.

    Ответить

Оставьте комментарий