Изучение методов управления портами ввода-вывода микроконтроллера
создание документов онлайн
Документы и бланки онлайн

Обследовать

Администрация
Механический Электроника авиация автомобиль сооружения
биологии
география
дом в саду
история
литература
маркетинг
математике
медицина
музыка
образование
психология
разное
художественная культура
экономика




















































Изучение методов управления портами ввода-вывода микроконтроллера

Механический Электроника


Отправить его в другом документе Tab для Yahoo книги - конечно, эссе, очерк Hits: 1043


дтхзйе дплхнеофщ

Давление под искривленной поверхностью жидкости
Кiдiaый замiк
ТЕОРИЯ СПЛАВОВ
Длительная прочность и долговечность
КЛАССИФИКАЦИЯ СТАЛИ
Простой искатель скрытой проводки
Электрошокер
Обслуживания и управления тормозами в поездах повышенного веса и длины
Потребительская корзина радиолюбителя
Последовательное соединение сопротивлений
 

Изучение методов управления портами ввода-вывода микроконтроллера

Цель работы: Освоение программных средств и аппаратурного обеспечения эксперимента. Изучение возможностей портов ввода-вывода микроконтроллера, таймера микроконтроллера. Разработка схемы подключения и программы управления светодиодами с помощью микроконтроллера.

Оборудование:

1.     Лабораторный стенд с микроконтроллером ATmega8335.

2.     Программатор.

3.     Специализированное программное обеспечение.

Продолжительность работы:4 часа.



Теоретическая часть

Микроконтроллер (MCU или МК) — микросхема (рис.1), предназначенная для управления электронными устройствами. Типичный микроконтроллер сочетает в себе функции процессора и периферийных устройств, может содержать ОЗУ и ПЗУ. По сути, это однокристальный компьютер, способный выполнять простые задачи. Использование одной микросхемы, вместо целого набора, как в случае обычных процессоров, применяемых в персональных компьютерах, значительно снижает размеры, энергопотребление и стоимость устройств, построенных на базе микроконтроллеров.

Рисунок 1.  Микроконтроллер ATmega

Микроконтроллеры являются основой для построения встраиваемых систем, их можно встретить во многих современных приборах, таких, как телефоны, стиральные машины и т. п. Бо́льшая часть выпускаемых в мире процессоров — микроконтроллеры.

Микроконтроллеры семейства AVR имеют единую базовую структуру. Обобщенная структурная схема МК изображена на рис.  2.

Рисунок 2. Обобщенная структурная схема МК AVR.

Архитектура контроллера AVR.

Контроллер состоит из системы из вычислительного блока (ALU), регистров, оперативной памяти, памяти программ и периферийных устройств. Во многих современных контроллерах также есть EEPROM (энергонезависимая память). Все это связано общей шиной, собрано на одном кристалле (рис. 3).

ALU занимается всеми операциями процессора, сложениями, вычитаниями, сдвигами и прочим. Это математическое ядро контроллера. Операнды на вход ALU поступают из регистров общего назначения (РОН), а результат появляется на шине и обрабатывается в соответствии с текущей командой.

Блок регистров (РОН), он же регистровый файл. Это пачка из 32 ячеек памяти по 8 бит каждая. Отличаются высокой скоростью работы, а также с ними производятся почти все процессорные операции.

Память программ, она же flash, она же ROM память. Это то место где хранится код твоей программы, а также разные статичные данные. Особенность контроллеров AVR (впрочем, как и многих других микроконтроллеров) в том, что память программ и память данных у них жестко разделены и находятся в разных адресных пространствах.

Оперативная память, или память данных состоит из восьмиразрядных ячеек, способных содержать любое значение. Используются нами по своему усмотрению. Так же тут находится специальная область памяти - стек. Эта память в основном хранит в себе адреса возвратов из подпрограмм, а при использовании высокоуровневых языков, то через стек передаются еще и аргументы для вызываемых функций.

EEPROM или энергонезависимая память. Представляет из себя множество восьми разрядных ячеек памяти, способных сохранять свое значение после выключения питания процессора и хранить его много лет. Используется, например, для хранения собранной информации. Можно использовать как оперативку, но запись в нее осуществляется довольно медленно, а главное число циклов перезаписи порядка 100 000 раз, что не слишком много, если пользоваться ей десятки и сотни раз в секунду.


Рисунок 3. Архитектура микропроцессора ATmaga 8535.

