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

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

Содержание

Типы микроконтроллеров со встроенными часами реального времени

Многие современные микроконтроллеры имеют встроенные часы реального времени (RTC) и не требуют подключения внешнего генератора тактовых сигналов. Это позволяет уменьшить количество внешних компонентов и упростить разработку устройств. Рассмотрим наиболее популярные семейства микроконтроллеров со встроенными RTC:

  • AVR от Microchip (ранее Atmel) — большинство моделей имеют внутренний RC-генератор
  • PIC от Microchip — многие 8-битные и 16-битные модели оснащены встроенными часами
  • STM32 от STMicroelectronics — практически все модели имеют RTC
  • MSP430 от Texas Instruments — низкопотребляющие микроконтроллеры со встроенными часами

Как работают внутренние генераторы в микроконтроллерах?

Внутренние генераторы в микроконтроллерах обычно построены на основе RC-цепочки (резистор-конденсатор). Принцип их работы следующий:


  1. При включении питания внутренний конденсатор начинает заряжаться через резистор
  2. Когда напряжение на конденсаторе достигает определенного уровня, срабатывает компаратор
  3. Конденсатор разряжается, и цикл повторяется
  4. Частота этих циклов зарядки-разрядки и является тактовой частотой микроконтроллера

Преимущества использования встроенных часов в микроконтроллерах

Использование встроенных часов реального времени в микроконтроллерах имеет ряд преимуществ:

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

Недостатки внутренних генераторов микроконтроллеров

Однако у встроенных RC-генераторов есть и недостатки по сравнению с внешними кварцевыми генераторами:

  • Меньшая точность — погрешность может достигать 1-2%
  • Зависимость частоты от температуры и напряжения питания
  • Ограниченный диапазон частот
  • Недостаточная стабильность для некоторых задач (например, точного отсчета времени)

Когда стоит использовать внешний кварцевый генератор?

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


  • Для точного отсчета времени (часы, таймеры)
  • При работе с высокоскоростными интерфейсами (USB, Ethernet)
  • Для стабильной работы радиочастотных модулей
  • При необходимости синхронизации нескольких устройств
  • Для достижения максимальной производительности микроконтроллера

Как выбрать оптимальный источник тактирования для микроконтроллера?

При выборе источника тактирования для микроконтроллера следует учитывать несколько факторов:

  1. Требуемая точность и стабильность частоты
  2. Допустимое энергопотребление устройства
  3. Стоимость и сложность разработки
  4. Условия эксплуатации (температура, вибрации)
  5. Требования к электромагнитной совместимости

Популярные микросхемы часов реального времени для микроконтроллеров

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

  • DS1307 — недорогой RTC с интерфейсом I2C
  • DS3231 — высокоточный RTC с термокомпенсацией
  • PCF8563 — низкопотребляющий RTC для портативных устройств
  • RV-3028-C7 — сверхминиатюрный RTC с низким током потребления

Программирование микроконтроллеров с внутренними часами

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


  1. Настройка битов конфигурации (фьюзов) при прошивке микроконтроллера
  2. Инициализация регистров управления тактированием в начале программы
  3. Использование специальных функций библиотек для работы с RTC
  4. Калибровка внутреннего генератора для повышения точности

Заключение

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


Маломощные ЖК-часы на микроконтроллере AVR128DA48. Схема и описание

Главная » Микроконтроллеры » Маломощные ЖК-часы на микроконтроллере AVR128DA48. Схема и описание

Это достаточно маломощные ЖК-часы построены на микроконтроллере AVR128DA48. Часы способные работать более трех лет от элемента CR2032 или «вечно» от солнечного элемента.

Также эти часы каждую минуту кратко отображают температуру, используя встроенный датчик температуры в AVR128DA48, а так же напряжение батареи, используя АЦП для считывания собственного напряжения питания. В схеме есть и шина I2C, поэтому вы можете добавить внешний датчик, например, датчик влажности.

Вступление

Хотя жидкокристаллические дисплеи (ЖК-дисплеи) являются относительно старой технологией, они по-прежнему обладают рядом преимуществ по сравнению с более новыми типами дисплеев, включая низкое энергопотребление, низкую стоимость и четкость отображения информации.

Недавно я приобрел несколько ЖК-дисплеев Densitron на eBay за несколько долларов. Цель — попробовать построить на них часы с низким энергопотреблением, чтобы посмотреть, насколько будет низким энергопотребление.

Дисплеи стандартного типа, доступны с совместимыми выводами от нескольких производителей. Такие дисплеи называются статическими (в отличие от мультиплексированных), что означает, что каждый сегмент имеет свой контакт. Поэтому для четырехразрядного дисплея получается 28 выводов плюс три десятичных знака, двоеточие и общий контакт, что в сумме дает 33 контакта.

