Найти в Дзене
Электроника и жизнь

Особенности работы с аппаратным UART (RX,TX) на примере ATtiny2313

Оглавление

Здравствуйте, уважаемые читатели!

В прошлой статье (Микроконтроллер ATtiny2313. Обзор, программирование, сравнение с другими микроконтроллерами) я рассказывал о характеристиках микроконтроллера ATtiny2313. Мы разбирали его прошивку с помощью Arduino UNO и USBasp программатора. В статье я отметил, что данный микроконтроллер, в отличие от ATtiny13/25/45/85 не говоря уже о ATtiny10, обладает аппаратным UART.

Аппаратный UART на ATtiny2313
Аппаратный UART на ATtiny2313

Сегодня поговорим что такое UART, как с ним работать на ATtiny2313 и какие это может дать нам преимущества.

Что такое UART?

Как следует из названия UART – это Универсальный асинхронный приёмопередатчик (Universal Asynchronous Transmitter Receiver). Т.е. это интерфейс, который позволяет соединенным друг с другом устройствам обмениваться информацией.

Обмен происходит по двум линиям связи. Одна для приема информации (RX), вторая для передачи информации (TX). Подключать нужно RX одного устройства к TX другого и RX второго к TX первого. Важно, чтобы оба связанных устройства имели общую землю.

Подключение двух устройств для передачи данных
Подключение двух устройств для передачи данных

В данном случае Скорость передачи данных измеряется в битах в секунду или сокращенно БОД. Т.е. то, что мы видим в мониторе порта 9600 и остальные значения бод – это и есть число передаваемых бит за секунду.

Выбор скорости передачи в Мониторе порта
Выбор скорости передачи в Мониторе порта

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

Передаваемый байт (всегда больше 8 бит)
Передаваемый байт (всегда больше 8 бит)

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

Т.е. в случае работы в среде Arduino IDE скорость в Мониторе порта должна быть такая же, как и при инициализации библиотеки Serial. Т.е. в данном случае 9600 бод. Именно эту скорость мы и возьмем за основу в дальнейшем.

Аппаратный и программный UART

Существует как аппаратный так и программный UART. Т.е. в том случае, если у микроконтроллера нет аппаратного UART (как например у ATtiny13/25/45/85), либо мы не хотим занимать аппаратный UART и организовать еще один канал обмена данных с устройством, подключается программный UART.

Подключение программного UART осуществляется через стандартную для Arduino IDE библиотеку SoftwareSerial. Программном UART я рассказывал в статье (ATtiny85 и монитор порта в Arduino IDE).

Но в данной статье мы будем обсуждать аппаратный UART. Он обладает рядом преимуществ перед программным:

1. Не тратится флэш-память микроконтроллера.

Библиотека, организующая программный UART SoftwareSerial, занимает около 800 байт, что довольно много, особенно если речь идет о микроконтроллерах серии ATtiny.

2. Не тратятся ресурсы микроконтроллера

Здесь стоит уточнить, что не тратятся те ресурсы, которые мы рассчитываем задействовать в своих скетчах. Т.е. непосредственно время выполнения скетча не будет тратится на отправку/прием данных. Данные будут поступать и отправляться в фоновом режиме. Поступающие байты данных сохраняться в буфере, пока мы их оттуда не заберем, либо их не вытеснят оттуда новые данные.

3. Есть возможность обновления прошивки через USB-TTL преобразователь.

Подробнее о USB-TTL преобразователе я расскажу в статье об Arduino Pro Mini.

USB-TTL преобразователь
USB-TTL преобразователь

Проблемы при работе с UART на ATtiny2313

Зачастую сигнал передаваемый с ATtiny2313 или похожих микроконтроллеров передается с наличием ошибок.

Ошибка при передаче по UART
Ошибка при передаче по UART

Скорость работы приемника и передатчика для качественного сигнала должна быть одинакова. Допускаются лишь незначительные отклонения. Но внутренний тактовый генератор ATtiny2313 не очень точный, и отклонения в его работе могут влиять на скорость работы UART и, следовательно, на качество передачи информации.

Первый вариант решения проблемы – добавление внешнего кварцевого резонатора.

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

Согласно распиновке ATtiny2313 кварцевый резонатор подключается к 4 и 5 ножке.

Подключение кварцевого резонатора
Подключение кварцевого резонатора

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

Изменяем источник тактирования на внешний
Изменяем источник тактирования на внешний

Так что сначала нажимаем Записать загрузчик. А после этого Загружаем через программатор скетч передачи данных.

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

Сигнал передается правильно
Сигнал передается правильно

Второй вариант – использование специального скетча (ссылка на скетч в конце статьи), который работает непосредственно с регистрами без использования Ардуиновских функций. В коде скетча в начале определяется частота работы микроконтроллера (8 МГц), заданная скорость работы UART (9600). А далее по формуле рассчитывается значение в зависимости от установленной часты и скорости. С этим значением мы уже и проводим инициализацию UART.

Скетч (ссылка в конце статьи)
Скетч (ссылка в конце статьи)

В этом случае, можно не использовать кварцевый резонатор, а работать от внутреннего источника тактирования.

После загрузки скетча, снова видим, что данные выводятся в Монитор порта без помех. К тому же скетч позволяет существенно экономить место в памяти микроконтроллера.

Сигнал передается правильно
Сигнал передается правильно

Наглядно посмотреть данную особенность работы с UART на ATtiny2313 можно в размещенном ниже видео:

Ссылка на скетч - https://disk.yandex.ru/d/m_e0-HlLPEHY8g

_________________________________________________________

Спасибо, что дочитали до конца! Если статья понравилась, нажмите, пожалуйста, соответствующую кнопку. Если интересна тематика электроники и различных электронных самоделок, подписывайтесь на канал. До встречи в новых статьях!

Другие публикации по теме:

  • Микроконтроллер ATtiny2313. Обзор, программирование, сравнение с другими микроконтроллерами
  • USBasp программатор. Обзор, установка драйвера, прошивка микроконтроллера