- •Исследование узлов комплексных систем управления
- •Часть 3
- •Введение
- •1. Организация цикла лабораторных работ
- •1.1. Состав и задачи цикла работ
- •Организация памяти
- •Регистры общего назначения
- •Регистры ввода/вывода
- •Основные служебные регистры мк
- •Порты ввода/вывода
- •Контрольные вопросы
- •Указания по составлению алгоритмов Управление временем задержки
- •Режим обслуживания прерываний
- •2. Порядок выполнения работы Контрольные вопросы по допуску к работе
- •2.1. Предварительное задание
- •2.2. Рабочее задание
- •3. Итоговые вопросы
- •Память данных
- •3. Итоговые вопросы
- •Приложение Названия и номера регистров и портов avr Classic и Mega
- •Регистры управления
- •Библиографический список
- •Содержание
- •Часть 3
- •394026 Воронеж, Московский просп., 14
Контрольные вопросы
Опишите состав и основные возможности среды Algorithm Builder.
Каково быстродействие исследованных вами МК?
Опишите состав РСП и назначение его разрядов.
Опишите организацию портов МК AVR.
Конфигурирование портов и управление данными.
Представьте краткое содержание каждого проработанного вами алгоритма.
Объясните, как изменяются в ходе эмуляции разряды РСП и значение SP и как используются эти изменения в программе.
Приведите метод вычисления длительности перехода «1» из одного разряда порта B в другой и результат.
Объясните механизмы действия макрооператоров и инструмента SETTER.
Перечислите полученные навыки составления алгоритмов и навыки пользования средой Algorithm Builder.
Лабораторная работа № 15
Формирование алгоритмов управления в реальном времени
Цель работы – изучить возможности управления процессами в реальном времени.
1. Теоретические сведения
Архитектура таймеров
Микроконтроллеры AVR семейств Classic, Tiny и Mega имеют в своем составе от одного до нескольких таймеров/счетчиков общего назначения (плюс сторожевой таймер для предотвращения зацикливания программы), например модели ATmega256x включает 2 восьмиразрядных и 4 16-битных таймера.
Таймеры позволяют микроконтроллеру, не загружая процессор, решать следующие задачи:
• отсчет равных интервалов времени заданной длительности, повтор алгоритма управления по истечении каждого такого временного интервала; обычно эту функцию называют формированием меток реального времени.
• контроль за изменением состояния линии ввода МК;
• измерение длительности сигнала заданного логического уровня на линии ввода МК;
• подсчет числа импульсов внешнего сигнала на заданном временном интервале;
• формирование на линии вывода МК сигнала заданного логического уровня с программируемой задержкой по отношению к изменению сигнала на линии ввода;
• формирование на линии вывода МК импульсного сигнала с программируемой частотой и программируемым коэффициентом заполнения.
Отсюда следует функциональное назначение таймеров/ счетчиков.
В данной работе будет исследоваться 16-битный таймер Т1, поэтому рассмотрим его подробнее. Структурная схема Т1 приведена на рис. 15.1.
Рис. 15.1. Структурная схема таймера Т1
Функционирование T1 зависит от содержимого следующих регистров управления, состояния и данных (табл. 15.1):
Таблица 15.1
Название |
Функция |
Содержит |
TCNT1 |
Счетный регистр таймера/счетчика 1 |
текущий код (2 байта) |
ICR1 |
Регистр захвата таймера/счетчика 1 |
защелкнутый код (2 байта) |
OCR1A |
Регистр совпадения выхода A |
заданный код (2 байта) |
OCR1B |
Регистр совпадения выхода B |
заданный код (2 байта) |
TIFR |
Регистр флагов событий таймеров / счетчиков |
биты произошедших событий |
TCCR1A |
Регистр управления А таймером/ счетчиком 1 |
биты управления |
TCCR1B |
Регистр управления B таймером/ счетчиком 1 |
биты управления |
TIMSK |
Регистр маски прерываний от таймеров / счетчиков |
биты маски |
SREG |
Регистр состояния – флаг разрешения прерываний I (см. табл. 14.1) |
бит маски |
Рассмотрим реализацию основных режимов работы таймера, начиная со счетного режима.
Основным элементом любого таймера является счетный регистр. Счетный регистр таймера/счетчика Т1 реализован как суммирующий (в режиме ШИМ – как суммирующий/вычитающий) 16-разрядный счетчик. Физически регистр TCNT1 размещен в двух регистрах TCNT1H:TCNT1L. После подачи напряжения питания в регистре TCNT1 находится нулевое значение. При его переполнении устанавливается флаг TOV1 регистра событий TIFR (см. ниже) и счет начинается с нуля, а также запрос на прерывание (при наличии соответствующих разрешений – см. ниже).
TCNT1 доступен в любой момент времени как для чтения, так и для записи. При записи в счетный регистр во время работы таймера счет будет продолжен по следующему за операцией записи импульсу тактового сигнала таймера/счетчика. Чтобы при обращении ЦПУ микроконтроллера к этим регистрам запись или чтение обоих байтов содержимого счетного регистра происходило одновременно, обращение производится с использованием специального 8-разрядного регистра TEMP (этот регистр используется только процессором и программно недоступен). Этот же регистр используется и при обращении к остальным 16-разрядным регистрам таймера/ счетчика Т1: OCR1 (OCR1A и OCR1B) и ICR1. Прерывания на время обращения к любому из этих регистров должны быть запрещены. Для выполнения полного цикла записи в 16-разрядный регистр первым должен быть загружен старший байт (регистр TCNT1Н). Для выполнения полной операции чтения 16-разрядного регистра первым должен быть прочитан младший байт (регистр TCNT1L). Установка счетного регистра в ненулевое состояние перед каждым началом отсчета является одним из способов задания временного интервала счета (другой способ описан ниже).
У правление таймером/счетчиком Т1 осуществляется с помощью регистров управления TCCR1A и TCCR1B (рис. 15.2).
Значение необходимых для выполнения работы разрядов этих регистров будет описано далее. Неиспользуемые разряды регистров доступны только для чтения и содержат «0». Начальное значение (после сброса микроконтроллера) всех разрядов регистра – «0».
В частности, выбор источника тактового сигнала, а также запуск и остановка таймера/счетчика осуществляются с помощью разрядов CS12...CS10 регистра управления таймером TCCR1B. Соответствие между состоянием этих разрядов и режимом работы таймера/счетчика приведено в табл. 15.2.
Таблица 15.2
Выбор источника тактового сигнала для таймера/счётчика Т1
CS12 |
CS11 |
CS10 |
Источник тактового сигнала |
2 |
1 |
0 |
← Номера разрядов TCCR1B |
0 |
0 |
0 |
Таймер/счетчик остановлен |
0 |
0 |
1 |
СК (тактовый сигнал микроконтроллера) |
0 |
1 |
0 |
CK/8 |
0 |
1 |
1 |
СК/64 |
1 |
0 |
0 |
СК/256 |
1 |
0 |
1 |
СК/1024 |
В таймере предусмотрен режим контроля совпадения текущего значения отсчета с одним из двух заранее заданных значений. Если состояние таймера/счетчика становится равным числу, находящемуся в одном из регистров совпадения, то в следующем машинном цикле устанавливается соответствующий этому регистру флаг события в регистре TIFR (для регистра OCR1A – флаг ОСЕ1А, для регистра OCR1В – флаг OCF1B) и генерируется запрос на прерывание. Разрешение прерываний осуществляется установкой в «1» соответствующих флагов регистра TIMSK (OCIE1, либо OCIE1A и OCIE1B для регистров OCR1, OCR1A и OCR1B соответственно). Сигнал совпадения выводится в качестве альтернативной функции на один из выводов МК, обозначаемый ОС1А для регистра OCR1A и ОС1В для OCR1В. Управление характером переключения сигнала ведется разрядами TCCR1A и TCCR1В. Для регистра OCR1А при равенстве данных счетного регистра и регистра сравнения может выполняться сброс таймера/счетчика (при установке в «1» бита TCCR1B.3 – имя бита CTC1). Именно так и следует действовать, если необходимо задавать временной интервал цикла таймера (другой, менее удобный способ описан выше).
Каждый регистр сравнения физически размещается в двух регистрах ввода-вывода PBВ: OCR1A – OCR1AH: OCR1AL; OCR1B – OCR1BH:OCR1BL.
Реализованный в таймере режим захвата позволяет зафиксировать значение кода в счетном регистре в момент появления внешнего сигнала захвата, сохранив этот код в регистре захвата ICR1. В данной лабораторной работе он не исследуется.
Выполнение таймером своих функций отображается в регистре событий TIFR в значениях соответствующих битов (флагов) – табл. 15.3.
Таблица 15.3
Разряд |
Название |
Описание |
5 |
ICF1 |
Флаг устанавливается в «1» при загрузке содержимого таймера/счетчика в регистр ICR1 (событие «захват») |
4 |
ОСF1A |
Флаг устанавливается в «1» при совпадении значения таймера/ счетчика Т1 с содержимым регистра OCR1A (событие «совпадение A») |
3 |
ОСF1B |
Флаг устанавливается в «1» при совпадении значения таймера/ счетчика Т1 с содержимым регистра OCR1B (событие «совпадение B») |
2 |
TOV1 |
Флаг устанавливается в «1» при переполнении таймера/счетчика Т1 |
Каждый флаг этого регистра сбрасывается аппаратно при запуске подпрограммы обработки соответствующего прерывания или программно – записью в него лог. «1».
Для разрешения какого-либо прерывания от таймера необходимо установить в «1» соответствующий разряд регистра маски TIMSK1 (табл. 15.4) и, разумеется, флаг I регистра SREG.
Таблица 15.4
Разряд |
Название |
Описание |
5 |
TICIE1 |
Флаг разрешения прерывания по событию «Input Capture» («захват») таймера/счетчика Т1 |
4 |
ОСIЕ1A |
Флаг разрешения прерывания по событию «Compare Match A» («совпадение A») Т1 |
3 |
ОСIЕ1B |
Флаг разрешения прерывания по событию «Compare Match B» («совпадение B») Т1 |
2 |
ТОIЕ1 |
Флаг разрешения прерывания по переполнению таймера-счетчика Т1 |
Для выполнения перечисленных функций каждый таймер использует один или более выводов МК. Как правило, эти выводы – линии портов ввода/вывода общего назначения, а функции, реализуемые этими выводами при работе совместно с таймерами/счетчиками, являются их альтернативными функциями. В этих случаях необходимо предварительно самостоятельно сконфигурировать эти выводы в соответствии с их функциональным назначением (выход или вход с/без подтягивающего резистора).