- •«Инструментальные средства разработки аппаратно-программных систем»
- •Оглавление
- •7 Инструментальные средства разработки систем управления на
- •Введение. Управляющие системы на микроконтроллерах.
- •Характеристика микроконтроллеров семейства avr
- •1.1 Особенности микроконтроллеров
- •1.2 Характеристики микроконтроллера aTмega16
- •1.3 Условное графическое обозначение микроконтроллера
- •2 Архитектура микроконтроллера
- •2.1 Структура микроконтроллера
- •2.2 Организация программной памяти
- •Организация памяти данных
- •2.4 Арифметико-логическое устройство и регистр состояния процессора
- •Методы адресации. Форматы команд
- •Система команд
- •2.6.1 Команды передачи данных (пересылки)
- •2.6.2 Команды передачи управления
- •2.6.3 Команды арифметики и логики (вычислительные)
- •2.6.4 Команды сдвигов и операций с битами
- •2.7 Функционирование конвейера
- •3 Встроенные устройства
- •3. 1 Параллельные порты ввода/вывода
- •Подсистема прерываний микроконтроллера
- •Регистр флагов прерываний таймеров/счетчиков – tifr
- •Таймеры/счетчики
- •Общие сведения
- •Таймер/счетчик т0.
- •3.3.3 Таймер/счетчик т1.
- •Сторожевой таймер (Watchdog Timer).
- •3.4 Последовательные интерфейсы -spi и uart
- •3.4.1 Последовательный периферийный интерфейс - spi
- •3.4.2 Uart - универсальный последовательный порт
- •3.5 Аналоговый компаратор и ацп
- •3.5.1 Аналоговый компаратор
- •3.5.2 Аналого-цифровой преобразователь
- •3.6 Энергонезависимая память данных
- •4 Ассемблер микроконтроллеров avr
- •5 Взаимодействие микроконтроллера с объектом управления
- •5.1 Формирование временных интервалов (задержек)
- •5.1.1 Программный способ формирования временных интервалов
- •Ext_l: ldi r17, X ;х – число внутренних циклов
- •Ext_l: ldi r17, 53 ;Загрузка в r17 константы внутреннего цикла
- •5.2 Генерация импульсных сигналов управления с использованием программных задержек
- •5.2.1 Генерация последовательности импульсов с использованием программных задержек
- •5.2.2 Генерация пакета импульсов
- •5.2.3 Генератор заданного числа пакетов импульсов
- •Формирование импульсных сигналов управления с использованием таймеров микроконтроллера
- •5.4 Ожидание внешних событий
- •5.5 Обработка динамического дисплея
- •5.6 Особенности схемы дисплея в учебной системе управления.
- •5.7 Часы
- •5.8 Измерение временных параметров импульсов
- •5.9 Обработка клавиатуры
- •6 Программирование микроконтроллеров aТmega16
- •7 Инструментальные средства разработки сисТем управления на микроконтроллерах aTmega16
- •Дубров ф.И. Встроенные системы управления на микроконтроллере aTmega16
3.3.3 Таймер/счетчик т1.
Физически 16-разрядный таймер/счетчик Т1 состоит из двух 8-разрядных счетчиков TCNT1H и TCNT1L. Таймер/счетчик Т1, кроме режимов счетчика и таймера, имеет режим захвата и 15 режимов совпадения (сравнения). Часть режимов сравнения называют режимами генератора импульсов с широтно-импульсной модуляцией (ШИМ).
В режиме счетчика таймером/счетчиком Т1 производится счет внешних импульсов со входа Т1 (альтернативное имя контакта порта PIND.1). Изменение состояния Т1 может производиться по фронту или по срезу входного импульса.
В режиме таймера таймером/счетчиком Т1 производится счет импульсов, поступающих от тактового генератора микроконтроллера через делитель частоты с программно устанавливаемым коэффициентом деления. В любом из этих режимов при переполнении Т1 устанавливается флаг прерывания по переполнению и может быть вызвана подпрограмма прерывания по переполнению Т1.
Структурная схема таймера/счетчика Т1 приведена на рис.24.
РЕЖИМ ЗАХВАТА используется для измерения временных параметров сигналов: периода, длительности и временного сдвига импульсов.
В режиме захвата по входу обеспечивается аппаратная загрузка текущего содержимого Т1 в 16-разрядный регистр захвата ICR1 по фронту или по срезу входного (внешнего) импульса на входе захвата микроконтроллера ICP(PIND6). По схеме: фронтом или срезом импульса от входа ICP производится запись содержимого TCNT1 в регистр захвата. Этот же сигнал захвата может вызвать подпрограмму прерывания по захвату (устанавливается флаг ICF1). Условия захвата определяются битами ICES1 и ICNC1 регистра управления TCCR1B. Если ICES1=0, то захват производится срезом, иначе - фронтом импульса на входе захвата. Если ICNC1=0, то включен подавитель помех – захват производится на четвертый фронт или срез импульса на входе захвата ICP .
Рисунок 24
РЕЖИМЫ СРАВНЕНИЯ таймера Т1 используются в управляющих системах на микроконтроллерах для генерации импульсных сигналов с заданными значениями временных параметров: частоты следования, периода, длительности. В режиме сравнения текущее содержимое работающего таймера в цифровых компараторах COMPARATOR А и COMPARATOR B сравнивается с содержимым специальных 16-разрядных регистров сравнения OCR1A и OCR1В. При равенстве значений таймера и соответствующего регистра сравнения может изменяться состояние (0←1 или 1←0) соответствующего выхода сравнения микроконтроллера OC1A или OC1B (альтернативные имена разрядов PIND,5 и PIND,4).
Кроме этого в момент совпадения устанавливается соответствующий флаг прерывания по совпадению таймера/счетчика Т1 (OCF1A или OCF1B) и может быть вызвана соответствующая подпрограмма прерываний.
Управление таймером/счетчиком Т1 производится с помощью регистров TCCR1A и TCCR1B. Их форматы приведены на рисунках 25 и 26.
Выбор источника входных импульсов для таймера/счетчика Т1, а также остановка/пуск его, определяется разрядами CS02 – CS00, в соответствии с таблицей 22 (по аналогии с управлением с таймером Т0).
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
СOM1A1 |
COM1A0 |
COM1B1 |
COM1B0 |
FOC1A |
FOC1B |
WGM11 |
WGM10 |
Рис.25 Формат регистра TCCR1A
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
ICNC1 |
ICES1 |
- |
WGM13 |
WGM12 |
CS12 |
CS11 |
CS10 |
Рис. 26 Формат регистра TCCR1В
Разряды WGM13 - WGM10 регистров TCCR1А и TCCR1В определяют все режимы совпадения Т1 в соответствии с таблицей 21.
Таблица 21 Режимы совпадения Т1
Номер режима |
WGM13 |
WGM12 |
WGM11 |
WGM10 |
Режим работы |
Модуль счета Т1 |
0 |
0 |
0 |
0 |
0 |
Normal |
FFFF |
1 |
0 |
0 |
0 |
1 |
Точная фаза PWM, 8-разрядный, реверсивный |
00FF |
2 |
0 |
0 |
1 |
0 |
Точная фаза PWM, 9-разрядный, реверсивный |
01FF |
3 |
0 |
0 |
1 |
1 |
Точная фаза PWM, 10-разрядный, реверсивный |
03FF |
4 |
0 |
1 |
0 |
0 |
СТС (сброс при совпадении) |
OCR1A |
5 |
0 |
1 |
0 |
1 |
Быстрый PWM, 8-разрядн. |
00FF |
6 |
0 |
1 |
1 |
0 |
Быстрый PWM, 9-разрядн. |
01FF |
7 |
0 |
1 |
1 |
1 |
Быстрый PWM, 10-разрядн. |
03FF |
8 |
1 |
0 |
0 |
0 |
Точные фаза и частота PWM, реверсивный |
ICR1 |
9 |
1 |
0 |
0 |
1 |
Точные фаза и частота PWM, реверсивный |
OCR1A |
10 |
1 |
0 |
1 |
0 |
Точная фаза PWM, реверсивный |
ICR1 |
11 |
1 |
0 |
1 |
1 |
Точная фаза PWM, реверсивный |
OCR1A |
12 |
1 |
1 |
0 |
0 |
СТС (сброс при совпадении) |
ICR1 |
13 |
1 |
1 |
0 |
1 |
Не используется |
- |
14 |
1 |
1 |
1 |
0 |
Быстрый PWM |
ICR1 |
15 |
1 |
1 |
1 |
1 |
Быстрый PWM |
OCR1A |
Таблица 22 Выбор источника тактовых импульсов для таймера Т1
CS02 |
CS01 |
CS00 |
Описание |
0 |
0 |
0 |
Таймер/счетчик 1 остановлен |
0 |
0 |
1 |
Коэффициент деления 1 |
0 |
1 |
0 |
Коэффициент деления 8 |
0 |
1 |
1 |
Коэффициент деления 64 |
1 |
0 |
0 |
Коэффициент деления 256 |
1 |
0 |
1 |
Коэффициент деления 1024 |
1 |
1 |
0 |
Режим счетчика, переключение по срезу |
1 |
1 |
1 |
Режим счетчика, переключение по фронту |
Таблица 23 Выбор управления выводами OC1A и OC1B в режимах сброса по совпадению (режимы 4 и 12)
СОМ1А(В)1 |
СОМ1А(В)0 |
Описание |
0 |
0 |
Таймер/счетчик 1 отключен от выхода ОС1А(В) |
0 |
1 |
Переключение выходной линии ОС1А(В) |
1 |
0 |
Вывод ОС1А(В) сбрасывается в “0” |
1 |
1 |
Вывод ОС1 А(В) устанавливается в “1” |
Таблица 24 Управление выводами OC1A и OC1B в режимах генераторов
ШИМ
СОМ1А1 (СОМ1B1) |
СОМ1А0 (СОМ1B1) |
Описание |
0 |
0 |
Таймер/счетчик 1 отключен от вывода ОС1A(B) |
0 |
1 |
Переключение выходной линии ОС1A(B) при WGM13=1 и Т1 отключен от вывода ОС1А(В) при WGM13=0 |
1 |
0 |
Установка нуля на выводе ОС1A(B) при совпадении в суммирующем режиме TCNT1 – неинвертируемый ШИМ |
1 |
1 |
Установка единицы на выводе ОС1A(B) при совпадении в суммирующем режиме TCNT1 – инвертируемый ШИМ |
Биты СОМ1А1, СОМ1А0 и СОМ1В1, СОМ1В0 определяют характер сигнала на выходах совпадения ОС1А и OC1B соответственно при равенстве Т1 и OCR1A(OCR1B). Коды управления представлены в таблицах 23 и 24.
Режим Normal. В этом режиме Т1 работает как 16-разрядный суммирующий счетчик. При равенстве содержимого Т1 и какого-либо регистра сравнения OCR1A или OCR1B устанавливается соответствующий флаг прерывания по совпадению OCF1A или OCF1B, может вызываться соответствующая подпрограмма обработки прерывания, а также может измениться значение выхода совпадения микроконтроллера: разряды PIND.5/ OC1A или PIND.4/OC1B. При переполнении Т1 (когда значение в Т1 изменяется от 65535=216-1 до нуля) устанавливается флаг прерывания по переполнению TOV1 и может быть вызвана соответствующая подпрограмма прерывания. После переполнения таймера Т1 начинается следующий цикл счета его.
Режимы СТС (сброс по совпадению). В режиме №4 работа Т1 аналогична работе в режиме Normal, но при совпадении содержимого Т1 и регистра совпадения OCR1A таймер Т1 обнуляется, т.е. модуль счета таймера Т1 определяется значением в регистре совпадения OCR1A. Далее в таймере Т1 начинается новый цикл счета. При обнулении Т1 устанавливаются флаги прерываний по совпадению OCF1A и по переполнению TOV1. Кроме того, при совпадении может изменяться состояние выхода совпадения ОС1А (разряд PIND.5).
В режиме №12 сравнение значения Т1 производится со значением в регистре захвата ICR1. При равенстве Т1=ICR1 устанавливается флаг ICF1 и может измениться PIND.4. В остальном, этот режим аналогичен режиму №4.
Все остальные режимы являются режимами генератора широтно-импульсно модулированного сигнала.
РЕЖИМЫ ГЕНЕРАТОРА ШИМ (PWM) используются для управления двигателями, в качестве узла специальных АЦП, для формирования аналогового сигнала и др. Режимы генератора широтно-импульсно-модулированного сигнала (ШИМ) отличаются тем, что модуль счета Т1 может быть постоянным (режимы 1 и 5 – константа FF, режимы 2 и 6 – константа 1FF, режимы 3 и 7 – константа 3FF) и программно устанавливаемым, т.е. равным содержимому регистров OCR1A или ICR1 (режимы 8,9,10,11,14,15). Иначе, максимальное значение таймер Т1 может быть либо константой, либо задаваться значением в регистре ICR1 или OCR1A.
Во всех этих режимах при достижении таймером/счетчиком значения, равного содержимому регистра OCR1A(ICR1) или константе счета, производится либо сброс Т1 (режимы 5,6,7,14,15), либо переключение в сторону обратного счета (режимы 1,2,3,8,9,10,11 ). Иначе, таймер/счетчик Т1 может быть суммирующим или реверсивным. В режимах 1,2,3,8,9,10,11 таймер/счетчик Т1 работает как реверсивный счетчик. Сначала он работает как суммирующий счетчик. При достижении таймером/счетчиком максимального значения, он переключается в вычитающий режим и его состояния при счете уменьшаются до нуля. Затем он снова переключается в суммирующий режим и т.д. .
Во всех режимах ШИМ выполняется сравнение текущего значения Т1 со значениями в регистрах сравнения OCR1A и OCR1B. В режимах 1,2,3,8,9,10,11 при равенстве значений в таймере Т1 и регистре сравнения на соответствующем выводе ОС1А или ОС1В (альтернативные имена 5-го и 4-го разрядов порта D) может устанавливаться единичный уровень (фронт импульса) или нулевой уровень (срез импульса). В режимах 5,6,7,14,15 Т1 функционирует как суммирующий счетчик. Выход ОС1А (ОС1В) может изменять состояние при совпадении TCNT1=OCR1A(OCR1B) и при переполнении таймера/счетчика, т.е. при переходе значения от максимального значения к нулевому.
Напоминаем, что ШИМ-сигнал выводится на контакт порта PIND.5(PIND.4), а не в соответствующий разряд регистра PORTD.
Возможны два вида сигнала ШИМ: инвертирующий и неинвертирующий. При инвертирующем сигнале ШИМ вывод ОС1А (ОС1В) устанавливается в единичное состояние, при равенстве значений, при увеличении значений счетчика и в нулевое состояние по уменьшению счетчика для режимов, в которых Т1 работает как реверсивный счетчик. При неинвертирующем сигнале ШИМ вывод ОС1А (ОС1В) сбрасывается в нулевое состояние, при равенстве значений, по нарастанию значений в Т1 и устанавливается в единичное состояние при равенстве значений по убыванию значений в Т1.
Режимы Точной фазы и частоты (№8 и №9). В режиме №8 таймер-счетчик Т1 работает как реверсивный счетчик (рисунок 28). После запуска Т1 работает в суммирующем режиме. При достижении таймером Т1 значения, равного значению в регистре ICR1, таймер Т1 переключается в вычитающий режим и продолжает счет импульсов от тактового генератора. При достижении значения равного нулю, Т1 снова переключается в суммирующий режим. Формируется так называемая “цифровая пила”. Во время счета импульсов таймером в компараторе Comparator А производится сравнение значений таймера-счетчика и регистра сравнения OCR1A. При равенстве значений Т1 и OCR1A разряд порта OC1A (PIND.5) может переключаться в инверсное состояние.
Если при совпадении значений в суммирующем режиме работы Т1 разряд порта OC1A установился в единичное состояние, а при совпадении значений в вычитающем режиме работы он устанавливается в нулевое состояние, то такой сигнал называют инвертированным ШИМ.
Если при совпадении значений в суммирующем режиме работы Т1 разряд порта OC1A устанавливается в нулевое состояние, при совпадении значений в вычитающем режиме работы он устанавливается в единичное состояние, то такой сигнал называют неинвертированным ШИМ.
На графике а) рисунка 28 приведены импульсы на входе Т1, которые поступают от тактового генератора через делитель частоты; на графике b) представлены значения Т1; импульсы ШИМ представлены графиками c) и d).
Вид сигнала ШИМ инвертированный или неинвертированный устанав-
ливается разрядами СОМ1А1 и СОМ1А0 регистра TCCR1A (таблица 23).
Очевидно, что длительность импульсов может быть изменена изменением значения в регистре совпадения, а частота следования – изменением значения в регистре ICR1. Также очевидно, что длительности импульса, паузы и
Рисунок 28
периода в периодах импульсов на входе Т1:
Nи = 2*(ICR1 – OCR1A); Nп = 2*OCR1A ; NT = 2*ICR1.
Из этих формул можно получить значения регистров OCR1A и ICR1 по заданным значениям параметров сигнала ШИМ в периодах импульсов на входе Т1(Nи и Nп).
OCR1A = Nп /2; ICR1 = (Nи +N п)/2.
При использовании делителя частоты импульсов на входе таймера Т1, следует учесть коэффициент деления делителя К. С учетом этого расчет значений в регистрах по заданным значениям параметров импульсов в единицах времени следует выполнять по формулам:
OCR1A = tп / 2*(T такт *К); ICR1 = (tи +t п) / 2*( T такт *К), где:
T такт - период тактовой частоты микроконтроллера.
Частота сигнала ШИМ определяется выражением:
F=fclk / 2*К* ICR1; где:
fclk – частота тактового генератора микроконтроллера;
К – коэффициент деления частоты входного предделителя;
В режиме № 9 работа Т1 аналогична работе в режиме №8, но сравнение значения Т1 производится со значением в регистре OCR1B, модуль счета Т1 определяется регистром OCR1A и импульсы ШИМ формируются на выводе OC1B(PIND.4).
В режимах 8 и 9 по команде загрузки любого из регистров OCR1A, OCR1B или ICR1 новым значением, оно помещается в специальный буферный регистр. В соответствующий регистр сравнения значение помещается из буфера когда Т1=0, а не в момент выполнения команды вывода в регистр. Тем самым отсутствуют искажения как частоты, так и скважности ШИМ-сигнала при изменении его параметров.
Режимы быстрой ШИМ №№5,6,7,14,15.
В этих режимах Т1 работает как суммирующий счетчик.
На рис.29 представлены временные диаграммы работы таймера Т1 в режиме 14.
Рисунок 29
Формирование сигнала ШИМ происходит следующим образом.
Предварительно в регистры OCR1A и ICR1 загружены значения, определяющие параметры импульсов и включается Т1. С приходом каждого
импульса его содержимое увеличивается на 1. Содержимое таймера сравнивается со значением в регистрах OCR1A и ICR1. Когда Т1 = OCR1A на выводе PIND.5 устанавливается единица для инвертируемого сигнала ШИМ или ноль для неинвертируемого ШИМ и устанавливается флаг прерывания по совпадению OCF1A. Таймер продолжает счет далее. При наступлении равенства Т1 = ICR1 таймер сбрасывается, на выходе PIND.5 устанавливается уровень нуля (срез импульса) и устанавливается флаг прерывания по переполнению TOV1. Таймер продолжает счет от нулевого значения и т.д. .
Загрузка регистров OCR1A и ICR1 из буфера производится в момент, когда значение в Т1 максимальное.
В режиме 15 сравнение производится с регистром OCR1В, ШИМ-сигнал формируется на выходе ОС1В, а модуль счета в регистре OCR1А.
Очевидно, что в этих режимах частота сигнала ШИМ в 2 раза больше, чем в режимах с реверсивным таймером. Поэтому эти режимы называют режимами “быстрый ШИМ”.
Для расчета значений регистров используются очевидные формулы:
OCR1A = [tп / (T такт *К)] - 1; ICR1 = [(tи +t п)/( T такт *К)] - 1, где:
T такт - период тактовой частоты микроконтроллера.
Частота сигнала ШИМ определяется выражением:
F=fclk / К* ICR1; где:
fclk – частота тактового генератора микроконтроллера;
К – коэффициент деления частоты входного предделителя;
В режимах 5,6 и 7 коэффициент счета таймера Т1 равен соответствующей константе (см. таблицу 24).
Режимы Точной фазы №№ 1,2,3,10,11.
В этих режимах Т1 работает как реверсивный счетчик. Формирование сигнала ШИМ в режиме 10 происходит следующим образом. С приходом каждого импульса его содержимое увеличивается на 1. Содержимое таймера сравнивается со значением в регистрах OCR1A и ICR1. Когда Т1 = OCR1A на выводе PIND.5 устанавливается единица (формируется фронт импульса для неинвертируемого ШИМ). Таймер продолжает счет далее. При наступлении равенства Т1 = ICR1 таймер переключается в вычитающий режим и далее его содержимое уменьшается на 1 по приходу каждого импульса. Когда снова достигается равенство Т1 = OCR1A на выходе PIND.5 устанавливается уровень нуля (срез импульса). Таймер продолжает счет. При достижении нулевого значения таймер переключается в суммирующий режим и т.д. . Иначе, формирование импульсов ШИМ производится аналогично режиму № 8.
В режимах 1,2,3 максимальное значение таймера Т1 является фиксированным (режим 1 – константа FF, режим 2 – константа 1FF, режим 3 – константа 3FF.
В режиме № 11 работа Т1 аналогична работе в режиме №10, но сравнение значения Т1 производится со значением в регистре OCR1B, модуль счета Т1 определяется регистром OCR1A и импульсы ШИМ формируются на выводе OC1B(PIND.4).
При загрузке регистров сравнения новым значением, оно предварительно помещается в буферный регистр. В режимах 1,2,3,10 и 11 пересылка нового значения из буферного регистра в регистр сравнения производится в момент, когда содержимое таймера/счетчика становится равным максимальному.
Особенности записи в таймер/счетчик Т1, регистр сравнения OCR1 и регистр захвата ICR1. Разрядность каждого из этих регистров равна 16. Физически каждый из них состоит из двух регистров. В адресном пространстве ввода-вывода адресуются 8-битные регистры старших (TCNT1H, OCR1H, ICR1H) и младших (TCNT1L, OCR1L, ICR1L) разрядов. Запись 16-разрядного значения в Т1, OCR1 или ICR1 производится двумя командами, а для того чтобы запись в таймер/счетчик, регистр совпадения и регистр захвата происходила одновременно, используется программно недоступный регистр TEMP. Схема построена так, что при записи младшего байта он загружается непосредственно в регистр младших разрядов (например, в TCNT1L), а в регистр старших разрядов (например, TCNT1H) помещается значение из программно недоступного регистра TEMP. Таким образом, при записи 16-разрядного значения первым должен записываться старший байт в регистр старших разрядов TCCR1H, OCR1H или ICR1H (байт помещается в регистр ТЕМР), а следующей командой записывается младший байт в TCNT1L, OCR1L или ICR1L и одновременно содержимое ТЕМР (старший байт) помещается в соответствующий регистр старших разрядов.
Так как регистр ТЕМР один, то во избежание неправильной записи, перед записью в любой из 16-разрядных регистров должны быть запрещены прерывания, содержащие обращения к этим регистрам.
Особенности чтения таймера/счетчика Т1, регистра сравнения OCR1 и регистра захвата ICR1. При чтении младшего байта из 16-разрядного регистра данные считываются из всего регистра одновременно, однако младший байт помещается в место определенное командой, а старший байт помещается в регистр ТЕМР. Следующей командой чтения из регистра старших разрядов считывается старший байт 16-разрядного регистра из регистра ТЕМР.