Функционирование таймеров Т0 и Т2
В состав каждого из идентичных таймеров Т0 и Т2 входят по три регистра из пространства ввода-вывода: счетный регистр TCNT0 (TCNT2), регистр управления TCCR0 (TCCR2) и регистр сравнения OCR0 (OCR2). Кроме того, таймер Т2 содержит регистр ASSR для управления его модулем (коэффициентом счета) в асинхронном режиме.
Таймер Т0 может работать в режимах 8-разрядного счетчика, счетчика внешних событий, ШИМ и формирователя сигналов. Таймер Т2 поддерживает режимы 8-разрядного счетчика, ШИМ, формирователя сигналов и часов реального времени.
Основное средство управления таймерами Т0 и Т2 – регистры TCCR0 и TCCR2. Назначение его разрядов и принципы управления представлены в табл.27.3
Таблица 27.3
Принципы управления таймерами Т0 и Т2 через регистры TCCR0(2)
Бит
|
Название
|
Описание назначения
|
7
|
FOCх
|
Принудительное изменение состояния вывода OCх в режимах Normal и CTC (зависит от битов COMх0 и COMх1)
|
6,3
|
CTCх, PWMх
|
Выбор режима работы таймера-счетчика
Режим
|
CTCх
|
PWMх
|
Описание режима работы
|
0
|
0
|
0
|
Normal (суммирующий счетчик)
|
1
|
0
|
1
|
Phase correct PWM
|
2
|
1
|
0
|
CTC (сброс при совпадении)
|
3
|
1
|
1
|
Fast PWM
|
|
5,4
|
COMх1, COMх0
|
Режим работы блока сравнения. Определяет состояние вывода OC0 (ОС2) при наступлении события «Совпадение». Для режимов Normal и CTC доступны такие состояния
COMх1
|
COMх0
|
Описание состояния вывода OCх
|
0
|
0
|
Таймер отключен от вывода OСх
|
0
|
1
|
Изменение на противоположное
|
1
|
0
|
Вывод сбрасывается в «0»
|
1
|
1
|
Вывод устанавливается в «1»
|
|
2-0
|
CSх2… CSх0
|
Управление тактовым сигналом. Эти биты выбирают один из выходов предделителя для получения счетных импульсов, а также определяют старт и останов таймеров. Принципы управления показаны в табл.27.4.
|
Примечание: «х» – номер таймера: 0 или 2
Работа таймеров Т0 (Т2) в режиме Normal
В этом режиме таймер T0 (T2) функционирует как суммирующий счетчик импульсов с частотой, определяемой по табл.27.4. При переходе регистра TCNT0 (TCNT2) через значение $FF счет продолжается с состояния $00, и возникает прерывание, которое фиксируется во флаге TOV0 (TOV2). Кроме того, при равенстве счетного регистра TCNT0 (TCNT2) и регистра сравнения OCR0 (OCR2) устанавливается флаг прерывания OCF0 (OCF2), а также будет изменяться состояние вывода OC0 (OC2) в соответствии с настройками согласно табл. 27.3. Все указанные прерывания будут обрабатываться, если они разрешены через биты регистра TIMSK (табл.27.1).
Таблица 27.4
Выбор источника тактового сигнала для таймеров Т0 и Т2
CSх2
|
CSх1
|
CSх0
|
Источник тактового сигнала
|
Для таймера Т0
|
0
|
0
|
0
|
Таймер-счетчик Т0 остановлен
|
0
|
0
|
1
|
Системный тактовый сигнал CLKsys
|
0
|
1
|
0
|
CLKsys / 8
|
0
|
1
|
1
|
CLKsys / 64
|
1
|
0
|
0
|
CLKsys / 256
|
1
|
0
|
1
|
CLKsys / 1024
|
1
|
1
|
0
|
Внешний вывод Т0, счет по спаду импульса (1→0)
|
1
|
1
|
1
|
Внешний вывод Т0, счет по фронту импульса (0→1)
|
Для таймера Т2
|
0
|
0
|
0
|
Таймер-счетчик Т2 остановлен
|
0
|
0
|
1
|
Системный тактовый сигнал CLKsys (при AS2=0) или
Дополнительный кварцевый резонатор (при AS2=1)
|
0
|
1
|
0
|
CLKsys / 8 (при AS2=0) или CLKosc / 8 (при AS2=1)
|
0
|
1
|
1
|
CLKsys / 32 (при AS2=0) или CLKosc / 32 (при AS2=1)
|
1
|
0
|
0
|
CLKsys / 64 (при AS2=0) или CLKosc / 64 (при AS2=1)
|
1
|
0
|
1
|
CLKsys / 128 (при AS2=0) или CLKosc / 128 (при AS2=1)
|
1
|
1
|
0
|
CLKsys / 256 (при AS2=0) или CLKosc / 256 (при AS2=1)
|
1
|
1
|
1
|
CLKsys /1024 (при AS2=0) или CLKosc /1024 (при AS2=1)
|
Примечание: «х» – номер таймера: 0 или 2
Работа таймеров Т0 (Т2) в режиме CTC
В этом режиме, называемом «сброс при совпадении», таймер работает как суммирующий счетчик на регистре TCNT0 (TCNT2). Но граница счета определяется содержимым регистра OCR0 (OCR2). При достижении этого состояния счет продолжается с $00 и устанавливается флаг прерывания TOV0 (TOV2). Поскольку это состояние соответствует ситуации «Совпадение», то будет также устанавливаться флаг OCF0 (OCF2) и изменяться состояние вывода OC0 (OC2) в соответствии с настройками согласно табл. 27.3. Для генерации сигнала с заданной частотой делается настройка COMх1=0 и COMх0=1, а частота генерируемого сигнала FOC0(2) определяется соотношением:
FOC0(2)=FCLKsys/ (2N(1+OCRх)),
где N – коэффициент деления предделителя (табл.3.7).
Работа таймеров Т0 (Т2) в режиме FastPWM
Режим FastPWM (быстродействующий ШИМ), позволяет генерировать высокочастотный широтно-модулированный сигнал. Суммирующий счет производится на регистре TCNT0 (TCNT2). Ширина очередного импульса будет определяться текущим содержимым регистра сравнения OCR0 (OCR2). Важно, что изменять содержимое этого регистра можно без остановки таймера, при этом помехи от переключения не возникают.
Состояние счетчика TCNT0 (TCNT2) изменяется циклически от $00 до $FF, при этом по переполнению формируется флаг прерывания TOV0 (TOV2), а при равенстве счетного регистра TCNT0 (TCNT2) и регистра сравнения OCR0 (OCR2) устанавливается флаг прерывания OCF0 (OCF2). Состояние вывода OC0 (OC2) определяется содержимым разрядов COMх1 и COMх0 согласно табл.27.5.
Частота импульсов определяется соотношением
FOC0(2)=FCLKsys/ (256N), где N – коэффициент предделителя (табл.27.4).
Таблица 27.5.
Настройка поведения вывода OC0 (OC2) в режиме FastPWM
COMх1
|
COM0х0
|
Описание состояния вывода OC0 (ОС2)
|
0
|
0
|
Таймер-счетчик Т0 (Т2) отключен от вывода OC0 (ОС2)
|
0
|
1
|
Зарезервировано и не используется
|
1
|
0
|
Вывод сбрасывается в «0» при достижении равенства регистров TCNTх и OCRх. Устанавливается в «1» при достижении TCNTх = $00 (неинвертированный ШИМ)
|
1
|
1
|
Вывод устанавливается в «1» при достижении равенства регистров TCNTх и OCRх. Сбрасывается в «0» при достижении TCNTх = $00 (инвертированный ШИМ)
|
Примечание: «х» – номер таймера: 0 или 2
Работа таймеров Т0 (Т2) в режиме PhaseCorrectPWM
Режим PhaseCorrectPWM (ШИМ с точной фазой) предназначен для генерации ШИМ-импульсов, однако счетчик функционирует попеременно как суммирующий и вычитающий, т.е. в реверсивном режиме (от $00 до $FF и обратно до $00). Частота генерации в два раза меньше, чем для режима FastPWM, но за счет симметричности импульсов этот режим предпочтительнее для управления двигателями.
FOC0(2)=FCLKsys/ (512N), где N – коэффициент предделителя (табл.27.4).
Вид выходного сигнала на выводе OC0 (OC2) определяется по табл.27.5.
|