При выборе режима широтно-импульсной модуляции (ШИМ), таймер/счетчик 1 и регистры совпадения OCR1A и OCR1В формируют 8, 9 или 10-разрядный непрерывный свободный от "дрожания" и правильный по фазе сигнал, выводимый на выводы PD5 (OC1A) и PD4 (OC1В). Таймер/счетчик 1 работает как реверсивный счетчик, считающий от $0000 до конечного значения (табл.5.5). При достижении конечного значения счетчик начинает считать в обратную сторону до нуля, после чего рабочий цикл повторяется. Когда значение счетчика совпадает с 8, 9 или 10-ю младшими битами регистра OCR1A или OCR1В, выводы PD5 (OC1A) / PD4 (OC1В) устанавливаются или сбрасываются в соответствии с установками бит COM1A1 / COM1A0 или COM1B1 / COM1B0 в регистре TCCR1A (табл.5.6).
Таблица 5.5
Конечное значение таймера и частота ШИМ
Разрешение ШИМ | Конечное значение таймера (TOP) | Частота ШИМ |
8 бит | $00FF (255) | fTCK1/510 |
9 бит | $01FF (511) | fTCK1/1022 |
10 бит | $03FF (1023) | fTCK1/2046 |
В режиме ШИМ, при записи в регистр OCR1A, 10 младших бит передаются во временный регистр и переписываются только при достижении таймером/счетчиком конечного значения (рис.5.13). При этом устраняется появление несимметричных импульсов (дрожания), которые неизбежны при асинхронной записи OCR1A.
|
|
Рисунок 5.13 – Эффект асинхронной записи содержимого OCR1х
При работе таймера/счетчика 1 в режиме ШИМ состояние счетного регистра изменяется от $0000 до конечного значения таймера (TOP) (см. табл.5.5), а затем снова до $0000, после чего цикл повторяется. Когда число, содержащееся в регистре счетчика TCNT1, совпадает с содержимым регистра совпадения OCR1A (или OCR1В), происходит изменение состояния соответствующего вывода микроконтроллера (OC1A или OC1B), в соответствии с табл.5.6. Таким образом, длительность импульса равна удвоенному значению содержимого регистра сравнения.
Таблица 5.6
Установка режима совпадения при работе ШИМ
COM1х1 | COM1х0 | Влияние на вывод OC1 |
Не подключен | ||
Не подключен | ||
При совпадении, сбрасывается в «0» при прямом счете и устанавливается в «1» при обратном счете (неинвертированный ШИМ-сигнал) | ||
При совпадении, устанавливается в «1» при прямом счете и сбрасывается в «0» при обратном счете (инвертированный ШИМ-сигнал) |
Если в регистр совпадения OCR1A (или OCR1В) записать значение $0000 или конечное значение (TOP), то при следующем совпадении вывод сравнения (OC1A или OC1B) переключится в устойчивое состояние, определяемое битами COM1х1 и COM1х0. Это показано в табл.5.7.
Таблица 5.7
Выход ШИМ для OCR=$0000 или TOP
COM1х1 | COM1х0 | OCR1х | вывод OC1х |
$0000 | «0» | ||
TOP | «1» | ||
$0000 | «1» | ||
TOP | «0» |
Особенностью работы таймера/счетчика Т1 в режиме ШИМ является то, что при записи в регистр сравнения младшие 10 разрядов записываемого числа на самом деле сохраняются в специальном временном регистре (не путать с регистром TEMP). А изменение содержимого регистра сравнения происходит только в момент достижения счетчиком максимального значения (ТОР). Благодаря такому решению исключается появление несимметричных выбросов сигнала на выходе модулятора (помех), которые были бы неизбежны при непосредственной записи в регистр сравнения (см.рис.5.13).
|
|
Соответственно, при чтении регистра сравнения в промежутке между записью в него и его действительным изменением возвращается содержимое временного регистра. То есть, всегда возвращается значение, записанное последним.
И несколько слов о прерываниях. При работе таймера/счетчика Т1 в режиме ШИМ может генерироваться прерывание по переполнению счетного регистра таймера/счетчика, а также прерывания от схемы сравнения.
В режиме ШИМ флаг переполнения таймера 1 (TOV1) устанавливается, когда счетчик изменяет направление счета в точке $0000. Прерывание по переполнению таймера 1 работает как при нормальном режиме работы таймера/счетчика, т.е. оно выполняется, если установлен флаг TOV1 и разрешены соответствующие прерывания. То же самое касается флага совпадения и прерывания по совпадению.