Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Моделирование устройств интерфейсов в среде Proteus. Практикум
.pdf
Практическое занятие №4
МОДЕЛИРОВАНИЕ РАБОТЫ ПОСЛЕДОВАТЕЛЬНОГО
ИНТЕРФЕЙСА USART
Цель занятия: Изучение интерфейса микроконтроллеров USART и приобретение
навыков его моделирования в среде Proteus.
1. Основы интерфейса микроконтроллеров USART
Анализ оснащенности встраиваемыми интерфейсами современных
микроконтроллеров ведущих мировых фирм Silicon Laboratories Corp., Atmel Corp.,
MAXIM-Dallas Corp. позволяет утверждать, что среди современных микроконтроллеров
практически все оснащены одним и значительная часть - двумя последовательными
портами USART. Микроконтроллеры семейства AVR Mega могут иметь до четырёх
модулей универсального синхронно/асинхронного приёмопередатчика USART.
Все модули USART обеспечивают дуплексный обмен информацией по
последовательному каналу. Длина информационной посылки от пяти до девяти
двоичных разрядов. Во всех модулях имеются узлы контроля и формирования разряда
чётности. Для взаимодействия с программой USART формирует три вида запросов
прерывания при событиях "передача завершена", "информационный регистр
передатчика пуст" и "приём завершён".
Связь модулей USART с внешним миром обеспечивают альтернативные
функции линий ввода/вывода общего назначения. Например, в микроконтроллере
ATmega16 линия PD0 может служить информационным входом USART (RXD),
линия PD1 — информационным выходом USART (TXD), линия PB0 — входом или
выходом тактового сигнала USART (XCK).
В случае наиболее распространенного асинхронного варианта применения
возможны варианты прямого подключения двух UART и сетевого подключения
нескольких модулей для полудуплексной передачи данных по одному проводу. При этом
выводы TX и RX каждого устройства соединяются вместе. Арбитраж в сети реализуется
программно.
USART преимущественно используется для взаимодействия компонентов внутри
одного устройства. Для внешних подключений сигналы с уровнями логики ТТЛ или
КМОП мало подходят из-за низкой помехоустойчивости. Распространённым стандартом
физического уровня для USART, который подходит для подключения внешних устройств
является RS-232.
Модуль USART состоит из трёх основных частей: блока тактирования, блока
передатчика и блока приёмника. Регистр UDR объединяет буферы приёмника и
21

передатчика. Операцией чтения из него извлекают последний принятый байт, а
операцией записи в него помещают байт, подлежащий передаче.
Для управления в каждом модуле USART имеются
три регистра: UCSRA, UCSRB, UCSRC. Работу
передатчика разрешают записью единицы в разряд TXEN
регистра UCSRB. При этом вывод TXD подключается к
передатчику USART и начинает функционировать как
выход независимо от установок регистров управления
портом. Если задан синхронный режим работы, то
изменяется также функция вывода XCK. Передачу
инициируют записью байта в регистр UDR. Из него этот байт автоматически поступает
в сдвиговый регистр передатчика. О пересылке в сдвиговый регистр заданного числа
разрядов сигнализирует установленный в регистре UCSRA флаг UDRE, что означает
готовность регистра UDR к получению нового байта. Запись в регистр UDR
автоматически снимает этот флаг.
Выключают передатчик обнулением разряда TXEN в регистре UCSRB. Если в
момент выполнения этой операции передача ещё идёт, выключение передатчика
произойдёт только по завершении текущей и отложенной передач, т. е. после очистки
сдвигового и буферного регистров передатчика. При выключенном передатчике
вывод TXD можно использовать как линию ввода/вывода общего назначения.
Работу приёмника разрешают записью единицы в разряд RXEN регистра
UCSRB. При этом вывод RXD будет подключён к приёмнику USART и начнёт
функционировать как вход независимо от состояния регистров управления портом. Если
используется синхронный режим работы, изменяются также функции вывода XCK.
Выключают приёмник обнулением разряда RXEN регистра UCSRB. В отличие от
передатчика, приёмник выключается немедленно. Информация, принимаемая в этот
момент, будет потеряна. Кроме того, при выключении приёмника будет выполнена
очистка его буфера, следовательно, потеряется и не прочитанная из него информация.
При выключенном приёмнике вывод RXD можно использовать как линию ввода/вывода
общего назначения.
Моделирование работы интерфейса микроконтроллеров USART проводится в среде
Proteus. Чтобы добавить микроконтроллер в рабочее поле симулятора, необходимо в поле
Category (в левой верхней части окна Pick Devices) выбрать из списка библиотеку
Microprocessor ICs, а в нижерасположенном поле Sub-Category задать семейство
микроконтроллеров. В поле Manufacturer можно дополнительно указать производителя
микроконтроллера. Кварцевый резонатор, необходимые для его работы конденсаторы и
цепи питания в схему можно не добавлять, так как они эмулируются программно.
Параметры размещённого на схеме микроконтроллера как и любого другого
компонента при необходимости можно редактировать в окне Edit Component.
Чтобы загрузить в микроконтроллер программу, следует выделить щелчком левой
кнопки мыши его графическое изображение на рабочем поле проекта. Затем правой
кнопкой мыши вызвать контекстное меню и выбрать в нём пункт Edit Source Code. В
появляющемся окне New Project Wizard: Firmware выбрать Create Firmware Project
(создать проект с микроконтроллером) и заполнить поля:
Family — семейство микроконтроллеров (AVR);
22

