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


Простые электронные часы на микроконтроллере ATtiny26,
с использование микросхемы часов реального времени DS1307


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

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

Схема часов:

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

Схема часов на микроконтроллере AVR ATtiny26 и микросхеме DS1307

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

♦ микроконтроллер ATTiny26:
Микроконтроллер ATtiny26
♦ часы реального времени DS1307:
Часы реального времени DS1307
♦ 4-разрядный семисегментный светодиодный индикатор – FYQ-5641UB -21 с общим катодом (ультраяркий, голубого цвета свечения):
Четырехразрядный семисегментный индикатор
♦ кварц 32,768 кГц, с входной емкостью 12,5 пф (можно взять с материнской платы компьютера), от этого кварца зависит точность хода часов:
Кварц 32,768 кГц, 12,5 pF
♦ все транзисторы - NPN-структуры, можно применить любые (КТ3102, КТ315 и их зарубежные аналоги), я применил ВС547С
♦ микросхемный стабилизатор напряжения типа 7805
♦ все резисторы мощностью 0,125 ватт
♦ полярные конденсаторы на рабочее напряжение не ниже напряжения питания
♦ резервное питание DS1307 – 3 вольтовый литиевый элемент CR2032

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

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

Алгоритм работы часов (в Algorithm Builder):
Программа часов в Algorithm Builder1. Установка указателя стека
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 и ЧИП резисторы

Аналогичные часы можно собрать и на основе платы Arduino.


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

  Схема часов в SPL7 (42,9 КиБ, 4 260 hits)

  Программа часов в "Algorithm Builder" (6,3 КиБ, 5 241 hits)

  Программа часов в HEX коде (3,1 КиБ, 3 576 hits)

  Даташит DS1307 на русском языке (312,1 КиБ, 7 050 hits)


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

  Программа часов в АБ (11,4 КиБ, 2 834 hits)

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

Скачать программу с ЯндексДиска


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

Загрузка...


Другие конструкции на микроконтроллерах
1. Простой термометр на микроконтроллере ATmega8 и датчика температуры DS18B20
2. Двухканальный термометр на микроконтроллере ATmega8 и датчиках температуры DS18B20
3. Двухканальный термостат, терморегулятор на ATmega8 и датчиках DS18B20
4. Трехканальный термометр, термостат, терморегулятор с возможностью работы по времени, одноканальный таймер реального времени на ATmega8 и датчиках DS18B20
5. Двухканальный термометр, часы на ATmega8, датчиках температуры DS18B20, RTC DS1307, LCD 1602




Комментарии