Периферийные устройства. Это в первую очередь порты, как последовательные, так и параллельные через которые микроконтроллер общается с внешним миром. Также сюда относятся таймеры, счетчики, генераторы сигналов, аналого-цифровые преобразователи. Важная особенность периферийных устройств в том, что они работают независимо от центрального ядра. Т.е. запустив один раз таймер, он считает временной интервал, а в это время сама программа занимается совсем другими делами. Обращение к периферии происходит через их конфигурационные регистры. Они же порты I/O. Логически они расположены в адресном пространстве сразу же после регистрового файла, а обращаться к ним можно посредством специальных команд OUT и IN, на запись и на чтение, соответственно.

Кроме того, периферия может выдавать прерывания. Это своего рода управляющее воздействие на процессор, заставляющее его остановить выполнение программы и начать обрабатывать код, отвечающий за прерывания. После обработки прерывания процессор возвращается к своей основной программе, в то же место, откуда прервался.

Проектирование реальной схемы устройств на основе микропроцессора немыслимо без определения конкретной модели МК и выбора типа корпуса МК.  МК различаются по корпусам PLCC, TQFP, PDIP и д.р. (рис.4).

Для упрощения методики освоения проектирования устройств и  изучения работы МК в данной работе будет применяться корпус DIP40.

Параллельные порты ввода-вывода

Число параллельных портов ввода-вывода, суммарное число выводов портов и суммарное число выводов, выполняющих альтернативные функции, у микроконтроллеров разных типов указано в табл. 1 в ко­лонках Р I/O и ALT соответственно.

В табл. 2 приведены имена портов и указано число выводов (в числителе) и число выводов, выполняющих альтернативные функции (в знаменателе) для каждого порта в отдельности.

В состав порта РХ (X =• А, В, С, D, Е) входят три регистра ввода-вывода с именами DDRX, PORTX и PINX. Регистр PINX не имеет аппаратной реализации. Это имя используется в командах, по которым выполняется чтение байтов на выводах порта.

Число разрядов в регистрах равно числу выводов порта.

Рисунок 4. Типы корпусов ATmega 8535

Таблица 1.

Таблица 2.

На рис 5. изображена структурная схема разряда Y (Y-0, 1, ..., 7) порта РХ.

Рисунок 5. Структурная схема разряда порта ввода-вывода.

Состояние разряда DDRX.Y определяет направление передачи бита через вывод порта PX.Y. При DDRX.Y = 0 вывод PX.Y работает в режиме входа, при DDRX.Y = 1 — в режиме выхода.

В режиме входа состояние разряда PORTX.Y определяет состояние вывода PX.Y. При PORTX.Y - 0 вывод находится в высокоимпедансном состоянии (Z-состояние), при PORTX.Y - 1 вывод порта через внутренний резистор с сопротивлением 30—120 кОм подключается к шине VCC. В режиме входа вывод PX.Y соединен с шиной данных ШД.Y.

Значение входного сигнала на отдельном выводе порта может быть определено с использованием команд условного перехода с мнемокодом SBIC PINX, Y или SBIS'PINX, Y. При одном значении сигнала выбирается одно продолжение программы, при другом значении сигнала — другое продолжение.

В режиме выхода разряд PORTX.Y определяет значение выходного сигнала на выводе PX.Y. При PORTX.Y - 0 выходной сигнал имеет низкий уровень напряжения (U0L), при PORTX.Y = 1 — высокий уровень напряжения (U0H).

В табл. 3 указано состояние вывода порта PX.Y при различных комбинациях состояний разрядов DDRX.Y и PORTX.Y.

Таблица 3.

В статическом состоянии при низком уровне выходного сигнала ток нагрузки OL должен быть не более, чем 20 мА, при высоком уровне сигнала ток нагрузки OH должен быть не более, чем 3 мА. При этом суммарный ток нагрузки для всех выводов микроконтроллера должен быть не более, чем некоторое пороговое значение (200-400 мА для микроконтроллеров разных типов) и суммарный ток нагрузки для выводов микроконтроллера, расположенных на одной стороне корпуса микросхемы, также должен быть не более, чем некоторое пороговое значение (100—200 мА для микроконтроллеров разных типов).

Задание значения выходного сигнала на отдельных выводах порта выполняется с использованием команд с мнемокодами CBI PORTX, Y (для низкого уровня) и SBI PORTX, Y для высокого уровня.

При совместном использовании всех разрядов порта для приема и выдачи байтов используются команды с мнемокодами IN Rd, PINX и OUT PORTX, Rr соответственно.

Обращение к параллельному порту для приема и выдачи байтов может быть выполнено с использованием команд с обращением по адресам в адресном пространстве SRAM.

При пуске и перезапуске микроконтроллера все разряды регистров DDRX и PORTX всех портов сбрасываются в нулевое состояние и вы­воды портов работают в режиме входов и находятся в Z состоянии.