Controller — тип микроконтроллера (ATmega16 или ATmega128);
Compiler — компилятор языка, на котором написана программа микроконтроллера.
В работе доступны AVRASM (Proteus) для программы на языке ассемблера и WinAVR для
программы на языке С;
Create Quick Start Files — создать заготовку текста программы микроконтроллера.
Кнопка «Compilers…» в поле Compiler применяется для добавления компилятора в
список доступных.
В результате в проекте добавляется вкладка Source Code и открывается окно
заготовки программы.
2. Порядок выполнения задания
1. Ознакомиться с изложенным выше кратким описанием последовательного
интерфейса микроконтроллеров USART.
2. Изучить особенности моделирования схем с микроконтроллерами, для чего
создать средствами программы ISIS Proteus приведенную ниже принципиальную
электрическую схему.
3. Ввести в окне заготовки программы Source Code исходный код на языке С,
реализующий программное управление поочередным включением двух светодиодов:
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <util/delay.h>
int main()
{
// Инициализация порта D
DDRD=0xff;
// Порт PD работает на вывод
PORTD=0x00;
// Бесконечный цикл
while (1)
// Вывод 1 на линию PD0 и 0 на PD1-PD7
{PORTD=0b00000001;
// выдержка длительностью 1 с
delay_ms(1000);
// Вывод 1 на PD1 и 0 на PD0
PORTD=0b00000010;
// выдержка длительностью 1 с
delay_ms(1000);
}}
4. Запустить процесс моделирования (с одновременной компиляцией) с помощью
кнопки . Временно приостановить процесс моделирования можно, используя
находящуюся рядом кнопку . Ей же приостановленный процесс запускается вновь.
Полностью прекратить моделирование можно нажатием на кнопку .
Пошаговый режим моделирования выполняется с помощью кнопки .
23

