ТАЙМЕР/СЧЕТЧИК В РЕЖИМЕ ШИМ
При выборе режима широтно-импульсной модуляции (ШИМ), таймер/счетчик 1 и регистр совпадения OCR1A формируют 8, 9 или 10-разрядный непрерывный свободный от "дрожания" и правильный по фазе сигнал, выводимый на вывод PB3(OC1). Таймер/счетчик 1 работает как реверсивный счетчик считающий от 0 до конечного значения (см. табл.10). При достижении конечного значения счетчик начинает считать в обратную сторону до нуля, после чего рабочий цикл повторяется. Когда значение счетчика совпадает с 8, 9 или 10-ю младшими битами регистра OCR1A, вывод PD3(OC1) устанавливается или сбрасывается в соответствии с установками бит COM1A1 и COM1A0 в регистре TCCR1 (см. табл.11).
Таблица 10. Конечное значение таймера и частота ШИМ.
Разрешение ШИМ | Конечное значение таймера | Частота ШИМ |
8 бит
|
$00FF (255) | Ftc1/510 |
9 бит | $01FF (511) | Ftc1/1022 |
10 бит | $03FF (1023) | Ftc1/2046 |
В режиме ШИМ, при записи в регистр OCR1A, 10 младших бит передаются во временный регистр и переписываются только при достижении таймером/счетчиком конечного значения. При этом устраняется появление несимметричных импульсов (дрожания), которые неизбежны при асинхронной записи OCR1A.
Таблица 11. Установка режима совпадения при работе ШИМ.
COM1A1 | COM1A1 | Влияние на вывод OC1 |
0 | 0 | Не подключен |
0 | 1 | Не подключен |
1 | 0 | Очищается при совпадении, для возрастания счетчика и сбрасывается для уменьшения (неинвертирующий ШИМ) |
1 | 1 | Очищается при совпадении, для уменьшения счетчика и сбрасывается для возрастания (инвертирующий ШИМ) |
Если OCR1A содержит значение $0000 или конечное значение (TOP), вывод OC1 остается в том состоянии, которое определяется установками COM1A1 и COM1A0. Это показано в табл. 12.
Таблица 12. Выход ШИМ для OCR=$0000 или TOP
COM1A1 | COM1A1 | OCR1A | вывод OC1 |
1 | 0 | $0000 | Низкий |
1 | 0 | TOP | Высокий |
1 | 1 | $0000 | Высокий |
1 | 1 | TOP | Низкий |
В режиме ШИМ флаг переполнения таймера 1 (TOV1) устанавливается, когда счетчик изменяет направление счета в точке $0000. Прерывание по переполнению таймера 1 работает как при нормальном режиме работы таймера/счетчика, т.е. оно выполняется, если установлен флаг TOV1 и разрешены соответствующие прерывания. То же самое касается флага совпадения и прерывания по совпадению.