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

Рассмотрим часы реального времени (RTC — Real-Time Clock) на микросхеме PCA21125. Разберем работу с микросхемой и создадим схему простых часов с применением LCD дисплея на базе микроконтроллера HD44780 в качестве индикатора данных. Цель данной статьи получить знания и умения по работе с PCA21125, поэтому индикатор используется более удобный (SC1602), нежели практичный как большие семисегментные индикаторы.

Что же собой представляет микросхема часов PCA21125? Итак, это часы реального времени, изготовленные по КМОП технологии, оптимизированы для очень малого потребления и работе до температур в 125 градусов по Цельсию. Данные передаются по интерфейсу SPI с максимальной скоростью 6  Mbit/s. Функционально имеют следующие возможности: само собой это хронометраж времени, а также даты (календарь), плюс функции будильника и таймера с возможностью генерирования сигнала на выводе interrupt. Функционал особо не богат по меркам микросхем NXP, зато, как обещает производитель, качество очень и очень хорошее. Во-первых потребление тока микросхемы часов 0,55 мкА при напряжении 3 вольта и температуре 25 градусов, батарейки (cr2032) хватит лет на 10, а то и больше. Диапазон напряжения питания составляет от 1,3 вольта до 5,5 вольт. А вообще в даташите приводится схема с резервным питанием от ионистора, при этом ориентировочное время автономной работы примерно несколько недель при емкости ионистора 1 фарад. Тоже не плохо, можно вообще конденсатор обычный попробовать — несколько дней спокойно должно вытягивать при хорошем качестве конденсатора (соответственно емкость желательно больше). Но, использование батарейки подешевле будет по сравнению с ионисторами. Также производитель обещает высокую точность хода часов, но это все, конечно, по большей степени будет зависеть от кварца. Почти все рекомендуют использовать часовые кварцы на 32,768 кГц от материнских плат — говорят от туда можно взять наиболее точные кварцы. Также часы смогут работать в жестких тепловых условиях, что весьма не плохо, но скорее всего подобная характеристика может не пригодиться вовсе при обычном использовании, не в печке же замерять время. Не маловажной характеристикой данных часов является малый размер микросхемы в корпусе TSSOP14. Все больше и больше мы стремимся к миниатюризации.

С основными характеристиками разобрались, заглянем поглубже. PCA21125 содержит 16 8-битных регистра, генератор на 32,768 кГц с внешним кварцем и интегрированным конденсатором, выход генератора, который можно запрограммировать на несколько частот и SPI интерфейс.

Регистры:

  • первые два регистра по адресам 00h и 01h (Control_1 and Control_2) используются для контроля и определения статуса
  • регистры по адресам с 02h по 08h (Seconds, Minutes, Hours, Days, Weekdays, Months, Years) используются для записи и считывания параметров времени и даты
  • регистры по адресам с 09h по 0Сh (Minute_alarm, Hour_alarm, Day_alarm, Weekday_alarm) определяют функции будильника
  • регистр по адресу 0Dh (CLKOUT_control) определяет режим работы выхода генератора
  • регистры по адресам с 0Eh по 0Fh (Timer_control and Countdown_timer) используются для функций таймера

Даже этот функционал часто не понадобится. Все, что нам нужно, это считывать время, ну и инициализировать работу и режим через регистры контроля. Функции будильника иногда выгоднее использовать именно через сам микроконтроллер, потому что слежение за статусом и состоянием регистров будильника часов PCA21125 может отнимать больше процессорного времени, а также памяти flash для реализаций функций записи, чтения регистров, а также чтения статусов и их сброса. Потому для себя я решил использовать микроконтроллер для будильника по функциям сравнения текущего времени и времени будильника. Ну а таймер так и не придумал как использовать, конечно же в PCA21125 он порядком точнее, чем на микроконтроллере.

Как было упомянуто, PCA21125 использует SPI интерфейс для связи с микроконтроллером, для этого используются следующие выводы:

  • CE (chip enable input) — когда находится в высоком уровне, информация может передаваться, на этом выводе используется pull-down резистор
  • SCL (serial clock input) — передает тактовые импульсы для определения и подсчета битов информации
  • SDI (serial data input) — вход линии передачи данных
  • SDO (serial data output) — выход линии передачи данных

Линии данных можно подключать двумя вариантами — по одному проводу и по двум проводам:

