Здравствуйте, уважаемые читатели!
В прошлой статье (Микроконтроллер ATtiny2313. Обзор, программирование, сравнение с другими микроконтроллерами) я рассказывал о характеристиках микроконтроллера ATtiny2313. Мы разбирали его прошивку с помощью Arduino UNO и USBasp программатора. В статье я отметил, что данный микроконтроллер, в отличие от ATtiny13/25/45/85 не говоря уже о ATtiny10, обладает аппаратным UART.
Сегодня поговорим что такое UART, как с ним работать на ATtiny2313 и какие это может дать нам преимущества.
Что такое UART?
Как следует из названия UART – это Универсальный асинхронный приёмопередатчик (Universal Asynchronous Transmitter Receiver). Т.е. это интерфейс, который позволяет соединенным друг с другом устройствам обмениваться информацией.
Обмен происходит по двум линиям связи. Одна для приема информации (RX), вторая для передачи информации (TX). Подключать нужно RX одного устройства к TX другого и RX второго к TX первого. Важно, чтобы оба связанных устройства имели общую землю.
В данном случае Скорость передачи данных измеряется в битах в секунду или сокращенно БОД. Т.е. то, что мы видим в мониторе порта 9600 и остальные значения бод – это и есть число передаваемых бит за секунду.
Но так как каждый передаваемый байт помимо бит данных обязательно содержит еще стартовый бит, стоп бит и, иногда биты четности, то чтобы узнать сколько байт мы передадим за секунду установленную скорость нужно делить не на 8, а минимум на 10.
Важным условием является то, что и приемник и передатчик должны быть настроены на одинаковую скорость работы, и эта скорость должна сохраняться постоянной во время всего сеанса передачи данных. Иначе данные либо перестанут передаваться, либо будут передаваться с ошибкой.
Т.е. в случае работы в среде 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.
Проблемы при работе с UART на ATtiny2313
Зачастую сигнал передаваемый с ATtiny2313 или похожих микроконтроллеров передается с наличием ошибок.
Скорость работы приемника и передатчика для качественного сигнала должна быть одинакова. Допускаются лишь незначительные отклонения. Но внутренний тактовый генератор ATtiny2313 не очень точный, и отклонения в его работе могут влиять на скорость работы UART и, следовательно, на качество передачи информации.
Первый вариант решения проблемы – добавление внешнего кварцевого резонатора.
Номинал кварца нужно выбирать из тех, что поддерживает библиотека работающая с микроконтроллером.
Согласно распиновке ATtiny2313 кварцевый резонатор подключается к 4 и 5 ножке.
После этого в настройках платы нужно обновить тактирование с внутреннего источника на внешний, соответствующий номиналу кварцевого резонатора. В моем случае это 16 МГц. Эти изменения станут доступны только после перепрошивки загрузчика.
Так что сначала нажимаем Записать загрузчик. А после этого Загружаем через программатор скетч передачи данных.
После этого можно открыть Монитор порта и убедиться, что информация передается правильно, без помех.
Второй вариант – использование специального скетча (ссылка на скетч в конце статьи), который работает непосредственно с регистрами без использования Ардуиновских функций. В коде скетча в начале определяется частота работы микроконтроллера (8 МГц), заданная скорость работы UART (9600). А далее по формуле рассчитывается значение в зависимости от установленной часты и скорости. С этим значением мы уже и проводим инициализацию UART.
В этом случае, можно не использовать кварцевый резонатор, а работать от внутреннего источника тактирования.
После загрузки скетча, снова видим, что данные выводятся в Монитор порта без помех. К тому же скетч позволяет существенно экономить место в памяти микроконтроллера.
Наглядно посмотреть данную особенность работы с UART на ATtiny2313 можно в размещенном ниже видео:
Ссылка на скетч - https://disk.yandex.ru/d/m_e0-HlLPEHY8g
_________________________________________________________
Спасибо, что дочитали до конца! Если статья понравилась, нажмите, пожалуйста, соответствующую кнопку. Если интересна тематика электроники и различных электронных самоделок, подписывайтесь на канал. До встречи в новых статьях!
Другие публикации по теме:
- Микроконтроллер ATtiny2313. Обзор, программирование, сравнение с другими микроконтроллерами
- USBasp программатор. Обзор, установка драйвера, прошивка микроконтроллера