Дисплеи, которые я нашел, имеют два общих контакта, а также обычно имеют дополнительные специальные сегменты, такие как знак минус, в 40-контактном корпусе.

Параметры ЖК-дисплея

Большинство 40-контактных ЖК-дисплеев с интервалом между рядами 33 мм должны быть совместимы с этой платой. Вот некоторые, которые я нашел. Все они имеют 4 разряда и 3 десятичные точки на контактах с 5 по 27, с 29 по 32 и с 34 по 37. Общий вывод на 1 и 40 контакте, а также несколько дополнительных символов:

  • Densitron DG-201208-RP: Двоеточие (28), Треугольник (38)
  • Varitronix VI-402-DP-RC-S: Двоеточие (28)
  • RS PRO 7-Segment LCD: Двоеточие (28)
  • Lumex LCD-S401C52TR: Двоеточие (28)
  • EDC190: Двоеточие (28)
  • EDS805: LB (2), Минус (3)

Ниже приведена принципиальная схема маломощных ЖК-часов

Печатная плата

Схема не так сложна, как кажется. Каждый сегмент дисплея просто подключается к одной линии ввода-вывода процессора. Все сегменты одной цифры подключены одному порту, причем десятичная точка на 7 бите, сегмент A на 6 бите, а сегмент G на 0 бите (с несколькими исключениями, описанными ниже).

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

Я постарался сделать печатную плату максимально универсальной. Плата подойдет под любой из дисплеев в приведенном выше списке. Чтобы отобразить какой-либо из дополнительных символов, достаточно установить на плату резистор 0 Ом, который будет выступать в качестве связующего звена.

Тестер транзисторов / ESR-метр / генератор

Многофункциональный прибор для проверки транзисторов, диодов, тиристоров…

Подробнее

Дисплей

Дисплей представляет собой четырехзначный семисегментный статический ЖК-дисплей с 40 контактами и расстоянием между рядами 33 мм (см. выше список подходящих альтернатив). ЖК-дисплей установлен на передней панели платы, а компоненты — на задней.

Кварц, который я использовал, представляет собой SMD-кварц с частотой 32,768 кГц (3,2 мм x 1,5 мм) с точностью 20 ppm и емкостью нагрузки 6 пФ.

Для расчета емкости конденсатора я использовал формулу C = 2 (CL — CS ), где CL — емкость нагрузки 6 пФ, а CS — паразитная емкость, которая обычно оценивается как 2,5 пФ на печатной плате. Это дает C = 7 пФ. Я использовал ближайшее доступное значение в 6 пФ.

Микроконтроллер

Это микроконтроллер AVR128DA48 в корпусе TQFP-48, но печатная плата подойдет и с рядом других 48-контактных микроконтроллеров. Подойдет AVR128DB48, так и версии с меньшей памятью этих двух устройств, вплоть до AVR32DA48 и AVR32DB48. Однако вы сэкономите всего несколько центов, выбрав версии с меньшим объемом памяти, поэтому я не вижу в этом смысла.

ATmega4809 и его младшие братья и сестры, вплоть до ATmega809, совместимы по выводам с микросхемами DA и DB в одних и тех же корпусах, и поэтому могут также использоваться на этой плате. Единственное ограничение — контакты, которые я использовал для I2C, PF2 и PF3, поддерживают только ведомый I2C на ATmega4809.

Источник питания

Есть место для 20-миллиметрового держателя, подходящего для батарейки CR2032 или аналогичной ей. Обратите внимание, что у некоторых подобных батареек отрицательная клемма вогнута и не имеет хорошего контакта с контактной площадкой на печатной плате. В этом случае небольшое количество припоя на контакте печатной платы должно обеспечить дополнительную толщину.

В качестве альтернативы, если вы хотите запитать часы от солнечного элемента 3 В, есть отверстия, чтобы вы могли установить суперконденсатор вместо плоского элемента. Я использовал PowerStor 0.47Ф 5В.

На краю платы имеются клеммы для подключения диода Шоттки, последовательно соединенным с солнечным элементом, чтобы предотвратить разряд суперконденсатора, когда нет солнца. Я использовал солнечную батарею 3В 60x48mm от Pimoroni.

I2C интерфейс

На печатной плате также имеется 4-контактный разъем JST PH, обеспечивающий интерфейс I2C, совместимый с системой Adafruit STEMMA или системой Grove. Интерфейс I2C подключен к PF2 (SDA1) и PF3 (SCL1).

Потребляемая мощность

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

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

