Часы реального времени

 

Часы реального времени RTC (Real Time Clock) являются разновидностью таймера/счетчика. Задачей RTC в схеме микроконтроллера обычно считается формирование интервалов времени равных или кратных одной секунде.

8-разрядный таймер/счетчик 2 (Timer/Counter 2) микроконтроллера АТтеда163 может работать от генератора тактовых импульсов процессорного ядра CK. Вместе с тем, программно его можно подключить и к отдельному тактовому генератору. Для этого к определенным выводам микроконтроллера (TOSC1 и TOSC2) подключается кристалл резонатора. Генератор оптимизирован на частоту кристалла 32768 Гц. При использовании делителя частоты с коэффициентом деления 215 = 32768 такой генератор позволяет сформировать секундные интервалы времени. 8-битный таймер/счетчик 2, снабженный 7- битным предделителем, и реализует в схеме микроконтроллера режим часов реального времени.

При внешнем тактировании таймер/счетчик работает в асинхронном режиме, независимо от тактовых импульсов СК.

Таймер/счетчик 2 снабжен выходом сравнения. В процессе работы содержимое регистра сравнения сравнивается с содержимым счетчика. В момент равенства устанавливается флаг запроса на прерывание OCF2 и модифицируется состояние выхода OC2 (рис. 12.4). Возможна его работа также и в режиме широтно-импульсной модуляции.

Запрос на прерывание TOV2 вырабатывается при переполнении таймера/счетчика 2.

 

 
 

 


Рис. 12.4. Таймер/счетчик 2 В работе таймера/счетчика 2 задействованы следующие регистры:

0 регистр управления TCCR2 (Timer/Counter Control Register 2);

0 регистр флагов прерывания TIFR (Timer/Counter Interrupt Flags Register);

0 регистр маски прерывания TIMSK (Timer/Counter Interrupt Mask Register),

0 регистр состояния микроконтроллера SREG (Status Register).

0 регистр счетчика TCNT2 (Timer/Counter 2)

0 регистр выхода сравнения OCR2 (Timer/Counter2 Output Compare Register)

0 асинхронный регистр состояния ASSR (Asynchronous Status Register)

 
 

 


Рис. 12.6. Регистры таймера/счетчика 2

 

В регистре маски прерываний TIMSK (Timer/Counter Interrupt Mask Register) хранятся биты разрешения прерываний:

0 бит 7 - OCIE2 (Timer/Counter2 Output Compare Match Interrupt Enable) - бит разрешения прерывания выхода сравнения.

0 бит 6 - TOIE2 (Timer/Counter2 Overflow Interrupt Enable) - бит разрешения прерывания при переполнении таймера/счетчика 2.

В регистре флагов прерываний TIFR (Timer/Counter Interrupt Flags Register) хранятся флаги запросов на прерывания:

0 бит 7 - OCF2 (Output Compare Flag 2) - флаг прерывания выхода сравнения.

0 бит 6 - TOV2 (Timer/Counter2 Overflow Flag) - флаг прерывания по переполнению таймера/счетчика 2.

8-битный регистр переменной TCNT2 (Timer/Counter 2) содержит данные счетчика, доступен для чтения и записи. Если данные записаны в регистр и выбран источник тактового сигнала, то счет продолжается с записанного значения.

Работу счетчика в асинхронном режиме обеспечивает асинхронный регистр состояния ASSR (Asynchronous Status Register).

0 Бит 3 - AS2 (Asynchronous Timer/Counter 2) - асинхронный режим таймера/счетчика 2. Когда бит AS2 сброшен таймер/счетчик тактируется внутренним генератором СК. Когда бит AS2 установлен, таймер/счетчик 2 тактируется с контакта TOSC1.

0 Бит 2 - TCN2UB (Timer/Counter 2 Update Busy) - бит модификации таймера/счетчика 2. Когда таймер/счетчик 2 работает асинхронно и регистр TCNT2 записывается, этот бит устанавливается. Когда регистр TCNT2 модифицируется из регистра временного хранения, этот бит аппаратно сбрасывается. Логический 0 в этом бите указывает, что регистр TCNT2 можно модифицировать.

0 Бит 1 - OCR2UB (Output Compare Register 2 Update Busy) - бит модернизации регистра выхода сравнения. Когда таймер/счетчик 2 работает асинхронно и регистр OCR2 записывается, этот бит устанавливается. Когда регистр OCR2 модифицируется из регистра временного хранения, бит очищается. Логический 0 в этом бите указывает, что регистр OCR2 готов к модификации.

0 Бит 0 - TCR2UB (Timer/Counter Control Register2 Update Busy) - бит модернизации регистра контроля таймера/счетчика. Когда таймер/счетчик 2 работает асинхронно и регистр TCCR2 записывается, этот бит устанавливается. Когда регистр TCCR2 модифицируется из регистра временного хранения, бит очищается. Логический 0 в этом бите указывает, что регистр TCCR2 готов к модификации.

Если запись выполняется в любой из трех регистров таймера/счетчика 2, в то время как его бит модификации установлен, модифицированное значение может быть разрушено.

Механизмы для чтения регистров TCNT2 и OCR2. При чтении TCNT2 читается фактическое значение таймера. При чтении OCR2 - читается значение во временном регистре хранения.

При переключении между асинхронным и синхронным режимами работы таймера/счетчика 2 содержимое регистров TCNT2, OCR2 и TCCR2 может быть разрушено. Безопасная процедура для переключения генератора тактовых импульсов заключается в следующем:

0 Отключить прерывания таймера/счетчика 2, очищая биты OCIE2 и TOIE2.

0 Выбрать генератор тактовых импульсов, воздействуя на бит AS2.

