Главная » Микроконтроллеры
Призовой фонд
на октябрь 2020 г.
1. 1500 руб
Сайт Паяльник
2. Тестер компонентов MG328
Сайт Паяльник
3. 150 руб.
От пользователей


Управление рольставнями и рулонными шторами Tuya Smart Life Wi-Fi. Поддержка голосовых помощников Яндекс Алиса, Google Home, Alexa

Урок 10. Работа с UART интерфейсом

В этом уроке я расскажу про UART интерфейс в микроконтроллерах AVR и про работу с ним в BASCOM-AVR. UART это универсальный асинхронный приёмопередатчик. Сам интерфейс достаточно распространён и имеется практически во всех AVR микроконтроллерах, исключения лишь составляет микроконтроллер Attiny13 и еще некоторые. Передача данных осуществляется по биту в равные промежутки времени, этот промежуток времени задаётся скоростью в бодах, вот например стандартные скорости: 4800 бод, 9600 бод, 19200 бод, 38400 бод и т.д. Следует также учесть, что скорость должна быть одинаковой с обеих сторон подключения. Кстати приёмник и передатчик работают независимо. Подключение UART осуществляется по трём линиям: RXD – приём, TXD – передача и GND – общий (минус). Подключать UART надо, так сказать "наоборот" RXD к TXD, а TXD к RXD как на картинке ниже:

Подключение UART

С помощью UART  также можно можно связать микроконтроллер и компьютер, но есть одна проблема: у UART интерфейса логические уровни 0 и +5 вольт, а в компьютере логические уровни в интерфейсе RS-232 могут быть от -25 до -3 вольт и от +3 до +25 вольт. Решить эту проблему нам поможет конвертер уровней, его можно собрать на транзисторах, а лучше использовать специальную микросхему MAX232. Вот самая распространенная схема подключения MAX232:

Конвертер UART уровней на MAX232

Работа с UART в BASCOM-AVR

Прежде всего, перед началом работы с UART нужно указать скорость в бодах, делается это командой: $baud = (скорость). Например: $baud = 9600 .Также не забываем указывать реальную частоту тактового генератора командой $crystal = (скорость Hz), в ином случае скорость работы программы будет не совпадать со скоростью работы микроконтроллера и в итоге приём или передача данных будет неверная. Пример написания команды $crystal на частоту 8МГц: $crystal = 8000000. Кстати, имеет смысл открыть окно настроек в BASCOM-AVR (Options>Compiler>Communications):

Настройки связи в BASCOM-AVR

В этом окне настроек вы можете указать скорость работы UART, тактовую частоту тактового генератора и посмотреть процент ошибок при выбранной тактовой частоте. Но лучше указывать скорость и тактовую частоту непосредственно в самой программе. Кстати процент ошибок при тактовой частоте в 4МГц очень мал (0.16%), но все, же есть. Если вы хотите чтобы процент ошибок был нулевой надо подобрать такую тактовую частоту, которая будет кратна скорости работы UART. Например, при тактовой частоте 3.6864 МГц и скорости работы UART в 115 200 бод процент ошибок будет нулевым.

И так, после указания тактовой частоты и скорости работы UART можно приступить к работе с самим интерфейсом. Чтобы послать, что-либо в UART есть команда Print (переменная или текст в кавычках), вот пример её использования: Print "Hello, world!". Кроме текста в кавычках можно выводить и переменные, причём сразу несколько разделяя точкой с запитой, например: Print "Weight:" ; a ; "kg" или так Print "Hello," ; "world!" . Также с UART можно и принять, делается это командой Input (текст или переменная в кавычках для посылки), (переменная, куда записывать полученные данные). Как видим всё очень просто: сначала пишем в кавычках текст, который передастся в UART, а потом указываем переменную, в которую запишутся данные полученные данные из UART. Вот пример: Input "Weight:", a

Работа с UART на практике

Ну а теперь попробуем "порулить" UART на практике, сначала соберём простую схему:

Схема для работы с UART

Потом наберём простую программку, (используя полученные знания) и откомпилируем её. Вот и она:

$crystal = 8000000
$baud = 9600

Dim A As Byte

Print "Hello, world!"
Print "Hello http://cxem.net"
Input "Size:" , A
Print "Size=" ; A ; "bytes"

End

А работать эта программка будет так: сначала будет посылать в UART текст, а потом будет ждать приёма данных (в данном случае числа) которые запишутся в переменную a и позже пошлёт текст вместе с переменой. Для тех, кому лень компилировать, в файлах к уроку есть готовая прошивка. Прошиваем микроконтроллер, подключаем выводы микроконтроллера RXD, TXD (подключаем, как я писал выше) и GND к COM порту компьютера (через конвертер уровней) или к USB (USB – UART переходник), открываем на компьютере программу для работы с COM портами, например: Terminal by Bray, Hyper Terminal или Terminal emulator в BASCOM-AVR, указываем COM порт к которому подключились, указываем скорость в бодах, смотрим в окно программы, подаём питание на микроконтроллер и радуемся. Необходимо также учесть, что после прошивки микроконтроллера необходимо установить фьюз биты на нужную нам тактовую частоту генератора в данном случае (для программки выше) на 8МГц. На 8МГц можно использовать внутренний тактовый генератор микроконтроллера и установить фьюз биты вот так (для PonyProg2000):

Фьюз-биты для PonyProg2000

В железе:

mc129-6.jpg

На фотографии у меня плата для программирования Attiny2313, USB-UART переходник и программатор USBtiny. Ниже вы можете посмотреть видео, как это работает

Файлы для урока (проект в Proteus, исходник, прошивка) прилагаются

Прикрепленные файлы:

Теги:

Яковлев Александр Вячеславович Опубликована: 2012 г. 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (6) | Я собрал (0) | Подписаться

0
Игорь #
Практикуюсь на mega8. Решил сделать вышеописанное на ней. Скомпилировал, зашил программу, выставил фьюзы как написано. В терминале не единного символа. МК рабочий, COM-порт тоже. Что посоветуете?
Ответить
0
Ансаган #
Тут косяк в соединений мах 232, сделайте соединение 2-3 на 3-2 крест на крест и на выходе макс 232 тоже крест на крест. Я день потерял, тоже символы не отправлял в порт. Но сделал как выше заработала сразу.
Ответить
0
Олег #
А почему никто на такую мелочь как сопротивления на фото не обращает внимание? Они для чего и какого номинала?
Мучаюсь давно согласованием UART AVR и мобильника... Данным решением планирую проверить схему и AVR
Ответить
0
Ансаган #
В смысле какого сопротивления? Я не вижу в схеме резистора. ткните пальцем может я не увидел
Ответить
0
siimao #
На фото показал, в схеме не указаны.
У меня не согласуется, как подозреваю, Siemens M35 и Attiny2313... Придет из Китая осциллограф буду проверять сигналы с МК. Но был момент, что работало при подаче напряжения на МК с мобильника; после чего решил унифицировать схему согласованием... Мобильник продолжает работать с проектом в Протеус.
Спасибо.
Прикрепленный файл: mc129-6.jpg
Ответить
0
Ансаган #
Друг проверь соединения RX и TX я же выше писал что косяк. По этой схеме посмотри другие схемы с интернета.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется напряжение?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Pickit 2 - USB-программатор PIC-микроконтроллеров
Pickit 2 - USB-программатор PIC-микроконтроллеров
Мультиметр Mastech MS8268 UNI-T UT-61A
вверх