5. Проанализировать ошибки компиляции программы, фиксируемые в окне VSM
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <util/delay.h>
//Подпрограмма передачи
void send_UART(char value) {
//Ожидание очистки буфера передачи
while(!( UCSR0A & (1 << UDRE0)));
//Начало передачи
Studio Output. Установить причину и устранить ошибки в тексте исходного кода.
Убедиться в нормальной работе схемы.
6. Моделировать работу интерфейса микроконтроллера USART, организуя
передачу на виртуальный терминал символов, для чего создать средствами программы
ISIS Proteus приведенную ниже принципиальную электрическую схему. В окне настроек
микроконтроллера Edit Component установить следующие параметры:
CKOPT — 1 (не запрограммирован);
BOOTRST — 1 (не запрограммирован);
CKSEL Fuses — 1111 (высокочастотный внешний кварцевый резонатор);
Boot Loader Size — 00 (1024 слова, стартовый адрес 0x1C00);
SUT Fuses — 11;
Advanced Properties — Clock Frequency 8000000.
Настройки виртуального терминала должны соответствовать настройкам
микроконтроллера.
7. Ввести в окне заготовки программы Source Code исходный код на языке С
(приведен под рисунком схемы), реализующий программное управление передачей на
экран виртуального терминала последовательности символов «А», «В» и «С».
8. Запустить процесс моделирования и убедиться в появлении на экране
виртуального терминала указанных символов. В противном случае проанализировать
ошибки в окне VSM Studio Output и принять меры к их устранению.
24

//Тактовая частота МК, Гц
#define F_CPU 8000000
//Скорость UART
#define BAUD 9600L
//Значение регистра UBRR
#define UBRRL_value (F_CPU/(BAUD*16))-1
//Подпрограмма инициализации USART
void init_USART() {
//Младшие 8 разрядов UBRRL_value
UBRR0L = UBRRL_value;
//Старшие 8 разрядов UBRRH_value
UBRR0H = UBRRL_value >> 8;
//Разрешение передачи
UCSR0B = (1<<TXEN0);
//8 инф. разрядов
UCSR0C = (1<<UCSZ00)|(1<<UCSZ01); }
UDR0 = value; }
//Главная программа
int main(void)
{
// Инициализация USART
init_USART();
//Посылка кода символа 'A'
send_UART(0b01000001);
//Посылка кода символа 'B'
send_UART(0b01000010);
//Посылка кода символа 'C'
send_UART(0b01000011);
while (1)
{ _delay_ms(1000); }
}
9. Используя таблицу кодов ASCII для России, внести изменения в исходный код,
позволяющие передать на экран виртуального терминала имя студента.
10. Оформить протокол и ознакомиться с контрольными вопросами.
1. Название и цель занятия.
2. Скриншоты схем и исходных кодов, использованных в работе.
3. Основные выводы по выполненному заданию.
1 . К какому типу интерфейсов относится USART?
2 . Сколько модулей USART могут иметь современные микроконтроллеры?
3. Какие варианты подключения возможны для UART?
4 . Какие виды запросов прерывания формирует USART?
5 . Как обеспечивается связь модулей USART с внешними цепями микроконтроллера?
3. Содержание отчета
4. Контрольные вопросы
25

6 . Из каких основных частей состоит модуль USART?
7 . Какие регистры входят в состав модуля USART?
8 . В чем заключается отличие синхронного режима работы USART от асинхронного?
9. Как осуществляется управление работой передатчика и приемника USART?
10. Где в USART осуществляется преобразование формата данных?
Практическое занятие №5
МОДЕЛИРОВАНИЕ РАБОТЫ ПОСЛЕДОВАТЕЛЬНОГО
ИНТЕРФЕЙСА SPI
Цель занятия: Изучение интерфейса микроконтроллеров SPI и приобретение
навыков его моделирования в среде Proteus.
1. Основы последовательного интерфейса SPI
Последовательный периферийный интерфейс SPI (Serial Peripheral Interface) —
высокоскоростной полнодуплексный синхронный интерфейс, реализованный во всех
микроконтроллерах AVR Mega. По распространенности среди встроенных интерфейсов
других микроконтроллеров он уступает только USART. Интерфейс SPI обеспечивает
обмен информацией между микроконтроллером и различными внешними периферийными
устройствами — АЦП и ЦАП, цифровыми потенциометрами, запоминающими
устройствами, другими микросхемами и микроконтроллерами.
При обмене по интерфейсу SPI микроконтроллер AVR может быть ведущим
(master) или ведомым (slave). Ведущий может быть связан с одним или несколькими
ведомыми (до 8). Скорость передачи данных по интерфейсу до 2 Мбит/с, максимальное
расстояние до 3м. Типичная схема соединения устройств по интерфейсу SPI показана на
рисунке.
Связь организуется с помощью следующих четырех линий:
MOSI (master out, slave in) — информационный выход ведущего и вход ведомого
устройства;
26

