
- •«Встроенные системы на микроконтроллере Atmega16»
- •Оглавление
- •Введение. Управляющие системы на микроконтроллерах.
- •Характеристика микроконтроллеров семейства 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 Понятия о языках программирования микроконтроллеров
- •4.1 Язык Ассемблер
- •4.2 Язык си
- •4.2.1 Типы данных, объявление данных
- •4.2.2 Операторы
- •4.2.3 Функции
- •4.2.4 Оператор if-else (ветвления )
- •{Группа операторов 1}
- •Пример:
- •4.2.5 Оператор switch
- •4.2.6 Операторы циклов
- •Оператор цикла for
- •Тело цикла
- •Оператор while
- •Операторы тела цикла
- •4.2.7 Указатели
- •4.2.8 Директивы препроцессора
- •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 Обработка клавиатуры
- •Дубров ф.И. Встроенные системы управления на микроконтроллере aTmega16
5 Взаимодействие микроконтроллера с объектом управления
5.1 Формирование временных интервалов (задержек)
В подавляющем большинстве встроенными блоками управления на микроконтроллерах производится управление объектами в реальном времени, поэтому точные временные интервалы являются важными элементами программного обеспечения встроенных систем управления.
Для формирования задержек используется либо программный метод, либо аппаратный с использованием таймеров/счетчиков микроконтроллера.
Основным параметром при расчете временных интервалов является такт – период импульсов тактового генератора микроконтроллера.
Если частота тактового генератора Fтакт равна 16 мГц, то длительность такта составляет:
Ттакт=1/ Fтакт = 1/16*10-6 Гц = 2-4 * 10-6 сек.
Для определения задержки в единицах времени, например в секундах, необходимо перемножить значение задержки в тактах на величину периода тактовой частоты микроконтроллера или умножить на значение тактовой частоты:
tsek=N * Tтакт или tsek=N / Fтакт .
Отсюда можно получить значение задержки в тактах N:
N= tsek * F. (1)
5.1.1 Программный способ формирования временных интервалов на языке Ассемблер
Временные интервалы в пределах нескольких тактов организуются с помощью команд NOP. По этой команде не выполняется никакой операции, но время выполнения этой команды составляет 1 такт (период частоты) тактового генератора микроконтроллера.
Для формирования больших временных интервалов используются программные циклы. Временная задержка с использованием программных циклов осуществляется загрузкой соответствующего значения в регистр и цикл, в котором производится вычитание 1 из содержимого регистра и переход на эту же команду, если содержимое регистра не равно нулю. При использовании регистра R16, процедура имеет вид:
LDI R16, X ; Х – число, определяющ. длит.задержки
LOOP: DEC R16 ; R16 -1 и может установиться флаг нуля ; (Z)
BRNE LOOP ; если Z=0 (регистр не пуст), то переход.
;иначе будет выполн. следующая команда
Время выполнения команд:
LDI – 1 такт,
DEC – 1 такт,
BRNE LOOP – 2 такта при переходе и 1 такт в последнем цикле.
Длительность каждого цикла, кроме последнего, составляет 3 такта (один такт команды DEC и два такта команды BRNE). Длительность последнего цикла составляет два такта, так как в нем команда BRNE выполняется за один такт (из памяти уже считана последующая команда).
Получим формулу длительности задержки в тактах:
N = 1+3*(X-1)+1+1, или N = 3X, тактов (2)
Если задержка выполнена в виде подпрограммы, то, учитывая время выполнения команды вызова подпрограммы RCALL (3 такта) и возврата из подпрограммы RET(4 такта), получим формулу для временного интервала в тактах:
N = 3*X+7, тактов. (3)
Из этой формулы может быть определено значение X.
Так как максимальное значение в регистре равно 255, то максимальная задержка составляет 3*255 + 7 = 772 такта.
Пример1 Рассчитать значение константы задержки Х для формирования временного интервала в тактах N = 402.
Подставляем в формулу: N = 3*X+7. 402=3*Х+7 или 395=3*Х.
Так как 395 не делится в целое число раз на 3, то выбираем ближайшее целое, чтобы получилось деление без остатка.
393 = 3*Х. Отсюда: Х=131.
Так как было произведено уменьшение, то очевидно что время задержки уменьшится на 2 такта. Для получения заданного значения временного интервала необходимо добавить две команды NOP. Подпрограмма задержки (имя которой DELAY) будет иметь вид:
DELAY: LDI R16, 131 ; 131– число, определяющ. длит.задержки
LOOP: DEC R16 ; R16 -1 и может устанавиться флаг нуля Z
BRNE LOOP ; если Z=0 (регистр не пуст), то переход,
;иначе выполн. следующ. команда
NOP
NOP
RET ;Выход из подпрогр. задержки
Для задержек больше 772 тактов используется процедура вложенных циклов. При использовании регистров R16 и R17 подпрограмма имеет вид:
DELAY: LDI R16, Y ;Y –число внешних циклов