Значения коэффициентов деления пред- и постделителя, а также управление Таймером 2 осуществляется с использованием регистра управления T2CON, как описано ниже. После сброса микроконтроллера все биты этого регистра сбрасываются, выключая Таймер 2 и устанавливая коэффициенты деления, равные 1.
Рис. 13.8.
∙ TMR2ON
Включение Таймера 2 осуществляется установкой бита T2CON[2] в 1.
∙ T2CKPS[1:0]
Инкрементирование счетного регистра таймера может осуществляться либо с частотой тактового сигнала
∙ TOUTPS[3:0]
Число периодов Таймера 2, после которых устанавливается флаг прерывания TMR2IF, может быть задано с помощью битов TOUTPS[3:0] (T2CON[5:2]). Этот 4-битный код
Преимуществом такой архитектуры является то, что подстройку точного значения периода тайм-аута можно осуществить без использования модуля ССР, просто записью требуемого значения в регистр периода. Длительность интервала до установки флага TMR2IF будет определяться выражением
(4/
В качестве примера предположим, что нам необходимо формировать прерывание 100 раз в секунду. Если предположить, что микроконтроллер работает от резонатора с частотой 4 МГц, то, задав коэффициент деления предделителя равным 4, мы получим период тактового сигнала Таймера 2, равный 4 мкс. Если в регистр периода загрузить число 249, то период импульсов на выходе компаратора Таймера 2 составит 250 х 4 = 1 мс. А задав коэффициент деления постделителя, равный 10 (1001), получим период прерывания 10 мс (частота 100 Гц). Изменяя коэффициент деления постделителя от 1 до 16, мы сможем регулировать период генерации прерывания от 1 до 16 мс. Для точной подстройки периода с шагом, равным 4 х Постделитель [мкс], можно изменять содержимое регистра PR2.
Инициализационный код для этого примера выглядит следующим образом:
movlw b’01001101’; Постделитель 1:10 (1001), Таймер 2 вкл. (1)
movwf T2CON; Предделитель 1:4 (01)
bsf STATUS,RP0; Переключаемся в 1-й банк
movlw d’49’; Задаем период, равный 249
movwf PR2
bsf PIE1,TMR2IE; Разрешаем прерывание от Таймера 2
bcf STATUS,RP0; Возвращаемся в 0-й банк
bsf INTCON,PEIE; Разрешаем все прерывания от таймеров и модуле
bsf INTCON,GIE; Разрешаем прерывания
В компиляторе CCS имеется своя функция для инициализации Таймера 2 —
setup_timer_2(<режим>, <период>, <постделитель>):
setup_timer_2(T2_DIV_BY_4, 249,10);
enable_interrupts(INT_TIMER2);
enable_intqrrypts(GLOBAL);
Содержимое счетного регистра таймера можно прочитать с помощью функции get_timer2 (), а изменить — с помощью функции set_timer_2 ().
В качестве одного из наиболее распространенных применений микроконтроллерных устройств можно назвать задачу управления силовыми цепями, такими как нагревательные элементы, осветительные приборы, а также управление скоростью электродвигателей. В принципе для этого можно было бы использовать цифро-аналоговый преобразователь, подобный изображенному на Рис. 12.16 (стр. 399), управляющий мощным усилителем. Однако такая схема линейного управления дорога и крайне неэффективна из-за большой мощности, рассеиваемой на усилителе. Гораздо эффективнее и удобнее будет быстро включать/выключать нагрузку с достаточно высокой частотой. Мощные ключевые элементы, такие как тиристоры, рассеивают относительно небольшую мощность, поскольку в выключенном состоянии ток через них не протекает, а падение напряжения на открытом ключе практически равно нулю.
Примеры таких сигналов показаны на Рис. 13.9. Средняя амплитуда вычисляется как