Часы на микроконтроллере AVR ATtiny26 с DS1307 — 18 комментариев

  1. Добрый день! Разобрался с прошивкой, прошил, часы запустились. Алгоритм установки времени, конечно, своеобразный. Устанавливаются только минуты. Часы не могу выставить, делаю это сдвигая часы переходом через 59 минут. Это правильно? И по схеме. То, что нарисовано, время показывает так - если время 23-59, согласно схемы подключения разрядов выглядит так : 95-32. Пришлось резать проводники и вставлять перемычки между разрядами

    • Здравствуйте Анатолий!
      Да, сейчас присмотрелся, в схеме подключение разрядов с ошибкой, виноват.
      Алгоритм установки тоже не очень, согласен.
      С уважением, Admin.

      • Плату переделал с учетом всех обнаруженных ошибок. Работает 100%. Могу прислать, если интересно.
        Что еще обнаружил, что ДС-ка не сбрасывает настройки при отключении батарейки и обесточивании. Ждал более 5 минут, но, как только вставляю батарейку, сразу появляется сохраненное время. Из-за этого были трудности с повторной установки точного времени. Переводил время на 01-59, ждал до 2-00, потом ставил 02-59, ждал до 03-00 и так до 09-59. Когда время показывает 10-01 и далее, при установки времени часы устанавливают любое время, но не 10-23 или еще какое реальное. Сбиваются на 00-00, 02-00 и прочее. Пришлось ночью установить время, чтобы иметь реально действующее время.

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

        • Еще раз доброго дня Анатолий!
          1. При отключении питания DS1307 и повторном подключении питания (батарейки и +5 вольта) БИТ 7 регистра 0 (по которому определяется - перейти программе или нет в начальную установку) не всегда устанавливается в логическую 1 (условие перехода в подпрограмму начальной установки времени), в даташите написано, что "при включении питания начальное состояние всех регистров не определено". У меня был только один экземпляр DS1307 который стабильно устанавливал 7-й бит нулевого регистра при отключении всего питания и повторном включении в логическую единицу.
          Попробуйте выключать/включать устройство без батарейки.
          2. Вывести индикацию точки на семисегментном индикаторе при динамической индикации проблематично (хотя и возможно). Как вариант, пристроить светодиод между разрядами и подключить его к DS1307 - вывод SQW, как на схеме.
          3. Подключение кнопок и разрядов индикатора к МК переделать могу, если еще нужно (просто напишите пожелания, а я вышлю переделанную прошивку).
          4. За плату буду очень благодарен.

          С уважением, Admin.

  2. Добрый день
    кто может сделать на заказ 5 таких часов и сколько будет стоить?
    Цвет табло синий, размер 20х60мм примерно, кнопки для перевода выведены отдельно на гибких проводах.
    Заранее спасибо за ответ.

    • Здравствуйте Александр!
      Достоинство часов в том, что они просты.
      Но есть и недостаток (некритичный)- программа "сыроватая", писалась на скорую руку.
      Если найдете желающего их изготовить для Вас - напишите, я еще раз просмотрю и подправлю программу.
      С уважением, Admin.

  3. Файл _.7z не открывается:

    "Не удалось открыть файл как [7z] архив
    неожиданный конец данных"

    Что делать?

    • Здравствуйте zbv_AVR!
      Попробуйте второй вариант, он ниже:
      "Программа часов в АБ"
      С уважением, Admin.

  4. Сделал такие часы.Идут , но S1 и S2 не выставлют минуты и часы. Допишите пожалуйста программу в АБ. Пожалуйста, очень надо.

    • Доброго дня Snis!
      Программа работает в действующем экземпляре часов, кнопки работают, время выставляется.
      Может ошибка в монтаже кнопок?
      С уважением, Admin.

  5. Здравствуйте!
    Спасибо за программу на АБ для DS1307.
    Давно хотел такой пример. Но как ни старался, а запустить схему не смог.
    Здесь исходник не скачивается. Взял его не с этого сайта. И наверное с ошибкой.
    Помогите пожалуйста. Отправьте исходник на мою электронную почту.
    с Уважением Андрей

  6. Есть предложение , о более точном измерении реального времени.Нуждаюсь в вашей помощи,как программиста

    • Доброго дня Игорь!
      Давайте обсудим Ваше предложение и попробуем претворить в жизнь.
      С уважением, Admin.

  7. Подскажите как называется в АВ константа содержащая конец ОЗУ для инициализации стека. если такая существует?
    (у меня не задача инициализировать стек настройщиком, а немного другая)
    Работаю над диспетчером задержек/задач.

    • Доброго дня Mihail_nik!
      Такой константы (не только в АВ) — нет.
      Адрес ячейки памяти ОЗУ с которой будет определяться начало стека записывается в специальные регистры ввода-вывода (РВВ):
      — если объем ОЗУ менее 256 байт используется один восьмиразрядный регистр SPL (восьмиразрядный адрес стека)
      — если объем ОЗУ более 256 байт — используются два регистра: SPL и SPH (шестнадцатиразрядный адрес стека)
      По умолчанию АВ автоматически записывает в эти регистры конечный адрес ОЗУ, который вы самостоятельно можете изменить.
      С уважением, Admin.

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

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