Курсовая работа: Микроконтроллеры семейства AVR фирмы Atmel
Если не выбран ни один
из источников тактового сигнала, таймер/счётчик останавливается.
Сигнал на выходе схемы
выбора источника тактового сигнала (clkT0) называется сигналом синхронизации
таймера.
Содержимое регистров
OCR0Aи OCR0Bпостоянно сравнивается со значением таймера/счётчика. Результат
сравнения может использоваться генератором для генерации сигнала ШИМ или прямоугольных
импульсов переменной частоты на одном из выходов OC0Aили OC0B.
В момент совпадения в
одном из каналов устанавливается соответствующий флаг OCF0Aили OCF0B, который
может использоваться для генерации запроса на прерывание по совпадению.
5.4 Используемые
обозначения
При описании счётчиков
используются специальные обозначения для всех его важных состояний. Эти
обозначения приведены в табл. 1.
Обозначения для
основных состояний 8-разрядного счётчика
Таблица 1
BOTTOM |
Счётчик достигает значения BOTTOM (начало),
когда его содержимое равно 0x00 |
MAX |
Счётчик достигает значения MAX
(максимум), когда его содержимое равно 0xFF (десятичное 255) |
TOP |
Счётчик достигает значения
TOP(вершина), когда его содержимое достигает самого высокого значению в
данном режиме работы. В зависимости от режима значение TOP может быть равно
либо 0xFF (MAX), либо значению, записанному в регистре OCR0A (режим сброса по
совпадению) |
5.5 Модуль счёта
Основой
восьмиразрядного таймера/счётчика является программируемый реверсивный счётный
модуль. На рис. 10 показана блок-схема счётного модуля и его управляющие
сигналы.

Рис. 10 - Блок-схема
счётного модуля
Рассмотрим внутренние
сигналы:
♦ count –
увеличивает или уменьшает содержимое TCNT0 на 1;
♦ direction –
выбор между уменьшением и увеличением;
♦ clear – очистка
TCNT0 (установка всех битов в ноль);
♦ clkT0 –
тактовая частота таймера/счётчика;
♦ top – возникает
при достижении TCNT0 максимального значения;
♦ bottom – возникает
при достижении TCNT0 минимального значения (нуля).
В зависимости от режима
работы таймера, каждый импульс тактового сигнала (clkT0) очищает, увеличивает
или уменьшает значение счётчика. Сигнал clkT0может быть получен как от
внешнего, так и от внутреннего источника тактового сигнала. Это определяется
битами выбора тактового сигнала (CS02:0). Когда не выбран ни один источник
тактового сигнала (CS02:0 = 0), таймер останавливается.
Центральный процессор
может обращаться к значению регистра TCNT0 независимо от того, присутствует ли
сигнал clkT0 или нет. Команда записи, поступающая от центрального процессора,
имеет приоритет над всеми другими операциями (очистки счётчика или операциями
счёта).
Режимы работы таймера
определяются установкой битов WGM01 и WGM00 регистра TCCR0Aи битом WGM02
регистра TCCR0B. Есть тесная связь между выбранным режимом работы счётчика и
частотой сигнала на выходе OC0A.
Флаг переполнения
таймера/счётчика (TOV0) устанавливается в соответствии с режимом работы,
выбранным при помощи битов WGM01:0. Флаг TOV0 может использоваться для
генерации прерываний центрального процессора.
5.6 Модуль совпадения
Основа модуля –
восьмиразрядный компаратор, который непрерывно сравнивает содержимое регистра
TCNT0 с содержимым каждого из двух регистров совпадения (OCR0Aили OCR0B).
Каждый раз, когда содержимое TCNT0 оказывается равным содержимому OCR0Aили
OCR0B, компаратор вырабатывает сигнал совпадения. Этот сигнал устанавливает
соответствующий флаг совпадения (OCF0Aили OCF0B) в следующем тактовом цикле.
Если соответствующее
прерывание разрешено, установка флага совпадения вызывает прерывание. Флаг
совпадения автоматически сбрасывается при запуске процедуры обработки
прерывания. Флаг также может быть очищен программно путём записи в него
логической единицы.
В режиме генератора
частот сигнал совпадения используется для генерации выводного сигнала
совпадения используется для генерации выводного сигнала в соответствии с
выбранным режимом работы, который определяется битами WGM02:0, а также битами
выбора режима сравнения (COM0x 1:0). Сигналы max и bottom используются
генератором частот в некоторых случаях для получения критических значений в
отдельных режимах работы. На рис. 11 показана блок-схема модуля совпадения. На
рисунке буква x – это условное обозначение. Для разных модулей совпадения x равно
либо A либо B.

