Что есть реальное время? Если не вдаваться в философию, то это формат времени, понятный человеку: секунды, минуты, часы, дни и т.д.
Электронные устройства и компутеры работают с частотами в мегагерцы и гигагерцы, да и считают в байтах, что плохо соотносится с человеческим восприятием времени.
Французы во времена революции пытались привести время к формату десятков да сотен, но такой формат не прижился...
Часы реального времени (real time clock) предназначены для именно хранения и отсчета времени в "человеческом" формате.
Основные функции часов реального времени
- Отсчет времени в реальных единицах: секундах, минутах и часах и ведение календаря, опять же в реальных единицах: днях, месяцах и годах. Некоторые модели также помнят про день недели, переход с летнего времени на зимнее и високосность года
- Хранение даты и времени в отсутствие питания. Чтобы не вводить каждый раз при включении компьютера текущее время, данные о времени обновляются и сохраняются самим RTC.
- Формирование прерываний. Благодаря прерываниям можно автоматически включать компьютер (что просто удобно) или выводить микроконтроллер из спящего режима, когда нужно, например, выполнить измерение или т.п. (что экономит энергию).
- Освобождение вычислительных ресурсов системы. В обычной системе процессор почти всегда занят вычислениями, и "увлекшись", может пропустить несколько тактов и не записать их в переменную, в которой хранится время. Если такое произойдет несколько раз, часы будут отставать :) Компьютеру, а уж тем более МК, гораздо проще "спросить" время у RTC.
Строение часов реального времени
К RTC подключается кварцевый резонатор (обычно с частотой 32768 Гц), с помощью которого генерируется тактовый сигнал. Используется чаще всего генератор Пирса (про него и собратьев у меня тоже есть статья). Частота сигнала делится счетчиками-делителями до 1 Гц, чтобы можно было отсчитывать секунды.
Полученный секундный сигнал считает счетчик (простите за тавтологию). Дата и время сохраняются в энергонезависимой памяти (NVRAM).
Для того, чтобы часы продолжали тикать и при отключении питания, нужен резервный источник - батарейка или аккумулятор, чаще всего литиевый типоразмера CR2032. Хотя в более старинных устройствах можно встретить и NiCd аккумуляторы, а в современных - суперконденсаторы :)
Так как часы могут работать как от основного питания, так и от батарейки, в них присутствует схема управления питанием. Зачастую часы могут еще и подзаряжать свой резервный источник питания.
Интерфейсы взаимодействия с часами тоже могут быть самые разные: параллельный, I2C, SPI, 1-Wire...
Точность часов измеряется в ppm (Parts Per Million, количество миллионных частей). В каталогах можно встретить часы как с точностью ±100 ppm (что эквивалентно "уходу" на 8,6 секунд в день), так и с точностью ±5 ppm (0,432 сек/день). Понятное дело, что точные часы дороже :)
Самые точные часы - атомные: они ошибутся на секунду через... сто лет работы. Но зато кушают побольше и стоят подороже. Если интересно, можете почитать статью про них у меня на канале.
Варианты исполнения
Варианты исполнения у часов реального времени весьма разнообразны, бывают отдельные чипы, вроде DS1302 или DS1307, к которым требуется обвес из внешнего кварца и внешнего же аккумулятора.
Бывают варианты со встроенным резонатором:
- DS3232 (с температурно-компенсированным кварцевым резонатором (TCXO))
- DS3231M, DS3232M (с микроэлектромеханическим (MEMS) резонатором)
Точность работы встроенных резонаторов (особенно MEMS) очень сильно зависит от температуры кристалла, поэтому в данных чипах "спрятан" еще и термометр, который корректирует работу генератора.
Бывают и часы со встроенным аккумулятором, хотя таких уже мало, дорого стоят:
Современные МК (например, STM32) и процессоры зачастую имеют встроенные часы реального времени. Но для них все равно требуются внешний источник питания и кварц.
Как-то раз встретила такую интересную конструкцию: литиевая батарея + кварц в одном корпусе:
Теорию немного пробежали, а практика - в следующий раз. В будущей статье рассмотрю программирование Arduino и МК AVR для работы с некоторыми популярными у любителей RTC :)