Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Моделирование устройств интерфейсов в среде Proteus. Практикум

.pdf
Скачиваний:
1
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
Практическое занятие №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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]