Рис. 11 - Блок-схема
модуля совпадения
Регистры OCR0xимеют
двойную буферизацию в любом режиме широтно-импульсной модуляции (ШИМ). В режиме
Normal и режиме СТС (Сброс при совпадении) двойная буферизация отключается.
Двойная буферизация синхронизирует момент обновления регистра OCR0xс моментом
достижения таймером верхнего или нижнего пределов. Синхронизация предотвращает
возникновение ассиметричных ШИМ-импульсов, то есть импульсов, длина которых
равна нечётному количеству тактов. Таким образом обеспечивается высокое
качество сигналов ШИМ.
Доступ к регистру
OCR0xможет показаться слишком сложным. На самом деле это не так. Если двойная
буферизация разрешена, центральный процессор обращается к регистрам OCR0xчерез
буфер. Если буферизация отключена, центральный процессор обращается к регистрам
OCR0xнепосредственно.
5.7 Принудительное
изменение состояния выхода совпадения
Во всех не-ШИМ-режимах
таймера сигнал на любом из выходов совпадения может быть изменён принудительно
путём записи единицы в специальный бит FOC0x. Принудительное изменение выхода
совпадения не устанавливает флаг OCF0xи не перезагружает таймер.
Сигнал на выходе
OC0xбудет изменяться таким же образом, как при реальном совпадении. То есть
поведение выхода OC0xбудет зависеть от установки битов COM0x1:0. В зависимости
от значения этих битов сигнал на выходе будет либо установлен в единицу, либо
сброшен в ноль, либо изменит своё значение на противоположное.
5.8 Блокировка режима
совпадения в момент записи регистра TCNT0
При записи значения в
регистр TCNT0 операция сравнения блокируется в течение одного такта входного
сигнала таймера. Это происходит даже в том случае, если таймер остановлен. Эта
особенность позволяет записывать в регистр OCR0x то же самое значение, что и в
регистр TCNT0, не вызывая прерывания при поступлении на вход таймера/счётчика
тактового сигнала.
5.9 Использование
модуля прерывания
Как уже говорилось, в
любом режиме работы таймера в момент записи регистра TCNT0 работа модуля
сравнения приостанавливается на один период тактового сигнала. Это может
привести к ошибкам при изменении содержимого регистра TCNT0 независимо от того,
запущен таймер/счётчик или нет.
Если значение,
записанное в TCNT0, равно значению, записанному в OCR0x, операция сравнения
будет пропущена, что приведёт к неправильной работе таймера в режиме генератора
частоты.
По той же причине
нельзя записывать в TCNT0 значение равное BOTTOM, когда счётчик работает в
режиме обратного счёта.
Настройка режимов
работы выхода OC0xдолжна быть произведена перед тем, как соответствующая линия
порта будет сконфигурирована как выход. Самый простой способ установить нужное
значение на выходе OC0x – использовать принудительную установку (бит FOC0x) в
режиме Normal. Регистры OC0x сохраняю своё значение при переключении режимов
генерации сигналов.
5.10 Модуль вывода
сигнала совпадения
Разряды COM0x1:0
выполняют две функции. Генератор частот использует биты COM0x1:0 для того,
чтобы определить, как изменится сигнал на выходе модуля совпадения (OC0x) в
момент обнаружения факта совпадения. В то же время биты COM0x1:0 управляют
источником сигнала на выходе OC0x.
На рис. 12 показана
упрощённая схема, демонстрирующая логику работы разрядов COM0x1:0.

Рис. 12 - Схема вывода
сигнала совпадения
Как видно из рисунка,
значение COM0x1:0 влияет на состояние порта ввода вывода микросхемы, не
зависимо от главных регистров управления этим портом (DDR и PORT). Причём когда
мы говорим о статусе OC0x, нужно понимать, что внутренний регистр OC0x не то же
самое, что контакт микросхемы OC0x. Сразу после системного сброса в регистр
OC0x записывается ноль.
Если любой из битов COM0x1:0установлен,
то основная функция порта ввода-вывода отменяется, и на выход проходит сигнал
совпадения (OC0x) с генератора частот. При этом, направление передачи
информации контакта OC0x (вход он или выход) всё ещё зависит от
соответствующего бита регистра DDR.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 |