Часы реального времени 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.