Урок 14
Часть 2
USART. Связь МК с ПК
Сегодня мы продолжим изучение программирования интерфейса USART.
Продолжаем изучать регистры микроконтроллера Atmega8, отвечающие за работу данного интерфейса.
У интерфейса USART в контроллере Atmega8 существует целых три регистра управления — UCSRA, UCSRB и UCSRC. Аббревиатуры данных регистров расшифровываются как USART Control and Status Register. Из данной аббревиатуры видно, что это регистры не только управления, но и состояния.
Рассмотрим регистр UCSRA. Оратимся за помощью, как всегда. к технической документации на микроконтроллер
RXC — это бит состояния приемной шины. То есть передался пакет в шину — флаг установился. Мы его можем ослеживать в цикле, чтобы узнать, пришёл ли пакет в данную шину. Как видно из рисунка, бит этот только для чтения и самостоятельно мы им управлять не можем.
TXC — бит состояния шины передачи. Назначение аналогично вышеуказанному, но только данный бит уже может изменяться программно, то есть он также и на запись.
UDRE — бит освобождения регистра данных. Состояние по умолчанию — 1.
FE — бит также флаговый и устанавливается он в случае ошибки передачи пакета. Пример такой — в приемных данных после истечения времени передачи стопового бита не выставился высокий уровень, что невозможно. Также существуют другие случаи.
U2X — данный бит мы уже видели, он используется для удвоения скорости приёма-передачи данных по шине.
Следующий регистр — UCSRB
В данном регистре также существуют флаги, только они в основном будут использоваться в случае применения прерываний.
Биты данного регистра мы будем изучать по мере их использования при составлении кода программы.
Например бит UCSZ2 — он с цифрой 2. Остальные биты данной настройки находятся в другом регистре. Такое часто бывает, когда не хватает в регистре места для остальных родственных битов.
Следующий регистр — UCSRC
Данный регистр интересен тем, что бит URSEL у него совмещён с таким же битом в регистровой паре UBRR, отвечающей за скорость. То есть, если данный бит в нуле, то запись будет идти в UBRR, а если в единице, то в UCSRC. Вот такой вот прикол.
Биты UPM используются для организации проверки чётности-нечётности
Если оба этих бита в нуле, то мы не используем контроль чётности, в случае, если бит UPM1 в единице, мы уже используем различные режимы контроля.
Следующий бит — USBS — это бит количества стоповых битов
Если мы данный бит не трогаем и оставляем в нуле, то у нас будет 1 стоповый бит, если установим в единицу — два стоповых бита.
Теперь также у нас ещё существуют биты UCSZ. Два из них находятся в рассматриваем регистре, а ещё один — UCSZ2 — в регистре UCSRB. Комбинации данных битов регулируют количество полезных информационных битов для приема-передачи — от 5 до 9. Вот варианты
Остальные биты данного регистра мы рассмотрим также, когда будем писать код.
Также рассмотрим регистровую пару UBRR, отвечающую за установку скорости. Она состоит из двух регистров UBRRH и UBRRL, Первый отвечает за старшую часть двухбайтовой величины регистра, а второй — за младшую
О бите URSEL уже было оговорено выше.
Ну и. как и практически у любой шины, у интерфейса USART существует регистр данных. В него мы заносим данные для передачи, либо забираем переданные
Данный регистр организован хитро. если мы его используем для чтения, то читаем его буфер RXB, а если для записи. то пишем в TXB. То есть обращаемся мы в любом случае к аббревиатуре UDR.
Поэтому сразу появляется автоматически мысль. А куда девается и откуда берётся 9 бит в режиме 9-битного приема-передачи. Оказывается, если мы включаем 9-битный режим, то необходимо перед отправкой такого длинного байта, если можно так сказать, установить или сбросить бит TXB8 в регистре UCSRB, Отсюда он и попадёт в шину установленный или сброшенный, ну а при приёме пользуемся значением бита RXB8 в том же регистре. Вот такие хитрые регистры.
А теперь, так как мы уже слегка подустали от теории, хочется чего-то покравивей. Давайте посмотрим, собственно, переходнички, связывающие наш контроллер с ПК. Их существует немло. Посмотрим некоторые из них
Данные устройства различаются изготовителем, типом применяемой микросхемы-преобразователя и т.д.
Также можно изготовить самодельный переходник из дата-кабеля старого мобильного телефона, что я и сделал.
Вот он — мой переходник
Вот микросхема, установленная на переходнике
Я вывел наружу необходимые провода с соответствующих контактов и напаял к ним наконечники. Припаял провода я вот таким вот образом
Назначение проводов мы увидим, когда данный переходник будем подсоединять к отладочной плате с контроллером.
Проект в Atmel Studio был создан стандартным образом, назван Test11. Также был организован заголовочный файл main.h, и также были созданы и присоединены два файла для библиотеки usart.h и usart.c, так как интерфейс USART мы будем в дальнейшем очень часто использовать и нам не придётся писать заново код общения с интерфейсом.
На всякий случай приведу содержание файлов проекта, чтобы не было путаницы
Test11.c:
#include «main.h»
//————————————————————
int main(void)
{
USART_Init (8);
while(1)
{
}
}
main.h:
#ifndef MAIN_H_
#define MAIN_H_
#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdio.h>
#include <stdlib.h>
#include «usart.h»
#endif /* MAIN_H_ */
usart.c:
#include «usart.h»
usart.h:
#ifndef USART_H_
#define USART_H_
#include «main.h»
#endif /* USART_H_ */
В следующей части занятия мы перейдём непосредственно к сочинению исходного кода для использования шины USART.
Предыдущая часть Программирование МК AVR Следующая часть
Программатор и переходник USB-TTL можно приобрести здесь:
Программатор USBASP USBISP с адаптером USBASP USBISP 3.3 с адаптером
Переходник USB-TTL лучше купить такой (сейчас у меня именно такой и он мне больше нравится)
Смотреть ВИДЕОУРОК в RuTube (нажмите на картинку)
Смотреть ВИДЕОУРОК в YouTube (нажмите на картинку)
Здраствуйте. Покажите пожалуйста как настроить USART на arduino pro mini (atmega 328P).
Вот здесь настраиваем
https://narodstream.ru/avr-urok-39-akselerometr-lsm6ds3-chast-1/