- •«Инструментальные средства разработки аппаратно-программных систем»
- •Оглавление
- •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
Таймер/счетчик т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
Седьмой разряд регистра TCCR0 – FOC0 – принудительное изменение состояния вывода 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).