Внешний кварцевый генератор 32,768 кГц (ABS07-120-32.768KHZ-T) имеет режим пониженного энергопотребления, и его выбор снизил среднее энергопотребление с тактовой частотой 24 МГц с 9,5 мкА до 7,3 мкА.

Типичная емкость батарейки CR2032 составляет 225 мАч, поэтому при потреблении 7,3 мкА ожидаемое время автономной работы часов составляет 225/ 0,0073/24/365 или около 3,5 лет.

С суперконденсатором 0,47Ф вы можете рассчитывать на ток 0,47А в течение 1 секунды. Это дает ожидаемый срок 0,47/7.3×10-6/60/60 или около 18 часов, что подтверждено тестированием. Этого должно быть достаточно, чтобы часы продолжали работать в течение ночи с подходящим солнечным элементом, обеспечивающим питание в дневное время.

Установка времени

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

Компиляция и загрузка программы с помощью Arduino IDE

Скомпилируйте код с помощью Dx Core Spence Konde’s на GitHub. Выберите опцию AVR DA-series (без загрузчика) под заголовком DxCore в меню Плата. Убедитесь, что параметры установлены следующим образом (игнорируйте любые другие параметры):

  • Чип: AVR128DA48
  • Тактовая частота : 24 MHz internal
  • Программатор: jtag2updi (megaTinyCore)