Таймеры- счетчики общего назначения

Таймер-счетчик Т/СХ (X - 0. 1, 2 — цифра в имени таймера-счетчика) любого типа содержит базовый счетчик TCNTX, имеющий восемь или шестнадцать разрядов, и восьмиразрядный регистр управления TCCRX. Кроме того, в состав таймера-счетчика входят один или несколько раз­рядов регистра запросов, прерывания TIFR  и столько же разрядов регистра маскирования прерываний TIMSK Регистры TIFR и TIMSK являются общими для всех таймеров-счетчиков микроконтроллера.

Разряд регистра TIFR устанавливается в единичное состояние при формировании в таймере-счетчике определенного запроса прерывания. Запрос прерывания проходит в блок прерываний при единичном со­стоянии соответствующего разряда регистра TIMSK, Разряд регистра TIFR сбрасывается в нулевое состояние аппаратно при переходе мик­роконтроллера к выполнению соответствующей прерывающей програм­мы или программно при выполнении команды установки бита в единич­ное состояние (!).

В состав таймера-счетчика, выполняющего функцию сравнения/ШИМ, входит регистр сравнения OCRX, а в состав таймера-счетчика, выпол­няющего функцию захвата, - регистр захвата ICRX. Разрядность ре­гистров OCRX и 1CRX равна разрядности базового счетчика TCNTX.

Для записи кода в шестнадцатиразрядный счетчик или регистр сна­чала выполняется команда записи (OUT) байта в старшую половину разрядов (Н), при этом поступавший из регистра общего назначения старшин байт запоминается в регистре временного хранения. Затем выполняется команда записи (OUT) младшего байта в младшую по­ловину разрядов (L), при этом оба байта одновременно записываются в счетчик или регистр.

Для чтения кода из шестнадцатиразрядного счетчика или регистра сначала выполняется команда чтения (IN) байта из младшей половины разрядов (L), при этом считанный младший байт поступает в регистр общего назначения, а старший байт запоминается в регистре временного хранения. Затем выполняется команда чтения байта из старшей поло­вины разрядов (Н), при этом старший байт из регистра временной, хранения поступает в указанный в команде регистр общего назначения.

Таймер-счетчик типа А

Таймер-счетчик типа А есть у микроконтроллеров всех типов кроме микроконтроллера типа m103. Он имеет имя Т/СО (X = 0). Таймер-счетчик типа А формирует запрос прерывания Т/СО OVF при пере­полнении восьмиразрядного базового счетчика TCNT0. Структурная схема таймера-счетчика типа А изо­бражена на рис. 6.

Рисунок 6. Структурная схема таймера-счетчика типа А.

Тактовый сигнал микроконтроллера СК поступает в пересчетную схе­му (presenter) ПС, представляющую собой десяти разрядный счетчик, где выполняется деление частоты тактового сигнала на 8, 64, 256 и 1024. Сигналы с четырех выходов пересчетной схемы поступают в схему управления СУ (мультиплексор). При наличии в микроконтроллере таймера-счетчика Т/С1 эти же сигналы поступают в Т/С1.

В схему управления поступают также тактовый сигнал СК и сигнал из внешнего источника, принимаемый на вход ТО. В качестве входа ТО у микроконтроллеров типа 1200, 2313 и 4433 используется вывод порта PD4, у микроконтроллеров типа 2323, 2343 и серии ATtiny — вывод порта РВ2, а у микроконтроллеров типа 8515, 8535 и т163 -вывод порта РВО.

Схема управления в зависимости от комбинации состояний разрядов CS00, CS01 и CS02 регистра управления TCCR0 передает один из поступающих сигналов на счетный вход базового счетчика TCNT0, ведущего счет на сложение. Сигналы, используемые для счета в счетчике TCNT0 при разных комбинациях значений в разрядах регистра TCCR0, указаны в табл. 4.

Таблица 4.

При переполнении счетчика TCNT0 устанавливается в единичное состояние разряд TOV0 регистра TIFR и при единичном состоянии разряда TOIE0 регистра TIMSK в блок прерываний поступает запрос-прерывания Т/СО OVF.

В микроконтроллере в работе таймера-счетчика типа А участвуют разряд PSR0 регистра SFIOR. При установке этого разряда в единичное состояние сбрасывается в исходное (нулевое) состояние пересчетная схема ПС. Разряд PSR0 возвращается в нулевое состояние аппаратно.

