Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное_пособие.doc
Скачиваний:
70
Добавлен:
10.11.2019
Размер:
8.13 Mб
Скачать
      1. Таймер/счетчик т0.

Таймер/счетчик Т0 имеет имя TCNT0 и является 8-разрядным суммирующим счетчиком. В одном из режимов ШИМ он работает как реверсивный счетчик. На его вход могут поступать как внешние импульсы через контакт разряда порта PINB,0/Т0 (функция счетчика), так и импульсы от внутреннего тактового генератора либо непосредствено, либо через делитель частоты с коэффициентами деления 8,64,256 или 1024 (функция таймера).

Функция таймера Т0 имеет четыре режима: нормальный (Normal), ШИМ с точной фазой (Phase Correct PWM), сброс по совпадению (CTC) и быстрый ШИМ (Fast PWM). Структура таймера Т0 представлена на рис.22.

В режиме Normal таймер Т0 функционирует как обычный суммирующий счетчик. При переходе от состояния FF к состоянию нуля возникает переполнение, устанавливается флаг прерывания по переполнению TOV0 и может быть вызвана подпрограмма прерывания по переполнению таймера Т0. Во время работы таймера его содержимое сравнивается в каждом такте с содержимым специального регистра сравнения OCR0. При их равенстве устанавливается флаг прерывания по совпадению OCF0 и может быть вызвана подпрограмма обработки прерывания по совпадению (если эти

Рисунок 22

прерывания предварительно разрешены). Кроме того, при совпадении может измениться состояние разряда порта РВ3/ОС0 (выход совпадения таймера Т0).

В режиме сброса по совпадению коэффициент счета Т0 равен значению в регистре OCR0 (рис.22а).

Рисунок 22а

В этом режиме таймер также работает как суммирующий счетчик и также происходит сравнение TCNT0 и OCR0. При их равенстве таймер обнуляется и продолжает счет с нулевого значения. Кроме того, устанавливаются флаги прерывания по переполнению TOV0 и по совпадению OCF0 и могут быть вызваны соответствующие подпрограммы обработки прерываний. Одновременно с установкой флагов может измениться состояние выхода совпадения ОС0(PINB.3).

Возможно принудительное изменение состояния выхода ОС0.

В режиме быстрой ШИМ работа таймера аналогична работе в режиме совпадения. Однако переключение выхода совпадения может происходить как в момент совпадения регистров TCNT0 и OCR0, так и при переполнении таймера. Например, для инвертированного ШИМ-сигнала при совпадении значений в регистре OCR0 и в таймере выход ОС0 устанавливается в единицу, а при переполнении таймера – сбрасывается. Для неинвертированного сигнала ШИМ поведение выхода совпадения инверсное.

В режиме ШИМ с корректной фазой (Phase Correct PWM) таймер Т0 работает как реверсивный счетчик. Сначала Т0 работает в суммирующем режиме. После достижения состояния FF он автоматически переключается в вычитающий режим и далее его значение уменьшается до нуля. При равенстве значений в таймере и в регистре сравнения при нарастании и при уменьшении значений в таймере может происходить переключение выхода совпадения. Этот вид сигнала ШИМ называют центрированным сигналом ШИМ. Очевидно, что период ШИМ сигнала в этом режиме в два раза больше, чем в режиме быстрой ШИМ. Однако, этот сигнал чаще используется для управления двигателями, чем сигнал с быстрой ШИМ.

Временные диаграммы сигналов таймера Т0 аналогичны диаграммам таймера Т1, которые будут представлены ниже.

Управление таймером Т0 производится при помощи регистра управления TCCR0, формат которого представлен на рисунке 23.

Рисунок 23

Седьмой разряд регистра TCCR0FOC0 – принудительное изменение состояния вывода OC0 (режимы Normal и CTC). При записи лог. 1 в этот разряд состояние вывода OC0 изменяется в соответствии с установками разрядов COM01:COM00 (таблица19). Прерывание при этом не генерируется и сброс таймера (в режиме CTC) не производится. В режимах Fast PWM (быстрый ШИМ) и Phase Correct PWM (Шим с точной фазой) этот разряд должен быть сброшен в «0».

