Счетный регистр Таймера 2 является 8-битным. Для увеличения его разрядности до 10 бит в соответствии с разрядностью значения, задающего скважность сигнала, добавляется два младших бита. Эти биты берутся либо от счетчика предделителя, который используется для снижения частоты системного тактового сигнала перед подачей его на счетный регистр таймера, либо, если коэффициент деления предделителя равен единице, от 2-битного счетчика, формирующего внутренние тактовые сигналы (см. Рис. 4.4 на стр. 92). В том и другом случае максимальное разрешение длительности рабочего импульса получается равным 10 бит (1:1024) при частоте счета, в 4 раза превышающей частоту тактирования 8-битного счетного регистра Таймера 2.
При равенстве 10-битного значения счетчика числу, определяющему длительность импульса (скважность), защелка ШИМ сбрасывается, и на выводе ССР1 появляется НИЗКИЙ уровень. В этом состоянии вывод удерживается до начала формирования следующего периода сигнала в момент переполнения Таймера 2, после чего описанный цикл повторяется. Во всех случаях число в регистре CCPRL1 должно быть меньше, чем в регистре PR2, ведь в противном случае защелка ШИМ никогда не сбросится! Если в регистре PR2 находится число h’FF’, то разрешение системы максимально и равно 10 бит. Меньшие значения в регистре периода приводят к уменьшению разрешающей способности сигнала. Например, если PR2 = h’3F’, то разрешающая способность сигнала будет равна 8 бит (шесть битов счетного регистра Таймера 2 и два дополнительных).
В качестве примера предположим, что нам необходимо формировать сигнал с периодом 400 мкс (частота 2.5 кГц) при частоте системного резонатора, равной 16 МГц. При этом коэффициент деления предделителя Таймера 2 равен 16, а в регистре PR2 находится число h’63’. Для получения сигнала с коэффициентом заполнения, равным 25 % (как на Рис. 13.9,
bsf STATUS,RP0; Переключаемся в 1-й банк
movlw h’63’; Загружаем в регистр периода d’99’
movwf PR2
bcf TRISC,2; Переключаем ССР1 на выход
bcf STATUS,RP0; Возвращаемся в 0-й банк
movlw h’19’; Устанавливаем ведущий регистр на 1/4 от полной шкалы (h’63/4’)
movwf CCPR1L; То есть b’00011001’
movlw b’00001100’; Модуль ССР1 в режим ШИМ (1100)
movwf CCP1CON; с CCP1CON[5:4] (00)
movlw b’00000110’; Предделитель Таймера 2–1:16 (10)
movwf T2CON; Включаем Таймер 2 (1). Начинаем генерацию сигнала
Постделитель Таймера 2 при формировании ШИМ-сигнала не используется, однако влияет на установку флага TMR2IF, как и обычно. Флаг CCP1IF в данном режиме не изменяется.
Во многих силовых приложениях необходимо формировать два или четыре сигнала для управления нагрузкой, включенной по мостовой схеме. Некоторые модели микроконтроллеров, такие как PIC16F684 с
Покажите, как можно использовать Таймер 0 для формирования на выходе RA0 ШИМ-представления байта, находящегося в регистре DATUM. Полагая, что частота резонатора равна 8 МГц, рассчитайте период ШИМ-сигнала.
Решение
Время наступления переполнения Таймера 0 будет зависеть от значения, загруженного в счетный регистр таймера в начале периода. Если мы загрузим в этот регистр дополнительный код значения (отрицательное число), то длительность периода будет пропорциональна этому числу — чем оно больше, тем больше времени пройдет до переполнения таймера. И, наоборот, при загрузке в счетный регистр таймера самого числа DATUM период переполнения таймера будет обратно пропорционален этому значению. Загружая поочередно в счетный регистр таймера обратное значение DATUM (и выставляя при этом на выход ВЫСОКИЙ уровень) и собственно значение DATUM (выставляя НИЗКИЙ уровень), мы получим сигнал, период которого будет приблизительно равен периоду переполнения Таймера 0 при его нормальной работе (256 тактов).