Прерывания

 Прерывание прекращает нормальный ход программы для выполнения приоритетной задачи, определяемой внутренним или внешним событием микроконтроллера. При возникновении прерывания микроконтроллер сохраняет в стеке содержимое счетчика команд РС и загружает в него адрес соответствующего вектора прерывания. По этому адресу, как правило, находится команда безусловного перехода к подпрограмме обработки прерываний.

Для глобального разрешения/запрещения прерываний предназначен флаг I регистра SREG. Для разрешения прерываний он должен быть установлен в 1, а для запрещения – сброшен в 0. Индивидуальное разрешение или запрещение (маскирование) прерываний производится установкой/сбросом соответствующих битов регистров масок прерываний.

Следует сказать, что в микроконтроллерах семейства Mega имеется две разновидности внешних прерываний. Прерывания первого типа генерируются при появлении на входе внешнего прерывания заданного сигнала. Эти прерывания присутствуют во всех микроконтроллерах семейства. Прерывания второго типа генерируется при любом изменении состояния определенных выводов микроконтроллера.
Экспериментальный раздел

Перед реализацией данной задачи на плате необходимо смоделировать ее работу в среде проектирования Proteus 7 и написать программу для микроконтроллера в среде программирования CodeVisionAVR.

Proteus VSM - программа-симулятор микроконтроллерных устройств. Для создания схемы необходимо нажать file/new design…

После этого необходимо добавить все необходимые компоненты. Для добавления нового компонента необходимо на рабочем пространстве нажать правой кнопкой place/component/from librares… (рис. 7)

2.JPG



Рисунок 7. Рабочее пространство в среде Proteus.

В открывшемся окне поиска набираем Atmega8535 и нажимаем Ok, после этого добавляем наш микроконтроллер в рабочую область (рис. 8).

4.JPG

Рисунок 8. Выбор микропроцессора в среде Proteus .

Так же нам понадобятся светодиоды и резисторы. Таким же образом добавляем их на рабочую область и соединяем всю схему (предварительно составив схему включения и рассчитав номиналы элементы согласно электрическим параметрам используемых элементов). Для работы микроконтроллера нужно питание. Чтобы его добавить жмем правой кнопкой place/terminal/ground. Готовая схема выглядит так (рис. 9).

 Теперь делаем двойной щелчок на микроконтроллере. Откроется окно редактирование свойств нашего контроллера. Нам необходимо указать путь до нашей программы. Нажимаем на раскрывающуюся папку в свойстве Program File и указываем путь до программы, \Debug\Exe\*.d90. Все готово. Закрываем окно свойств и в левой нижней части экрана жмем на кнопку запустить.

5.JPG

Рисунок 9. Подключение светодиодов к микропроцессору в среде Proteus .

Для программирования AVR-микроконтроллеров будем использовать систему CodeVisionAVR. Для создания проекта нажимаем file/new, выбираем file typeProjectи жмем кнопу OK”. Далее у нас спрашивается использовать «Мастер проекта» или нет. Для начала лучше выбрать Yes. После этого открывается окно мастера “CodeWizardAVR.

Краткое описание некоторых вкладок мастера:

·  “Chip” – здесь задается тип микроконтроллера, частота его работы, а также тип создаваемой программы. Используемый нами чип - ATmega8535.

· “Ports” – назначение функций портов, можно указать каждому конкретному выводу режим входа или выхода, а так же включить подтягивающее сопротивление.

·  “External IRQ” – включение и выключение внешних прерываний.

·  “Timers” – настройка таймеров. На этой вкладке можно настроить большинство параметров таймеров, а так же включить или выключить сторожевой таймер.

Чтобы получить заготовку для выполнения первого примера нужно выполнить несколько шагов:

1.     На вкладке Chip выбрать тип мк ATmega8535.

2.     На вкладке Ports перевести портА в режим выхода.

3.     На вкладке Timersзадать параметр Clock Valueи установить галочки для включения прерывания по переполнению или совпадению со значением.

4.     После этого можно нажать на шестеренку, сохранить файлы исходного кода и проекта в своей домашней папке.

5.     В функции interrupt [TIM0_OVF] void timer0_ovf_isr(void)  написать код, который будет выполняться при переполнении таймера (например PORTA++;). После чего должно получиться что-то вроде Листинга 1.

Пример 1.  Управление светодиодами с использованием Timer0 в режиме  «сброс по переполнению» микроконтроллера ATMega 8535.

Листинг 1

//Подключение заголовочного файла с описанием микроконтроллера

#include <mega8535.h>

// Обработчик прерывания переполнения таймера 0.

interrupt [TIM0_OVF] void timer0_ovf_isr(void)

void main(void)

;

}  