WGM01:WGM00 определяют режимы работы таймера/счётчика Т0 в соответствии с таблицей 17.

Разряды COM01:COM00 определяют поведение OC0 при наступлении события «Совпадение». Влияние содержимого этих разрядов на состояние вывода зависит от режима работы таймера/счётчика Т0 (таблицы 18 и 19).

Таблица 17

Номер режима

WGM01

WGM00

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

0

0

0

Normal

1

0

1

Phase Correct PWM (ШИМ с точной фазой)

2

1

0

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

3

1

1

Fast PWM (быстрый ШИМ)

Таблица 18 Управление выводом OC0 в режиме CTC:

COM01

COM00

Описание

0

0

Таймер/счётчик Т0 отключен от вывода OC0.

0

1

Состояние вывода меняется на противоположное.

1

0

Вывод сбрасывается в «0».

1

1

Вывод устанавливается в «1».

Таблица 19 Поведение ОС0 в режиме FAST PWM и (PHASE CORRECT PWM)

COM01

COM00

Описание

0

0

Таймер/счётчик отключен отвывода OC0

0

1

Зарезервировано

1

0

Сбрасывается в «0» при равенстве регистров TCNT0 и OCR0 при прямом счете и устанавливается в «1» при переполнении. (Для Phase Correct PWM: Сбрасывается в «0» при прямом счёте и устан. в «1» при обратном счете ).

1

1

Устанавливается в «1» при равенстве регистров TCNT0 и OCR0. (Для Phase Correct PWM: Устанавливается в «1» при прямом счёте и сбрасывается при обратном счете).

Таблица 20 Выбор коэффициента деления частоты для таймера Т0

CS02

CS01

CS00

Описание

0

0

0

Таймер/счетчик 0 остановлен

0

0

1

Коэффициент деления 1

0

1

0

Коэффициент деления 8

0

1

1

Коэффициент деления 64

1

0

0

Коэффициент деления 256

1

0

1

Коэффициент деления 1024

1

1

0

Режим счетчика, переключение TCNT0 по срезу

1

1

1

Режим счетчика, переключение TCNT0 по фронту

Разряды CS02…CS00 определяют источник тактового сигнала микроконтроллера: внешние импульсы или от тактового генератора, с делителем частоты или без него. Этими разрядами определяется также коэффициент деления делителя частоты. Если значения разрядов 000, то таймер Т0 остановлен. При любых других значениях CS02-CS00 таймер включается и будет функционировать в режиме, определенном другими разрядами регистра управления TCCR0.

По срезу 256-го входного импульса (переполнение) устанавливается флаг (триггер) TOV0 - прерывания по переполнению Т0 и, если установлены флаг общего разрешения прерывания I и флаг TOIE0 (разрешения прерывания по переполнению TCNT0), то выполняется команда RCALL (вызывается подпрограмма обработки прерывания при переполнении таймера/счетчика Т0).

Пример1: настроить таймер/счетчик Т0 на работу в режиме таймера; значение входной частоты равно тактовой деленной на 256.

LDI R16, 4 ; 4=0000 0100 – см. формат регистра TCCR0

OUT TCCR0,R16 ; таймер включается в заданный режим.

Пример 2: формирование временного интервала равного 100 тактам тактового генератора с помощью таймера/счетчика Т0.

LDI R16,156 ;

OUT TCNT0,R16; загрузка в Т0 значения 256-100=156

LDI R16,1 ;коэфф. деления делителя=1, пуск таймера

OUT TCCR0,R16; включение Т0 на отсчет им заданного интервала.

От момента включения Т0 до установки флага прерывания переполнению Т0 пройдет время, равное 100 импульсам тактового генератора. Работа Т0 производится от значения 156 до значения переполнения (256).