Выше на рисунке было показано, что при активации передачи данных, необходимо передать команду, а после нее какую либо информацию. Байт данных под названием COMMAND содержит в себе три составляющих — режим записи или чтения (b1, 1 — чтение, 0 — запись), адрес микросхемы (b6 — b4, он всегда остается неизменным и представляет собой 001, нужен для того чтобы в определенное время данные передавались или принимались лишь этой микросхемой при условии обращения к ней в случае подключения нескольких устройств к микроконтроллеру по SPI), адрес регистра, к которому будем обращаться (b3 — b0, один из 16 регистров микросхемы в двоичном виде). 

Пример чтения данных (из даташита):

 

Пример записи данных (из даташита):

Примеры чтения и записи наглядно демонстрируют сигналы на всех линиях при приеме и передачи информации по интерфейсу SPI микросхемы PCA21125.

Перейдем к схеме часов:

Микроконтроллер был выбран Atmega8 за свою широкую распространенность и небольшую цену. Данный микроконтроллер можно использовать как в корпусе DIP-28, так и в SMD исполнении в корпусе TQFP-32. Резистор R3 необходим для предотвращения самопроизвольного перезапускания микроконтроллера в случае появления случайных помех на выводе PC6. Резистор R3 подтягивает плюс питания к этому выводу, надежно создавая потенциал на нем. Для индикации используется жидко кристаллический (ЖК или LCD) дисплей SC1602. Он имеет 2 строки символов по шестнадцать штук в каждой из них. ЖК дисплей подключается к микроконтроллеру по 4-х битной системе. Переменный резистор R2 необходим для регулировки контраста символов на дисплее. Вращением движка этого резистора добиваемся наиболее четких для нас показаний на экране. Подсветка ЖК дисплея организована через вывод «А» и «К» на плате дисплея. Подсветка включается через резистор, ограничивающий ток — R1. Чем больше номинал, тем более тускло будет подсвечиваться дисплей. Но пренебрегать этим резистором не стоит во избежание порчи подсветки. Питается вся схема от линейного стабилизатора L7805 (выходное стабилизированное напряжение 5 вольт). Данный стабилизатор можно заменить на отечественный аналог КР142ЕН5А либо на импульсный стабилизатор типа LM2576, LM2596, MC34063 или другой, соответственно заменить в соответствии с подключением выбранной микросхемы стабилизатора напряжения в схему устройства. Светодиод LED1 используется в качестве индикации сработки будильника (горит при сработке). К микроконтроллеру он подключен через резистор, ограничивающий ток — R4. Его номинал подобран таким образом, чтобы ток через светодиод не превышал допустимый во избежания порчи. Светодиод можно заменить на какую-либо звуковую схему, срабатывающую по сигналу от микроконтроллера. Управление настройками часов осуществляется по средствам кнопок S1 — S4.

Схема часов на PCA21125 собрана на отдельно модуле (печатная плата прилагается ниже):

Модуль RTC PCA21125 содержит непосредственно саму микросхему часов, кварц на 32.768 кГц и возможность подключения постоянного либо переменного конденсатора для коррекции хода времени. Конденсатор постоянной емкости можно использовать SMD типоразмера 1206 либо 0805 (контакты под кварцем для SMD элемента), или же использовать выводные конденсаторы постоянной или переменной емкости (цанговые контакты для подсоединения рядом с отсеком батарейки). Также на модуле предусмотрены фильтрующие конденсаторы по питанию. Плюс питания подключается к микросхеме через резистор и диод для ограничения тока и защиты микросхемы, резервное питание подключается также через свой диод для развязки батареечного элемента питания от основного, также подключение батарейки к микросхеме идет через джемпер, для отключения резервного питания достаточно снять джемпер со штырьков. Вывод CLKOUT подключается через pull-up резистор для формирования сигналов. Ну и ряд штыревых контактов служит для подключения к микроконтроллеру (контакты питания, интерфейса SPI и выходы INT и CLKOUT).

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

Используя интерфейс SPI получаем следующий программный код для работы с часами PCA21125:

// инициализация начальных установок
void RTC_init(void){

spi_write(0b00010000, 0b00001000); // режим записи, указатель на адрес 00h, Control_1
spi_write(0b00010001, 0b00000000); // режим записи, указатель на адрес 01h, Control_2
spi_write(0b00011101, 0b00000110); // режим записи, указатель на адрес 0Dh, CLKOUT_control, выход 1 Гц

}

