пятница, 22 мая 2015 г.

Timer/Counter0 (Таймер/счётчик0) в ATtiny2313. Режимы работы.

Режимы работы таймера/счётчика T0.


Номер режима
WGM02
WGM01
WGM00
Режим работы таймера/счётчика T0 
Модуль счёта
(TOP)
Обновление регистров OCR0A/
OCR0B
Момент установки флага
TOV0
0
0 0 0 Normal $FF Немедленно $FF
1 0 0 1 Phase Correct PWM $FF При TOP $00
2 0 1 0 CTC OCR0A Немедленно $FF
3 0 1 1 Fast PWM $FF При TOP $FF
4 1 0 0 - - - -
5 1 0 1 Phase Correct PWM OCR0A При TOP $00
6 1 1 0 - - - -
7 1 1 1 Fast PWM OCR0A При TOP TOP

Режим Normal

Это самый простой режим работы таймера/счётчика. В нём он работает как обычный счётчик. По каждому импульсу тактового сигнала clkT0 счётный регистр увеличивает своё значение на единицу.
При переходе через максимально возможное значение (255 в десятичной или 0xFF в шестандцатеричной системах) возникает переполнение счётного регистра TCNT0 и счёт начинается с 0.
В том же такте, что и обнуление, устанавливается 1 во флаге прерывания по переполнению.
Если глобально разрешены прерывания (бит I в регистре SREG) и прерывание по переполнению таймера/счётчика T0 (бит TOIE0 в регистре TIMSK), то генерируется прерывание, то есть вызывается соответствующая подпрограмма.
При совпадении счётного регистра TCNT0 и регистров сравнения OCR0A или OCR0B устанавливается соответствующий флаг прерывания OCF0A или OCF0B, а при разрешённых прерываниях вообще (бит I в регистре SREG) и прерывании по событию "Совпадение" (биты OCIE0A и OCIE0B регистра TIMSK) запускается подпрограмма-обработчик соответствующего прерывания.
Также при совпадении счётного регистра TCNT0 и регистров сравнения OCR0A/OCR0B может изменятья состоянии выводов OC0A/OC0B. Характер этого изменение определяется битами COM0A1/COM0B1 и COM0A0/COM0B0 регистра управления TCCR0A.

COM0A1
(COM0B1)
COM0A0
(COM0B0)
Описание
0 0
Нормальная работа вывода. Вывод OC0A (OC0B) отключен от таймера/счётчика T0.
0 1
Инвертировать состояние вывода.
1 0
Сбросить при совпадении в 0.
1 1
Установить 1 при совпадении.

Если необходимо, состояни выводов OC0A/OC0B можно изменить принудительно установкой 1 в биты FOC0A/FOC0B регистра управления TCCR0B. Прерывание при этом не генерируется.

Режим CTC (сброс при совпадении)

Вэтом режиме счётный регистр также работает как обычный счётчик, где по каждому импульсу тактового сигнала clkT0 счётный регистр увеличивает своё значение на единицу. Однако сбрасывается он при достижении значения, записанного в регистре сравнения OCR0A, в этом же такте установится флаг OCF0A и при разрешённых глобально прерываниях (бит I в регистре SREG) и разрешённом прерывании по событию "Совпадение" таймера/счётчика T0 (бит OCIE0A регистра TIMSK) генерируется прерывание.
Одновременно с установкой флага может изменяться состояние выводов OC0A/OC0B микроконтроллера, что определяется битами COM0A1/COM0B1 и COM0A0/COM0B0 регистра управления TCCR0A.

COM0A1
(COM0B1)
COM0A0
(COM0B0)
Описание
0 0
Нормальная работа вывода. Вывод OC0A (OC0B) отключен от таймера/счётчика T0.
0 1
Инвертировать состояние вывода.
1 0
Сбросить при совпадении в 0.
1 1
Установить 1 при совпадении.


Режим Fast PWM

В режиме Fast PWM (Быстродействующий ШИМ) микроконтроллер может генерировать сигнал высокой частоты с широтно-импульсной модуляцией.
Вэтом режиме счётный регистр также работает как обычный счётчик, где по каждому импульсу тактового сигнала clkT0 счётный регистр увеличивает своё значение на единицу.
При переходе через максимально возможное значение (0xFF при WGM02=0 или заданное регистром OCR0A при WGM02=1) возникает переполнение счётного регистра TCNT0, устанавливается флаг прерывания по переполнению TOV0 регистра TIFR и счёт начинается с 0.
При равенстве содержимого счётного регистра и регистра сравнения OCR0A/OCR0B устанавливается флаг прерывания по событию "Совпадение" OCF0A/OCF0B.
Также может изменяться состояние выводов OC0A/OC0B микроконтроллера, что определяется битами COM0A1/COM0B1 и COM0A0/COM0B0 регистра управления TCCR0A.

COM0A1
(COM0B1)
COM0A0
(COM0B0)
Описание
0 0 Нормальная работа вывода. Вывод OC0A (OC0B) отключен от таймера/счётчика T0.
0 1 OC0A:
WGM02 = 0 - Вывод OC0A отключен от таймера/счётчика T0.
WGM02 = 1 - Инвертирование состояния вывода.
OC0B: -
1 0 Сбрасывается при совпадении в 0. Устанавливается в 1 при достижении счётчиком максимального значения (неинвертированный ШИМ сигнал).
1 1 Устанавливается 1 при совпадении. Сбрасывается в 0 при достижении счётчиком максимального значения (инвертированный ШИМ сигнал).


Режим Phase Correct PWM

Режим Phase Correct PWM (ШИМ с точной фазой) так же как и Fast PWM предназначен для генерации ШИМ сигнала. Однако в этом режиме счётный регистр функцианирует как реверсивный счётчик - сначала от считает от нулевого значения до максимального, а затем обратно до нулевого. В связи с этим максимальная частота сигнала в этов режиме в 2 раза меньше, чем в Fast PWM.
В зависимости от бита WGM02 максимальное значение равно 255 ($FF), либо задаётся регистром OCR0A.
При достижении счётчиком минимального значения устанавливается флаг прерывания по переполнению TOV0 (регистр TIFR). При равенстве счётного регистра и регистра сравнения OCR0A/OCR0B устанавливается флаг OCF0A/OCF0B и, в зависимости от битов  COM0A1/COM0B1 и COM0A0/COM0B0 (регистр TCCR0A), может изменяться состояние вывода OC0A/OC0B.

COM0A1
(COM0B1)
COM0A0
(COM0B0)
Описание
0 0 Нормальная работа вывода. Вывод OC0A (OC0B) отключен от таймера/счётчика T0.
0 1 OC0A:
WGM02 = 0 - Вывод OC0A отключен от таймера/счётчика T0.
WGM02 = 1 - Инвертирование состояния вывода.
OC0B: -
1 0 Сбрасывается в 0 при прямом счёте. Устанавливается в 1 при обратном счёте.
1 1 Устанавливается 1 при прямом счёте. Сбрасывается в 0 при обратном счёте.




Комментариев нет:

Отправить комментарий