MISO (master in, slave out) — информационный вход ведущего и выход ведомого
устройства;
SCK (slave clock) — сигнал синхронизации (выход ведущего, вход ведомого);
SS (slave select) — выбор устройства (выход ведущего, вход ведомого).
Ведущий микроконтроллер формирует один или несколько сигналов SS (по числу
ведомых). Ведомый участвует в обмене только в случае, если ведущий выбрал его,
установив на соответствующей линии SS низкий логический уровень.
Передача информации происходит по линиям MOSI и MISO. Процессом управляет
ведущий, формируя тактовые импульсы на линии SCK. Одновременно с передачей
информации от ведущего к ведомому происходит приём информации ведущим от
ведомого. Ведомые устройства не могут обмениваться информацией между собой.
В модуле SPI микроконтроллера имеются три служебных регистра:
SPDR — информационный регистр, содержит отправляемый или принятый байт;
SPCR — регистр управления модулем SPI;
SPSR — регистр состояния модуля SPI.
Включают или выключают модуль SPI записью соответственно единицы или нуля
в шестой разряд (SPE) регистра SPCR. Пятый разряд (DORD) этого регистра задаёт
порядок передачи информации (старшим или младшим байтом вперёд), а его четвёртый
разряд (MSTR) — режим работы модуля (ведущий или ведомый).
Частным случаем рассмотренной архитектуры является так называемая 3хпроводная структура. Ее отличие состоит в том, что ведомая микросхема постоянно
выбрана, и, следовательно, необходимость в четвертой линии интерфейса SPI отсутствует.
Расширенный интерфейс SPI позволяет организовать двухпроцессорную 4хпроводную архитектуру. В этом случае каждый из двух узлов может выполнять роль
ведущего. На практике такая архитектура используется достаточно редко, ввиду
алгоритмической сложности диагностики состояний коллизий. Более широко
распространена архитектура с 4х-проводной «перекрестной» выборкой. В этом случае
для выборки каждого из узлов используется линия ввода/вывода другого узла,
работающая только на вывод.
Такая архитектура необходима, если один из микроконтроллеров предназначен для
ввода и обработки сигналов, а второй – для организации интерфейса с персональным
компьютером или локальной сетью. В этом случае и один, и другой микроконтроллеры
должны иметь возможность инициировать процедуру обмена данными, а,
следовательно, должны иметь возможность функционирования в режиме ведущего.
Более распространенный случай, это использование двухпроцессорной
структуры с разделяемым ресурсом, например памятью. Здесь линии основных
сигналов SPI шины подключены также к общему ведомому, а для выборки общего
ведомого используется по одной дополнительной линии ввода/вывода от каждого из
ведущих, объединенных по «монтажному ИЛИ».
2. Порядок выполнения задания
1. Ознакомиться с изложенным выше кратким описанием последовательного
интерфейса микроконтроллеров SPI.
27