// запись времени
void RTC_write_time(char sec1, char min1, char hour1){

spi_write(0b00010010, bin(sec1)); // режим записи, указатель на адрес 02h
spi_write(0b00010011, bin(min1)); // режим записи, указатель на адрес 03h
spi_write(0b00010100, bin(hour1)); // режим записи, указатель на адрес 04h

}

// запись даты
void RTC_write_date(char day1, char wday1, char month1, char year1){

spi_write(0b00010101, bin(day1)); // режим записи, указатель на адрес 05h
spi_write(0b00010110, bin(wday1)); // режим записи, указатель на адрес 06h
spi_write(0b00010111, bin(month1)); // режим записи, указатель на адрес 07h
spi_write(0b00011000, bin(year1)); // режим записи, указатель на адрес 08h

}

// чтение времени и даты
void RTC_read_time(void){

sec = bcd(spi_read(0b10010010)); // режим чтения, указатель на адрес 02h
min = bcd(spi_read(0b10010011)); // режим чтения, указатель на адрес 03h
hour = bcd(spi_read(0b10010100)); // режим чтения, указатель на адрес 04h
day = bcd(spi_read(0b10010101)); // режим чтения, указатель на адрес 05h
wday = bcd(spi_read(0b10010110)); // режим чтения, указатель на адрес 06h
month = bcd(spi_read(0b10010111)); // режим чтения, указатель на адрес 07h
year = bcd(spi_read(0b10011000)); // режим чтения, указатель на адрес 08h

}

bcd — перевод из двоично десятичного кода
bin — перевод в двоичный код из десятичного

Теперь все что нам нужно это вызывать функцию чтения в цикле и выводить время и дату на экран, а для настроек просто изменять значения переменных кнопками и вызовом функций записи времени и даты сохранять значения. Функция инициализации вызывается лишь один раз при запуске программы и задает все необходимые настройки (фактически ничего не затрагивается кроме того, что выход CLKOUT программируется на выход в 1 Гц). Думаю, теперь Вам не составит труда собрать свои собственные часы на PCA21125.

В итоге получаем такое устройство:

  • индикация времени
  • индикация даты
  • индикация дня недели
  • будильник по заданному времени
  • настройки времени
  • настройки даты
  • настройки будильника

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

К статье прилагается прошивка для микроконтроллера Atmega8, печатная плата модуля часов на PCA21125, а также видео, демонстрирующее работоспособность схемы часов. Также выкладываю проект протеус для устройства, единственное отличие — использовалась модель часов реального времени PCF2123 вместо PCA21125, однако не смотря на разные маркировки, работа с обоими микросхемами одинаковая (а в протеусе нет модели для PCA21125), все затрагиваемые регистры имеют те же адреса (исключение вывод CLKOUT, который в микросхемах выполняет разные функции, но мы его в схеме и не использовали) и даже адреса самих микросхем одинаковые (001), не знаю зачем инженеры NXP это допустили, а в общем то и нет никакой разницы — зачем использовать сразу две микросхемы часов. Потому прошивка для PCA21125 будет работать с микросхемой PCF2123 и наоборот.


Список радиоэлементовОбозначение
Тип
Номинал
Количество
ПримечаниеМагазинМой блокнот

Схема управления и индикацииIC1
МК AVR 8-битATmega81
VR1
Линейный регуляторL7805AB1
C1, C4
Электролитический конденсатор220 мкФ2
C2, C3
Конденсатор100 нФ2
R1
Резистор22 Ом1
R2
Подстроечный резистор10 кОм1
3296W-1-103LFR3
Резистор10 кОм1
R4
Резистор390 Ом1
LED1
Светодиод1
HG1
LCD-дисплейSC16021
на базе HD44780S1-S4
Тактовая кнопкаTC-A1094
Модуль RTCIC2
Часы реального времени (RTC)PCA21125T1
VD1, VD2
Выпрямительный диод1N41482
R5
Резистор10 кОм1
R6
Резистор220 Ом1
C5
Подстроечный конденсатор5 пФ — 30 пФ1
C6
Конденсатор100 нФ1
C7
Электролитический конденсатор10 мкФ1
Z1
Кварц32768 Гц1

Элемент питанияCR20321
3 Вольт
Держатель CR20321

Джемпер1

Штыревые контакты10
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

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

Ваш адрес email не будет опубликован.