Главная » Микроконтроллеры
Призовой фонд
на май 2017 г.
1. Тестер компонентов MG328
Паяльник
2. Осциллограф DSO138
Паяльник
3. Регулируемый паяльник 60 Вт
Паяльник
4. 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 Поиск в FivelВ блокнот
VR1 Линейный регулятор
L7805AB
1 Поиск в FivelВ блокнот
C1, C4 Электролитический конденсатор220 мкФ2 Поиск в FivelВ блокнот
C2, C3 Конденсатор100 нФ2 Поиск в FivelВ блокнот
R1 Резистор
22 Ом
1 Поиск в FivelВ блокнот
R2 Подстроечный резистор10 кОм1 3296W-1-103LFПоиск в FivelВ блокнот
R3 Резистор
10 кОм
1 Поиск в FivelВ блокнот
R4 Резистор
390 Ом
1 Поиск в FivelВ блокнот
LED1 Светодиод1 Поиск в FivelВ блокнот
HG1 LCD-дисплейSC16021 на базе HD44780Поиск в FivelВ блокнот
S1-S4 Тактовая кнопкаTC-A1094 Поиск в FivelВ блокнот
Модуль RTC
IC2 Часы реального времени (RTC)
PCA21125T
1 Поиск в FivelВ блокнот
VD1, VD2 Выпрямительный диод
1N4148
2 Поиск в FivelВ блокнот
R5 Резистор
10 кОм
1 Поиск в FivelВ блокнот
R6 Резистор
220 Ом
1 Поиск в FivelВ блокнот
C5 Подстроечный конденсатор5 пФ - 30 пФ1 Поиск в FivelВ блокнот
C6 Конденсатор100 нФ1 Поиск в FivelВ блокнот
C7 Электролитический конденсатор10 мкФ1 Поиск в FivelВ блокнот
Z1 Кварц32768 Гц1 Поиск в FivelВ блокнот
Элемент питанияCR20321 3 ВольтПоиск в FivelВ блокнот
Держатель CR20321 Поиск в FivelВ блокнот
Джемпер1 Поиск в FivelВ блокнот
Штыревые контакты10 Поиск в FivelВ блокнот
Добавить все

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

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

Теги:

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

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

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

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

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

Статью еще никто не комментировал. Вы можете стать первым.
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

AVR-программатор USB ASP
AVR-программатор USB ASP
Мультиметр Mastech MS8268 ELM327 OBD II — адаптер с поддержкой CAN
вверх