Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Реклама ⓘ

Часы на 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.

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

Схема часов на 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-дисплейSC16021 на базе HD44780Поиск в магазине ОтронВ блокнот
S1-S4 Тактовая кнопкаTC-A1094 Поиск в магазине ОтронВ блокнот
Модуль 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 Поиск в магазине ОтронВ блокнот
Элемент питанияCR20321 3 ВольтПоиск в магазине ОтронВ блокнот
Держатель CR20321 Поиск в магазине ОтронВ блокнот
Джемпер1 Поиск в магазине ОтронВ блокнот
Штыревые контакты10 Поиск в магазине ОтронВ блокнот
Добавить все

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

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

Теги:

Опубликована: 0 0
Я собрал 1 2
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 4.6 Проголосовало: 2 чел.

Комментарии (1) | Я собрал (0) | Подписаться

0
homeland #
Повторил эти часы. С Вашей прошивкой все работает, значит схема собрана правильно и работоспособна. Я совсем запутался с SPI. Пробовал и программный и аппаратный код SPI от ранее Вами описанных часов на PCA2129 (я тоже собрал эти часы и разобрался с кодом правда I2C). Компилятор CodeVisionAVR. Поможете разобраться?
Отредактирован 11.11.2019 16:40
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Программатор Pickit3
Программатор Pickit3
FM-модуль RDA5807M Discovery V8
вверх