0 Записать новые значения в регистры TCNT2, OCR2, и TCCR2.

0 При переключении к асинхронной операции необходимо дождаться сброса TCN2UB, OCR2UB или TCR2UB.

0 Разрешить прерывания, если это необходимо.

 

Внешний генератор оптимизирован для использования с резонатором на частоту 32.768 кГц. Подключение резонатора к внешнему контакту TOSC1 также может привести к неправильной работе таймера/счетчика 2. Частота синхронизации процессорного ядра должна быть больше частоты внешнего генератора не менее, чем в 4 раза.

При записи в любой из регистров TCNT2, OCR2, или TCCR2 данные передаются в регистры временного хранения. Каждый из трех упомянутых регистров имеет индивидуальный регистр временного хранения.

Регистр выхода сравнения OCR2 (Timer/Counter 2 Output Compare Register) доступен для чтения и записи, хранит константу для сравнения в счетчике. Регистр TCCR2 (Timer/Counter2 Control Register) содержит отдельные биты для управления выходом сравнения:

0 Бит 7 - FOC2 (Force Output Compare) - воздействие на выход 2. Запись 1 в этот бит приводит к изменению состояния выхода сравнения OC2 относительно значения, заданного битами СОМ21 и COM20. Если биты СОМ21 и COM20 записываются в одном цикле с битом FOC2, то новые установки не будут вступать в силу до следующего сравнения. Бит может использоваться, чтобы изменить состояние выхода OC2. При этом никакое прерывание не генерируется и таймер не очищается. FOC2 бит всегда читается как нуль.

0 Бит 6 - PWM2 (Pulse Width Modulator Enable) - включение широтно- импульсного модулятора. Когда этот бит установлен включается режим PWM.

0 Бит 5, 4 - СОМ21, COM20 (Compare Output Mode, bits 1 and 0) - биты режима выхода сравнения. Биты задают режим выхода сравнения в соответствии с таблицей 12.7.

 

Таблица 12.7. Режимы выхода сравнения ОС2

 

СОМ21 COM20 Описание
Таймер/счетчик1 отключен от вывода OC2
Переключение выходной линии OC2
Очистка выходной линии OC2 (на линии низкий уровень)
Установка выходной линии ОС1Х (на линии высокий уровень)

0 Бит 3 - CTC2 (Clear Timer/Counter 2 on Compare Match) - очистка таймера/счетчика 2 по совпадению. При установленном в состояние 1 бите CTC2 таймер/счетчик 2 при совпадении сбрасывается в состояние $0. Если бит СТС1 очищен, таймер/счетчик1 продолжает отсчет и не реагирует на совпадение при сравнении. Поскольку совпадение при сравнении детектируется в течение тактового цикла процессорного ядра следующего за совпадением, то поведение функции будет различно при различных коэффициентах предделителя. При коэффициенте предварительного деления 1 и установленном в регистре сравнения A состоянии C таймер будет считать в соответствии с установкой бита CTC2: . | С-1 | C | 0 | 1 | ... При установленном коэффициенте предварительного деления 8 таймер будет считать следующим образом: .. | С-1, С-1, С-1, С-1, С-1, С-1, С-1, С-1 | C, C, C, C, C, C, C, C | 0, 0, 0, 0, 0, 0, 0, 0 | 1, 1, 1, ...

0 Биты 2,1,0 - CS22, CS21, CS20 (Clock Select Bits 2,1, and 0) - биты выбора тактового сигнала. Тактовый сигнал таймера/счетчика выбирается по таблице 5.19.

 

Таблица 12.8. Выбор тактового сигнала таймера/счетчика 2

 

CS22 CS21 CS20 Описание
Timer/Counter2 остановлен
РСК2
PCK2/8
PCK2 / 32
PCK2 / 64
РСК2/128
PCK2/256
РСК2/1024

 

 

В режиме PWM таймер/счетчик 2 может работать до переполнения при значении $FF или в реверсивном режиме (up/down).

Два режима PWM выбираются с помощью бита CTC2 в регистре TCCR2.Eoin режим PWM установлен, а бит CTC2 очищен, то таймер/счетчик 2 работает в реверсивном режиме, считая от $0 до $FF и обратно. Если бит CTC2 установлен, то таймер счетчик считает с $0 до $FF, а затем сбрасывается.

Состояние выхода определяется битами СОМ21/СОМ20. В соответствии с таблицей 12.9.

 

Таблица 12.9. Режимы PWM таймера/счетчика 2

 

СТС2 С0М21 COM20 Эффект при сравнении Частота
Нет соединения  
Нет соединения  
Установка 0 при сравнении в режиме сложения; установка 1 при сравнении в режиме вычитания fтск/510
Установка 1 при сравнении в режиме сложения; установка 0 при сравнении в режиме вычитания (инверсная PWM) fтск/510
Нет соединения  
Нет соединения  
Установка 0 при сравнении, установка 1 при переполнении fTCK /256
Установка 1 при сравнении, установка 0 при переполнении fTCK /256

 

Когда регистр OCR1 содержит $0 или TOP, вывод ОС1А/ОС1В остается на низком уровне, соответственно установкам СОМ21/СОМ20. Это отображено в таблице 12.10.

 

Таблица 12.10. Состояния выходов в режиме PWM при OCR2 = $00 или $FF

 

СОМ21 COM20 OCR2 Состояние выводов OC2
$00 L
$FF Н
$00 Н
$FF L

 

В реверсивном режиме PWM флаг переполнения TOV2 устанавливается, когда таймер/счетчик переходит в режим вычитания. В режиме работы с переполнением, он устанавливается при переполнении, как обычный таймер/счетчик. Прерывание TOV2 работает, если установлен бит I глобального разрешения прерывания в регистре статуса SREG.