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

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

В этой статье я хочу вам представить собственную разработку часов с несколькими полезными функциями: будильник, календарь, таймер, а также самый простой секундомер. Проект выполнен с использованием микроконтроллера ATmega8 — 16pu. Для отображения символов используется 4 разрядный семисегментный индикатор. Управление производится с помощью 6 тактовых кнопок.

Работа и принцип работы, а также описание устройства будут продемонстрированы в видео.

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

Вот как выглядит схема в Proteus.

Для PonyProg и CodeVisionAVR нужно выставлять следующие значения фьюз-битов:

Прошивка и проект в proteus в архиве.

Сегодня мы продолжим поиски идеальной микросхемы часов реального времени (RTC). Часы будем изготавливать на основе DS3231. Индикация будет использоваться более удобная для разработки — LCD дисплей, на котором будет отображаться вся информация сразу кроме настроек. В таком виде часы удобно использовать как настольный вариант.

Итак, рассмотрим саму микросхему DS3231. DS3231 — это часы реального времени с экстремально точным ходом (подобрали же производители словечко) благодаря встроенному кварцевому резонатору с температурной компенсацией. Интерфейс передачи данных — I 2 C. В этой микросхеме есть также вход для напряжения резервной батареи, при отключении основного питания микросхема автоматически переключается на работу от резервной батареи, точность хода от резервной батареи не нарушается. Весьма радует, не правда ли? В DS3231 поддерживается подсчет секунд, минут, часов, дней месяца (даты), дней недели, месяцев и лет (с учетом високосного года для месяцев). Поддерживается работа в 12 и 24 часовом формате. Имеется 2 будильника с возможностью их настройки и отслеживания состояния. Подстройка точности температурной компенсации. А также два выхода — на 32 кГц (выход составляет 32.768 кГц) и программируемый выход от 1 Гц до 8.192 кГц. Имеется также вывод сброса — RST. микросхема часов реального времени выпускается в корпусе SO-16. Корпус достаточно крупный, но если учитывать что внутри уже имеется кварц, да еще и температурно компенсируемый, то мне кажется, с размерами тут все отлично. У DS3231 есть близнец в виде DS3232, у которого, правда, на 2 ножки больше. Все это очень напоминает продукцию компании NXP — микросхемы часов PCA2129 и PCF2129. Аналогично температурно компенсируемый встроенных кварцевый резонатор, оба такие же близнецы только с разным количеством n.c. выводов и схожими функциями относительно DS3231 помимо хронометрожа времени.

RTC DS3231 имеются в продаже в виде модулей с необходимой обвязкой, а также до комплекта микросхемой EEPROM, которая чаще всего и даром не нужно, только веса добавляет:

Кроме необходимых деталей на плате модуля есть также светодиод, функция которого — индикация подключения питания к выводам. Наверно просто так доставили, для красоты.

Читайте также:  Как сделать фундамент для старого дома

Что важно знать при работе с такой микросхемой часов реального времени, так это как же извлечь из нее данные или записать их туда. Часы имеют интерфейс I 2 C. Для того чтобы осуществить запись данных (а это нужно и для того чтобы прочитать данные) нужно передать условие старта (эти команды осуществляются по средствам аппаратного или программного I 2 C для микроконтроллера), далее передать адрес микросхемы с битом записи, далее передать адрес регистра к которому будем обращаться и далее передать в этот регистр байт данных, если следом передать еще байт данных, он запишется в следующий регистр и так далее. По окончании нужно передать условие остановки. Графическое изображение выше сказанного на рисунке:

Запись данных необходима для первоначальной настройки, а также для настройки текущего времени. Далее нам нужно постоянно получать данные о текущем времени и даты. Для этого необходимо осуществлять чтение из регистров хранения этой информации. Чтение состоит из двух процедур — установить указатель на нужный регистр и прочитать его. Чтобы установить указатель на нужный регистр, нужно передать условие старта, потом передать адрес микросхемы с битом записи и байт с адресом регистра. Далее либо условие остановки и следом условие старта, либо просто рестарт. Теперь вторая процедура — непосредственно чтение из регистров. Старт передан, далее нужно отправить адрес микросхемы с битом чтения и далее считывать регистры в необходимом количестве, по окончании передать условие остановки. Если информация из регистра была прочитана, то указатель автоматически переходит на следующий за ним регистр без лишних действий со стороны микроконтроллера (мастер устройства). На рисунке проиллюстрировано все выше сказанное относительно чтения регистров по средствам I 2 C интерфейса:

  • для записи — 0b11010000
  • для чтения — 0b11010001

Программно код на языке Си будет выглядеть следующим образом:

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

Да — отличной фишкой DS3231 является то, что эта же микросхема выполняет функции термометра (а то как же еще осуществлять температурную компенсацию) и возможность чтения текущей температуры. Максимальное разрешение температуры составляет 0.25 градусов Цельсия. Также период обновления температуры достаточно большой — около 1 минуты. Да нам быстро то не к чему обновлять ее.

Схема же всего устройства часов выглядит так:

Микроконтроллер был выбран Atmega8 за свою широкую распространенность и небольшую цену. Данный микроконтроллер можно использовать как в корпусе DIP-28, так и в SMD исполнении в корпусе TQFP-32. Резистор R3 необходим для предотвращения самопроизвольного перезапуска микроконтроллера в случае появления случайных помех на выводе PC6. Резистор R3 подтягивает плюс питания к этому выводу, надежно создавая потенциал на нем. Для индикации используется жидко кристаллический (ЖК или LCD) дисплей. Мною использовался дисплей 2004А — 4 строки по 20 символов больше для красоты, поэтому можно применять дисплей более привычный — 2 строки по 16 символов. ЖК дисплей подключается к микроконтроллеру по четырех битной системе. Переменный резистор R2 необходим для регулировки контраста символов на дисплее. Вращением движка этого резистора добиваемся наиболее четких для нас показаний на экране. Подсветка ЖК дисплея организована через вывод "А" и "К" на плате дисплея. Подсветка включается через резистор, ограничивающий ток — R1. Чем больше номинал, тем более тускло будет подсвечиваться дисплей. Однако пренебрегать этим резистором не стоит во избежание порчи подсветки. Кнопки S1 — S4 управляют настройками часов. Светодиод сигнализирует о том, что будильник сработал. Светодиод можно заменить на какую-либо звуковую схему. Резисторы R5 — R8 являются подтягивающими (pull-up) и необходимы для формирования прямоугольных импульсов на выводах микросхемы часов. Также это необходимо для правильной работы протокола I2C. Для питания схемы используется микросхема линейного стабилизатора L7805, ее можно заменить на отечественный аналог пяти вольтового линейного стабилизатора КР142ЕН5А, либо применить другу микросхему стабилизатора напряжения в соответствии с подключением ее в схеме (например LM317 или импульсные стабилизаторы LM2576, LM2596, MC34063 и так далее). Далее 5 вольт стабилизируются другой микросхемой — AMS1117 в исполнении, дающей на выходе 3,3 вольта. Микросхема часов, в соответствии с даташитом, питается от напряжения 3,3 вольта. Однако максимальное напряжение составляет 5,5 вольта. Поэтому Данный стабилизатор можно использовать, а можно и нет, на ваше усмотрение. Стабилизатор напряжения AMS1117 можно также заменить на исполнение ADJ (AMS1117ADJ) — то есть регулируемый вариант, задать необходимое напряжение при таком выборе необходимо будет при помощи двух резисторов, подключаемых к микросхеме в соответствии с даташитом на нее.

Читайте также:  Минеральные удобрения для огурцов в теплице

Схема была собрана и отлажена с применением отладочной макетной платы для микроконтроллера ATmega8:

Назначение кнопок:

  • S1 — отключает сигнал будильника, либо выходит в главное меню из любого меню настроек
  • S2 — сброс микроконтроллера
  • S3 — изменяет время или дату в меню настроек
  • S4 — вход в меню настроек и перелистывание меню

Вывод 32 кГц может использоваться для контроля частоты кварцевого резонатора. Подключаем к этому выводу частотомер или осциллограф и контролируем частоту:

Как видно из скриншота осциллограммы, частота примерно соответствует 32,768 кГц (примерно в силу ограничения разрешения измерения частоты, а "на глаз" настолько точно трудно определить).

В итоге получились часы со следующими характеристиками:

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

Подытожим. Микросхема часов реального времени DS3231 является отличным решением. Точность хода сравнительно c какой-нибудь DS1307 или PCF8523 выше, а вот PCA/PCF2129 еще могут потягаться с ней. Среди рассмотренных мною микросхем часов реального времени данный экземпляр на сегодняшний день занимает первое место по функционалу и точности.

Для программирования микроконтроллера Atmega8 необходимо знать конфигурацию фьюз битов (скриншот сделан в программе AVR Studio):

К статье прилагается прошивка для микроконтроллера Atmega8, проект схемы в программе Proteus, а также видео работы часов (в самом начале сработает будильник — загорится светодиод).

В данном проекте мы разработаем и соберем цифровые часы на микроконтроллере. В качестве камня будем использовать микроконтроллер ATMEGA 16 и 6 семи сегментных индикатора (далее просто индикаторы или дисплеи). Код программы, разработанный под ATMEGA 16, может с легкостью использоваться на других камнях, таких как ATMEGA 32, ATMEGA 8515 и другие.

Читайте также:  Сколько стоит электронный уровень

Итак, наши цифровые часы работают следующим образом. Когда напряжение подано индикаторы выставляются в нули следующего вида «00:00:00» соответственно часы, минуты и секунды. Для установки времени будем использовать два кнопочных выключателя. Кнопка S 1 необходима для установки минут, при ее нажатии происходит инкремент переменной содержащей минуты на 1, при достижении значения в 59, происходит ее сброс и отсчет начинается сначала, т.е. с нуля.

Аналогичным образом работает кнопка S 2, только используется для установки переменной отвечающей за часы.

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

На рисунке ниже представлена наша схема, особенностью схемы является то, что управление всеми индикаторами осуществляется при помощи одного порта PORTB . С его помощью поочередно осуществляется запись одной цифры в индикатор. За поочередное включение,а именно за динамическую индикацию отвечает PORTC . Что такое динамическая индикация было сказано ранее. Важно отметить что все дисплеи с общим катодом, поэтому для включения того или иного дисплея нужно подать на его общий вывод сигнал низкого состояния, или просто «0».

Важно! Для правильной работы цифровых часов нужно чтобы внутренний генератор камня был настроен на частоту в 4 Мгц.

Код программы часов

Ниже представлен код для часов на микроконтроллере ATMEGA16. Программа была написана с использованием среды AVR Studio 5. Еще раз повторю, что данные часы работают от внутреннего тактового генератора. Который имеет определённую погрешность, поэтому период одной секунды может меняться. И вешать их на стену или нет и сверять по ним время решайте сами.

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