Затем загрузите программу в AVR128DA48 с помощью UPDI программатора. DxCore теперь поддерживает следующие два варианта:

  1. Создайте программатор UPDI из Arduino Uno или другой платы на базе ATmega328P, как описано в разделе «Создание программатора UPDI» (https://github.com/SpenceKonde/AVR-Guidance/blob/master/UPDI/jtag2updi.md) , и установите для параметра Программатор: jtag2updi.
  2. Используйте плату USB для последовательного порта. Подключите TX к контакту UPDI через резистор 4,7 кОм, подключите RX напрямую к контакту UPDI и установите для параметра Программатор: Serial port and 4.7k (pyupdi style)

Скачать файлы проекта (18,5 KiB, скачано: 244)

Блок питания 0…30В/3A

Набор для сборки регулируемого блока питания…

Подробнее

Часы с микроконтроллером STC15W404AS и микросхемой реального времени DS1302

Этот обзор для начинающих радиолюбителей (любителей паять), для тех, кому интересен сам процесс. Деталей минимум. Можете оценить своё умение.


Пробежимся по-быстрому, в каком виде всё пришло.

Стандартный пакет с замком, в нём ещё несколько пакетов.

В комплекте были:
— Фигурновырезанные детали для сборки оргстеклянного корпуса.

Детали покрыты бумагой для защиты от царапин.

— Плата.
Изготовлена на высоком уровне. Все отверстия металлизированы.

— Питающий USB кабель.

— Инструкция. Ксерокопия в плохом качестве.

Если кому нужно, можете глянуть скан.
Индикатор четыре в одном.

— Индикатор был с защитной плёнкой.
Самое важное — это микроконтроллер STC15W404AS и микросхема часов реального времени DS1302.

— Мелочёвка россыпью:
бокс для резервной запитки, пищалка, резисторы, конденсаторы, две кнопки, кварц, разъём питания, четыре винта с гайками, термо- и фоторезистор.

Все детали на плате не только подписаны, но и (условно) нарисованы.

Начал с резисторов и конденсаторов.

Добавил панельки и кварц.

В дело пошли более громоздкие детали.

Впаял бокс под резервное питание. Надо было это сделать чуть раньше. Паять было неудобно.

Вставил микросхемы в панельки.

Впаял терморезистор и фоторезистор.

Протёр плату, проверил пайку, откусил всё сильно выступающее. Откусывать необходимо под самое не хочу. Иначе будут проблемы со сборкой в корпус.

Впаял индикаторы. Как паять, всё обозначено на печатке. Сложно перепутать.

Подключил.
Они работают!

Ошкурил оргстекляшки и собрал всё в корпус.

А вот и размеры 62*35мм.

Размер цифр 10*20мм.
Пора изучать их возможности.

Часы собраны и работают, но им требуется настройка.
Время корректировал по интернету.
Первым делом необходимо произвести сброс всех настроек. Иначе, их не заставить работать адекватно. Без этой операции мои часы не настраивались. То температуру не ту покажут (пару раз было -7˚С), то день недели не настраивается.
Нажимаем одновременно обе кнопки и удерживаем. Через 5 секунд часы покажут 11:59, затем (ещё через 5 секунд) 12:00 и запищат будильником. Теперь можно настраивать.
Настройку можно разделить на две условные группы. Все манипуляции начинаем с режима индикации времени, то есть, когда часы показывают время.
Первая группа настроек:
1. Первые два нажатия на верхнюю кнопку активируют настройку часов. Первое нажатие – настройка часов, второе нажатие — настройка минут. Нижней кнопкой выставляем нужное значение.

Небольшое дополнение. При настройке времени мнимые секунды (мы их не видим) обнуляются каждый раз при введении новых параметров времени.
2. Следующие два нажатия (третье и четвёртое) на верхнюю кнопку активируют настройку будильника. Третье нажатие – настройка часов, четвёртое нажатие — настройка минут. Нижней кнопкой выставляем нужное значение.
3. Следующее нажатие на верхнюю кнопку (пятое) активирует сам будильник. Светящаяся точка в правом нижнем углу говорит от том, что будильник включен (включается/отключается нижней кнопкой).

4. Шестое и седьмое нажатие настраивает почасовой сигнал. Шестое нажатие настраивает время (часы), с которого начинается. Седьмое настраивает время (часы), на котором заканчивается. Нижней кнопкой выставляем нужное значение.
Т.е. Если набито значение 8:20, это значит, что почасовой сигнал будет звучать с 8-00 по 20-00.
5. Восьмое нажатие активирует почасовой сигнал. Светящаяся точка в правом нижнем углу (в настройках) говорит от том, что почасовой сигнал включен (включается/отключается нижней кнопкой).

Вторая группа настроек:
1. Нажимаем на нижнюю кнопку. Часы переходят в режим отображения температуры. Здесь можно откалибровать (скорректировать) температуру по образцовому термометру.

Верхней кнопкой подгоняем под нужное значение.
2. Второе нажатие на нижнюю кнопку переводит в настройку месяца и даты. Верхней кнопкой активируем изменение месяца. Нижней кнопкой выставляем нужное значение.
Следующее нажатие на верхнюю кнопку переводит в настройку даты. Нижней кнопкой выставляем нужное значение.

3. Следующее нажатие на нижнюю кнопку переводит в настройку дня недели.

Немного сложновато. Поэтому, чтобы не проводить подобнее манипуляции каждый раз после отключения света, лучше купить и поставить сразу резервный источник питания (CR1220).
Несколько слов по поводу датчика освещённости. Всего два режима: дневной и ночной.

Контроллер управляет режимом яркости в зависимости от напряжения на 9 ноге. Переключение происходит при напряжении около 4,3V-4,6V с небольшим гистерезисом. При напряжении свыше 4,6В включается экономная подсветка, при снижении за 4,3В включается на всю яркость. Гистерезис необходим, чтобы яркость не переключалась хаотично на границе освещённости при сумеречном освещении. Оно формируется делителем из резистора R1 (10кОм) и фоторезистора R4.
Измерил ток потребления в различных режимах. Думаю, эта информация будет многим интересна.

В обычном режиме потребляет 26-33мА. Зависит от количества задействованных сегментов индикатора (грубо говоря, 2мА на сегмент). В ночном режиме ток потребления падает до 10-11мА.
По поводу режима индикации.
В обычном режиме (заводские установки) часы показывают 45 секунд время, 5 секунд температуру, 5 секунд месяц/число, 5 секунд день недели.
Его можно поменять, соединяя выводы 6 и 7 микроконтроллера с землей (GND).
Если соединить 6 ногу и GND, часы будут показывать 50 секунд время, 5 секунд месяц/число, 5 секунд день недели. Если соединить 7 ногу и GND, часы будут показывать 55 секунд время и 5 секунд температуру. Если подключить обе ноги (и 6 и 7 ногу) к GND, часы будут показывать только время.
На плате всё предусмотрено. Достаточно повесить «соплю» в нужном месте.

Несколько слов по поводу точности хода. Этот экземпляр за неделю убежал на 6 секунд. Думаю, что неплохо (бывает лучше, бывает хуже). Всё зависит от кварца.
Чтобы повысить контрастность цифр и не было видно пустых сегментов, вставил кусок тонированного пластика.

Вот, в общем-то, и всё.
Пора подводить итоги.
Неплохой DIY комплект для проверки своих навыков начинающим радиолюбителям. Более того, это не просто набор для обучения, но и в итоге получились неплохие часы.
Для правильного вывода того, что написал, должно хватить.
Кому что-то неясно, задавайте вопросы. Надеюсь, хоть кому-то помог.
Удачи!

Товар для написания обзора предоставлен магазином. Обзор опубликован в соответствии с п.18 Правил сайта.

I/SN — микросхема, 8-битный микроконтроллер, часы реального времени/Co

Показать подробности