2. Моделировать передачу ведущим микроконтроллером U1 управляющего байта
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <util/delay.h>
int main()
{
// Инициализация порта в U1
PORTB=0b00000000;
//Линии SS, MOSI, SCK настраиваются как
выходы
DDRB=0b10110000;
//Инициализация SPI
SPCR=0b01010011;
//Отсылка ведомому кодовой комбинации
SPDR=0b11111110;
return 0;
}
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <util/delay.h>
int main()
{
// Инициализация порта В в U2
PORTB=0b00000000;
//Все линии порта В - входы
DDRB=0b00000000;
//Инициализация порта D
PORTD=0b00000000;
//Все линии порта D - выходы
DDRD=0b11111111;
//Инициализация SPI
SPCR=0b01000011;
//Бесконечный цикл
while (1)
{
//Если кодовая комбинация не получена,
if (SPDR!=0b11111110)
ведомому микроконтроллеру U2, который в подтверждение приема поочередно включает
и выключает светодиоды. Для этого создать средствами программы ISIS Proteus
следующую принципиальную электрическую схему:
3. В окнах настроек обоих микроконтроллеров Edit Component установить
следующие параметры:
CKOPT — 1 (не запрограммирован);
BOOTRST — 1 (не запрограммирован);
CKSEL Fuses — 0010 (внешний RC-генератор частотой 2Мгц);
Boot Loader Size — 00 (1024 слова, стартовый адрес 0x1C00);
SUT Fuses — 01;
Advanced Properties — Clock Frequency (Default).
4. Ввести в окнах заготовки программы Source Code исходные коды на языке С
для ведущего U1 (слева) и ведомого U2 (справа) микроконтроллеров:
28

//устанавливается 0 на всех линиях порта D
PORTD=0b00000000;
//Если кодовая комбинация получена,
else if (SPDR==0b11111110)
//включается светодиод
{PORTD=0b00000001;
//Выдержка 1 с
_delay_ms(1000);
//Гасится светодиод и включается другой
PORTD=0b10000000;
//Выдержка 1 с
_delay_ms(1000);}
}}
5. Запустить процесс моделирования и убедиться в поочередном включении и
выключении светодиодов. В противном случае проанализировать ошибки в окне VSM
Studio Output и принять меры к их устранению.
6. Моделировать передачу ведущим микроконтроллером U1 управляющего байта
сначала ведомому микроконтроллеру U2, а затем ведомому микроконтроллеру U3. В
подтверждение приема каждый ведомый должен включить и выключить свой светодиод.
Для выполнения задания создать средствами программы ISIS Proteus следующую
принципиальную электрическую схему:
следующие параметры:
7. В окнах настроек всех микроконтроллеров Edit Component установить
CKOPT — 1 (не запрограммирован);
29

BOOTRST — 1 (не запрограммирован);
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <util/delay.h>
int main()
{
// Инициализация порта В в U1
PORTB=0b00000000;
//Линии MOSI, SCK, PB0, PB1 - выходы
DDRB=0b10100011;
//Инициализация SPI
SPCR=0b01010011;
SPSR=0b00000000;
//Выбор первого ведомого
PORTB=0b00000010;
//Отсылка ему кодовой комбинации
SPDR=0b11111110;
//Выдержка 10 с
_delay_ms(10000);
//Выбор второго ведомого
PORTB=0b00000001;
//Отсылка ему кодовой комбинации
SPDR=0b11111110;
//Выдержка 10 с
_delay_ms(10000);
return 0;
}
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <util/delay.h>
int main()
{
// Инициализация порта В
PORTB=0b00000000;
//Все линии порта В - входы
DDRB-0b00000000;
//Инициализация порта D
PORTD=0b00000000;
//Все линии порта D - выходы
DDRD=0b11111111;
//Инициализация SPI
SPCR=0b01000011;
//Бесконечный цикл
while (1) {
if (SPDR!=0b11111110)
//Если кодовая комбинация не получена
//посылается 0 на все линии порта D
PORTD=0b00000000;
else
//Если получена, включается светодиод
{PORTD=0b00000001;
//Выдержка 1 с
_delay_ms(1000);
//Гашение светодиода
PORTD=0b10000000;
//Выдержка 1 с
_delay_ms(1000); }
}}
CKSEL Fuses — 0001 (внутренний RC-генератор частотой 1Мгц);
Boot Loader Size — 00 (1024 слова, стартовый адрес 0x1C00);
SUT Fuses — 00;
Advanced Properties — Clock Frequency (Default).
8. Ввести в окнах заготовки программы Source Code приведенные ниже исходные
коды на языке С для ведущего U1 (слева) и ведомых U2, U3 (справа) микроконтроллеров.
9. Запустить процесс моделирования и убедиться в поочередном включении и
выключении светодиодов, а также в наличии соответствующих осциллограмм. В
противном случае проанализировать ошибки в окне VSM Studio Output и принять меры к
их устранению.
10. Оформить протокол и ознакомиться с контрольными вопросами.
30
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
