AVR Урок 14. USART. Связь МК с ПК. Часть 1



 

Урок 14

Часть 1

 

USART. Связь МК с ПК

 

Сегодня мы начнём изучение программирования очень интересного интерфейса — это интерфейс USART.

USART (Universal Synchronous-Asynchronous Receiver-Transmitter (универсальный синхронно-асинхронный приемопередатчик)) — это такая последовательная шина, понодуплексовый обменный интерфейс, который необходим для «общения» между собой двух устройств. Как правило используется для обмена данными между устройствами на контроллерах и ПК. Но вполне подходит и для связи между двумя микроконтроллерами, а также для связи любых устройств, где данная шина поддерживается.

Также USART называют UART (Universal Asynchronous Receiver-Transmitter (универсальный асинхронный приемопередатчик)), как он до какой-то поры и назывался. Просто во второй аббривиатуре отсутствует синхронизация. До появления синхронного UARTа шел обмен только по двум проводам, а потом в данный интерфейс добавили ещё шину синхронизации. Но до сих пор большинство программистов её не исползуют, Данные и так нормально доходят. Достигается это равенством скоростей на приёмном и передающим устройстве а также некотроыми определёнными битами в протоколе.

Вот таким образом данный интерфейс организован в микроконтроллере Atmega8

 

image01

 

Как мы видим из данной структурной схемы, в USART используются три основных выхода RxD, TxD и XCK.

RxD — это ножка для приема информации.

TxD — ножка для передачи информации.

XCK — ножка синхронизации.

Так как мы не будем использовать синхронный режим, то третью ножку мы не подключаем.

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

 

 

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

 

image02

 

Это ножки 2 и 3. Мы, конечно, можем использовать и другие ножки, но это уже будет программный USART, никак не связанный с тем, который мы рассматриваем. Аппаратный. как известно, всегда лучше по всем показателям.

Как же мы можем связать между собой по интерфейсу USART два устройства? Два устройства связываются посредством прямого подключения ножки TxD одного устройства к ножке RxD другого и, наоборот, Ножку RxD одного устройства мы подключаем к ножке TxD другого. То есть данные с выхода одного устройства попадают во вход другого и наоборот. Всё это можно наглядно представить в виде вот такой схемы

 

image03

 

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

 

image04

 

Данные прерывания происходят в случае когда закончен приём или передача данных, либо когда опустеет регистр данных.

 

 

Тепрь давайте рассмотрим, как именно передаются данные по шине USART. Обычно это называют протоколом интерфейса

 

image05

 

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

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

В начале диаграммы мы видим, что когда шина не используется и данные по определённому проводу не передаются или не принимаются в зависимости от назначения контакта, то данный контакт находится в высоком состоянии. Как ещё принято говорить, что пассивное состояние на шине высокое. Дальше идёт обязательный стартовый бит. Как видим, он направлен вниз, то есть в это время контакт переходит из высокого состояния в низкое. Сколько времени длиться данный бит, подсчитать немудрено. Нужно 1 секунду разделить на скорость, установленную для передачи и приёма данных, которая измеряется в битах в секунду ну или, как ещё называют, в бодах.После того, как время стопового бита истечёт, конроллер будет считать следующие биты информационными. Их может быть от пяти до девяти в зависимости от режима. Вообще, чаще всего используется именно 8, так как удобнее всего данные передавать байтами. Ну здесь уже состояние ножки во время передачи определённого информационного бита будет диктоваться собственно самим информационным битом. То есть если надо передать единицу — то высокое, если ноль — низкое. Важно заметить также что передача информационных битов начинается с самого младшего, и затем более старшие.

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

Затем идут стоповые биты, гласящие о том, что передача посылки закончена. Данных битов может быть один или два также в зависимости от режима. Данные биты передаются с помощью организации высокого логического состояния на ножке. И затем процесс повторяется сначала, то есть передаём следующую посылку.

Следующая таблица нам расскажет уже о том, каким образом мы можем задавать скорость нашей шины. Скорость задаётся числом, которое мы заносим в регистр UBRR

 

image06

 

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

Теперь различие в таблице первой и второй строки. Существует ещё бит U2X в определённом регистре, который при нулевом значении никак не влияет на скорость обмена, а при значении 1 он скорость удваивает. За счёт этого в формуле в знаменателе будет уже не 16, а 8.

Несмотря на поправку за счет стоповых и стартовых битов, следует стараться выбирать величину значения регистра UBRR и бита U2X так, чтобы процент был меньшим. Поможет нав в этом ещё одна таблица из технической документации на контроллер (нажимайте на картинки для увеличения изображения)

 

image07_0500

image08_0500

image09_0500

image10_0500

 

Ну вот мы потихоньку немного разобрались с шиной USART, с её протоколами и немного уже коснулись её организации в контроллере и некоторых регистров, за эту шину отвечающих.

В следующей части мы продолжим знакомство с регистрами контроллера, отвечающими за USART, а также с переходником, который и будет нам данный интерфейс организовывать между компьютером и микроконтроллером, так как у ПК данного интерфейса нет, использовать мы будем шину USB. Она-то точно есть у каждого современного ПК.

 

 

Предыдущий урок Программирование МК AVR Следующая часть

 

Программатор и переходник USB-TTL можно приобрести здесь:

Программатор (продавец надёжный) USBASP USBISP 2.0

Переходник USB-TTL лучше купить такой (сейчас у меня именно такой и он мне больше нравится)

 

 

Смотреть ВИДЕОУРОК (нажмите на картинку)

 

AVR USART. Связь МК с ПК

8 комментариев на “AVR Урок 14. USART. Связь МК с ПК. Часть 1
  1. Юрий:

    И где видео 14.1?? Почему сразу 14.5?? Очевидно какая-то ошипка закралась.

  2. Добрый день!
    Помог7ите пожалуйста разобрать с UART-ом.
    у меня ATmega8535 16 PU

    • Ерлан, здравствуйте!
      Скорее всего Вы писали в комментариях к видео. Я написал там, что надо первым делом сделать. Разобраться с фьюзами, а также проверить с помощью логического анализатора скорость передачи.

  3. Добрый день!
    Помог7ите пожалуйста разобрать с UART-ом.
    у меня ATmega8535 16 PU
    Всячески отказывается работать, выставляю настройки и выдает в окне терминал какие то квакозябры.
    Литературы начитался, каша в голове. Не могу расставить все на места.
    Нив какую не хочет работать.

  4. Фёдор:

    Добрый день!

    Подскажите пожалуйста в чем разница между положительным и отрицательным значением ошибок ( какую роль играет минус) ?

  5. Miha82:

    Здравствуйте, напроч застрял на 4ом уроке по USART, в терминал сыплет краказябры, уже замучился с фьюзами, с настройкой скорости, недавно попробовал отправить АА, т.е 10101010, чтобы измерить частоту, мой мультиметр отказался измерять её, но заметил что терминал в двоичном виде на скорости которую мы задаём контролеру (115200) выдаёт стабильно 00010101, я так понимаю не с того места начинает считывать байт? Подскажите где копать пожалуйста. Спасибо за Ваши огромные труды!!!

    • Miha82:

      Ура!!! Победа!!! Решение оказалось как всегда там где его меньше всего ждали. Переходник UART-USB, попробовал новый и о чуду всё работает, хотя не пойму что нужно старому переходнику, почему я на него не думал, потому что соединял Rx и Tx и на выходе был чёткий связный текст который я отправлял, а не кракозябры какие он принимал с МК, а что с переходником то, кто-нибудь подскажет? Выкинуть его или пригодится ещё?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*