Рассмотрим часы реального времени (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 строки символов по шестнадцать штук в каждой из них. ЖК дисплей подключается к микроконтроллеру по четырех битной системе. Переменный резистор 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-бит | ATmega8 | 1 | Поиск в магазине Отрон | |||
VR1 | Линейный регулятор | L7805AB | 1 | Поиск в магазине Отрон | |||
C1, C4 | Электролитический конденсатор | 220 мкФ | 2 | Поиск в магазине Отрон | |||
C2, C3 | Конденсатор | 100 нФ | 2 | Поиск в магазине Отрон | |||
R1 | Резистор | 22 Ом | 1 | Поиск в магазине Отрон | |||
R2 | Подстроечный резистор | 10 кОм | 1 | 3296W-1-103LF | Поиск в магазине Отрон | ||
R3 | Резистор | 10 кОм | 1 | Поиск в магазине Отрон | |||
R4 | Резистор | 390 Ом | 1 | Поиск в магазине Отрон | |||
LED1 | Светодиод | 1 | Поиск в магазине Отрон | ||||
HG1 | LCD-дисплей | SC1602 | 1 | на базе HD44780 | Поиск в магазине Отрон | ||
S1-S4 | Тактовая кнопка | TC-A109 | 4 | Поиск в магазине Отрон | |||
Модуль RTC | |||||||
IC2 | Часы реального времени (RTC) | PCA21125T | 1 | Поиск в магазине Отрон | |||
VD1, VD2 | Выпрямительный диод | 1N4148 | 2 | Поиск в магазине Отрон | |||
R5 | Резистор | 10 кОм | 1 | Поиск в магазине Отрон | |||
R6 | Резистор | 220 Ом | 1 | Поиск в магазине Отрон | |||
C5 | Подстроечный конденсатор | 5 пФ - 30 пФ | 1 | Поиск в магазине Отрон | |||
C6 | Конденсатор | 100 нФ | 1 | Поиск в магазине Отрон | |||
C7 | Электролитический конденсатор | 10 мкФ | 1 | Поиск в магазине Отрон | |||
Z1 | Кварц | 32768 Гц | 1 | Поиск в магазине Отрон | |||
Элемент питания | CR2032 | 1 | 3 Вольт | Поиск в магазине Отрон | |||
Держатель CR2032 | 1 | Поиск в магазине Отрон | |||||
Джемпер | 1 | Поиск в магазине Отрон | |||||
Штыревые контакты | 10 | Поиск в магазине Отрон | |||||
Скачать список элементов (PDF)
Прикрепленные файлы:
- 34.hex (8 Кб)
- RTC PCA21125.lay6 (54 Кб)
- proteys PCF2123.rar (43 Кб)
Комментарии (1) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация