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

Лаба 5 / laba_5 (1)

.docx
Скачиваний:
2
Добавлен:
08.04.2022
Размер:
579.65 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра БТС

Индивидуальное

домашнее задание №5

по дисциплине «Микропроцессорные системы»

Тема: Работа с UART

Студентка гр. 7502

Кузнецова М.А.

Преподаватель

Анисимов А. А.

Санкт-Петербург

2020

Цель работы: изучить режимы работы АЦП и передачу данных по интерфейсу UART, использование UART для связи с ПК, работа с datasheet на ATMega328P. Создание программы на языке ассемблера.

Задачи:

1) Вся работа ведётся в обработчиках прерываний, основной цикл остаётся пустым. 

2) Первый обработчик - по переполнению таймера, в нём мы запускаем одиночное АЦП преобразование.

3) Второй обработчик - по завершению АЦП преобразования, в нём мы считываем результат, 8 старших бит записываем в регистр передачи данных UART UDR0. Далее в терминале смотрим, что пришло.

4) В блоке инициализации делаем все необходимые настройки для таймера, настраиваем АЦП (ИОН - напряжение питания 5 В) и UART (скорость 9600, 8 бит данных, 1 стоповый бит, без проверки на чётность).

5) В Proteus'е к АЦП подключаем потенциометр (как и в прошлой работе), к выводам RX и TX подключаем COM-порт.

В бесконечном цикле мы считываем данные с АЦП и передаём по UART'у на ПК.

Основные теоретические положения

Первым делом попробуем ответить на вопрос: в чем главное отличие между последовательным и параллельным интерфейсом? Параллельные интерфейсы позволяют передавать по несколько бит информации за один раз. Обычно для этого используются шины данных, состоящие из восьми или шестнадцати проводов, поэтому данные передаются большими блоками. Последовательные интерфейсы передают свои данные по одному биту за такт, что в идеале требует всего одного провода. Вот и всё основное различие, вполне очевидное.

Рисунок 1 – Последовательные и параллельные интерфейсы

Параллельные интерфейсы, безусловно, имеют свои преимущества. Они крайне просты в реализации с точки зрения аппаратного и программного обеспечения. Но они требуют слишком много проводов и, как ни парадоксально, из-за этого работают слишком медленно.

Все сигналы от передатчика к приёмнику должны поступать одновременно. Но гарантировать время прохождения сигнала для всех линий параллельного интерфейса на больших частотах очень тяжело, при этом неизбежно искажается форма передаваемого сигнала. Таким образом, даже если вы передаете меньше данных за один такт при помощи последовательного интерфейса, становится возможным использовать гораздо более высокие частоты, что и приводит к более высокой скорости передачи данных.

На сегодняшний день последовательные интерфейсы полностью вытеснили параллельные, во всяком случае для бытового применения. Для персональных компьютеров общим стандартом для обмена данными с периферией стал USB интерфейс, практически полностью заменив собой RS-232. Связь через последовательный порт с использованием интерфейса RS-232 когда-то была популярным методом передачи данных. На задней панели некоторых компьютеров, особенно старых, среди разъёмов можно заметить D-образный штекер с 9 контактами, также известный как COM-порт (от слова communication).

COM-порт был неотъемлемой частью большинства компьютеров на протяжении последних 30 лет. Хотя многие новые системы полностью отказались от стандарта RS-232 в пользу USB интерфейса, он до сих пор используется в системах промышленной автоматики, различных исследовательских и измерительных приборах. COM-порты все еще используются в этих областях, поскольку они крайне просты, надёжны, поддерживаются любой операционной системой, а их функционал очень хорошо стандартизирован. Последовательный порт не требует дополнительных драйверов или специализированного программного обеспечения, и пользователи могут легко взаимодействовать с COM-портом при помощи распространённых программ, таких как Матлаб и Labview.

Все микроконтроллеры семейства Mega, на которых работают платы Arduino, имеют в своем составе аппаратный блок универсального последовательного интерфейса – UART. По структуре это обычный асинхронный последовательный протокол, как и RS-232, только с другими логическими уровнями. Синхронизация идет по времени – мы заранее задаем скорость передачи данных как на стороне передатчика информации, так и на стороне приемника. Поэтому перед началом передачи данных мы обязаны сделать множество настроек, которые должны совпадать как на стороне нашего микроконтроллера, так и компьютера, иначе передача будет невозможна.

Помимо информационных бит, UART автоматически вставляет в поток синхронизирующие метки, так называемые стартовый и стоповый биты. При приёме эти лишние биты удаляются из потока. Также существует возможность автоматически контролировать целостность данных методом контроля битовой чётности, в нашем случае особой пользы от этой проверки нет.