Теперь нажимаем Ctrl-F9. Если при компиляции нет никаких ошибок, то можно прошить в Proteus наш микроконтроллер и увидеть результат работы нашей программы.

Разберем программу подробнее. Сначала мы подключаем файл #include "mega8535.h" который содержит описание всех констант и переменных микроконтроллера Atmega 8535. Порт A микроконтроллера (состоит из 8-ми выводов) к которому присоединены наши светодиоды назначаем на выход (мы будем выдавать на них 0 или 1) для чего присваиваем переменной DDRA число равное 0xFF (11111111 в двоичном коде).

Затем происходит настройка таймера. Прежде всего устанавливается частота работы таймера (TCCR0=0x04;), а так же устанавливается начальное значение счетчика. Таймер будет работать на переполнение. Это значит, что когда пройдет заданное кол-во тактов контроллера (каждый такт увеличивает регистр таймера на 1) сработает прерывание (по сути дела вызовется функция объявленная особым образом) и мы включим очередной светодиод. Функция, обрабатывающая прерывания нашего таймера объявляется так:

interrupt [TIM0_OVF] void timer0_ovf_isr(void)

Внутри этой функции работает простой алгоритм. С каждым шагом таймера происходит битовый сдвиг значения PORTA на одну позицию влево, т.е. включается светодиод левее текущего, а текущий тухнет. При достижении последнего светодиода (а также при старте программы) загорается самый правый светодиод.

Затем мы должны зациклить эту программу, чтобы светодиоды мигали, все время пока включена схема. Для этого мы вставим бесконечный цикл while(1).

Дополнительная информация

В цифровой технике приняты некоторые правила, по которым можно представить аналоговый сигнал допустимый для подачи на ножку МК  как 1-битный цифровой сигнал или как одно из двух значений: 

"1" - высокий логический уровень (ВЛУ)  - логическая единица        

или

"0" - низкий логический уровень (НЛУ) - логический ноль.

Напряжение на ножке выше чем 60% напряжения питания МК гарантировано воспринимается им как ВЛУ или "1" - высокий логический уровень.

Напряжение на ножке ниже чем 20% напряжения питания МК гарантировано воспринимается им как НЛУ или "0" - низкий логический уровень.

Чтобы поместить переменную в регистр необходимо использовать оператор присваивания  “=” (он не означает равенство).

Логические операции:

&  «И» (только «1» и «1» дают «1»)

|  «ИЛИ» (только «0» и «0» дают «0»)

^  «ИСКЛЮЧАЮЩЕЕ ИЛИ» (изменить бит напротив «1»)

~  «ИНВЕРТИРОВАНИЕ БИТОВ» (изменить биты регистра инверсно).

Целые числа могут быть записаны:

в десятичной форме   12        234

в двоичной форме                  0b110011

в шестнадцатиричной форме            0х3А. 

Самостоятельная работа

1.     Рассчитать и подобрать резисторы (по номиналу, типу корпуса, точности) для подключения светодиодов к микроконтроллеру ATmega 8535 к порту ввода-вывода А.

2.     Промоделировать схему подключения в среде Proteus по примеру №1.

3.     Убедиться в работе схемы по примеру №1.

4.     Индивидуальное задание выполняется согласно варианту. Программа записывается в микроконтроллер и запускается.

Вариант 1:

Светодиоды по одному переключаются раз в секунду от младшего разряда к старшему  порта А.

Вариант 2:

Светодиоды  порта А  через один переключаются раз в 0,5 секунды (задействованы все) .

Вариант 3:

Светодиоды  порта А  по одному с каждого края «сбегаются» в центр. Время переключения светодиодов 1с.

Вариант 4:

Светодиоды по одному добавляются в светящийся ряд раз в секунду от младшего разряда к старшему  порта А.

Вариант 5:

Светодиод старшего разряда включается на 1 сек через 3, два соседних мигают по переменке через 0,5 секунды.

Содержание отчета

1.     Конспект теоретической части.

2.     Пример расчета и выбор резисторов.

3.     Схема устройства согласно заданию по варианту.

4.      Листинг программы с комментариями.

Контрольные вопросы

1.     Назначение регистров DDRx, PORTx, PINx МК ATMega.

2.     Назначение таймеров/счетчиков МК.

3.     Назначение регистров TIMSK, TIFR, TCNTx, TCCRx, SREG, ASSR, SFIOR МК ATMega 8535.

Литература

1.     Микроконтроллеры AVR семейства Tiny и Mega фирмы “ATMEL”. А.В. Евстифеев.

2.     Микроконтроллеры семейства AVR фирмы “ATMEL”. Гребнев В.В.

3.     ATMega8535. Data sheet.