Все эти параметры задаются строго перед началом передачи данных и не могут быть изменены в процессе. Самый распространенный формат передачи данных для микроконтроллеров – 8 бит данных, 1 стартовый бит, 1 стоповый бит, без проверки на четность. Передача и прием сообщений осуществляется фиксированными пакетами бит, такой пакет называют кадром (рис. 2). Кадр состоит из стартового бита (с него начинается каждый кадр), битов данных (их количество можно изменяться от 5 до 9), бита проверки четности (проверка правильности передачи данных) и одного или двух стоп-битов (обязательный сигнал окончания кадра).

Рисунок 2 – Пакеты данных

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

На физическом уровне интерфейс UART крайне прост. Для его аппаратной реализации достаточно всего двух проводов, не считая общего провода, подключаемого обычно к напряжению земли (рис. 3). Эти линии имеют разное назначение – линия RXD используется для приема сообщений (Receiver), а TXD – для передачи сообщений (Transmitter). UART является полнодуплексным интерфейсом. Это значит, что приемник и передатчик работают независимо друг от друга, позволяя одновременно как передавать, так и принимать данные (так называемая полнодуплексная передача данных).

Рисунок 3 – Аппаратное обеспечение UART

В настоящее время физические интерфейсы на основе RS232 практически исчезли из современных персональных компьютеров. Однако удобство пользования и обилие программного обеспечения, имеющего доступ к внешним устройствам через COM-порт, вынудило разработчиков создать драйвера виртуальных COM-портов. Виртуальный COM-порт является полной эмуляцией реального последовательного порта. На одном компьютере можно создать большое количество виртуальных COM-портов, единственным ограничением являются доступные ресурсы, такие как оперативная память и вычислительная мощность.

Виртуальные COM-порты работают так же, как и реальные, и любое приложение может работать с ними, как с реальными физическими портами на материнской плате компьютера. Виртуальные COM-порты эмулируют все функциональные возможности аппаратных, включая скорость передачи данных, проверку на чётность, количество стоп-бит и все остальные параметры.

Обработка результатов работы

Код программы на языке Assembler:

.ORG 0x0000

RJMP RESET

.ORG 0x001A

RJMP TIM1_OVF

.ORG 0x002A

RJMP ADC_DONE

.ORG INT_VECTORS_SIZE

RESET:

LDI R16, HIGH(RAMEND)

OUT SPH, R16

LDI R16, LOW(RAMEND)

OUT SPL, R16

LDI R16, 0b00000001

STS TIMSK1, R16

LDI R16, 0b00000010

STS TCCR1B, R16

LDI R16, 0b00000000

STS DDRC, R16

OUT PORTC, R16

LDI R16, 0b00100000

STS ADMUX, R16

LDI R16, 0b00011000

STS UCSR0B, R16

LDI R16, 0b00000110

STS UCSR0C, R16

LDI R16, 51

STS UBRR0L, R16

SEI

MAIN:

RJMP MAIN

TIM1_OVF:

LDI R16, 0b11100000

STS ADCSRA, R16

RETI

ADC_COMPLETE:

LDS R18, ADCH

STS UDR0, R18

RETI

Для проверки кода, произведем моделирование работы МК в САПР Proteus 8.

Разработанная схема приведена на рисунке 4.

Рисунок 4 – Вид схемы

На рисунке 4: RV1 – потенциометр, предназначенный для моделирования аналогового сигнала; СOMPIM – Макрос для моделирования виртуального COM порта.

Произведем моделирование работы схемы. Результат при 0 В на входе приведен на рисунке 5.

Рисунок 5 – Результат работы схемы при подаче 0 В на АЦП

Увеличим напряжение до 2 В. Результат работы – на рисунке 6.

Рисунок 6 – Результат работы схемы при подаче 2 В на АЦП

Полученное число – 410 переведем в напряжение.

Произведем расчёт напряжения:

На выходе мы получили число, равное по значению к исходному.

Увеличим напряжение до 3 В. Результат – на рисунке 7.

Рисунок 7 – Результат работы схемы при подаче 3 В на АЦП

Произведем расчёт напряжения:

Вывод: В ходе данной лабораторной работы были закреплены навыки работы с АЦП, а также был изучен асинхронный способ передачи данных по UART в МК ATMega328P, расчетное значения напряжения сошлось с напряжением, снимаемым с вольтметра.

Соседние файлы в папке Лаба 5