Работа с UART

Путешествуя по радиолюбительским форумам я заметил, что тема использования UART в микроконтроллерах достаточно востребована, т.е. у народа, видимо, возникают проблемы при использовании этого интерфейса. И, хотя, я не отношу свой сайт к категории «для начинающих», тему эту решил раскрыть на простейшем примере. И ещё решил заодно показать, как я обхожусь без COM-порта на своём нетбуке. Для опытов извлеку из недр стола ATmega32, а то он чё-то обделён вниманием:) Сразу скажу, что теорию UART, а также его построение в микроконтроллерах я рассказывать не буду — информации уйма в сети и литературе. Да и в даташитах хорошо всё расписано.
Ставим следующую задачу… Нужно организовать обмен микроконтроллера с ПК по последовательному интерфейсу. При приёме символов с ПК микроконтроллер выводит их на индикатор — так мы проконтролируем правильность приёма. При приёме определённых символов, микроконтроллер в ответ должен послать сообщение — так мы проконтролируем правильность передачи.
Работаем, как и всегда, в пакете WinAVR. Параллельно с Programmers Notepage открываем даташит того контроллера, для которого пишем код. Замечательно то, что инженеры ATMEL уже за нас написали код для работы с UART как на ассемблере, так и на С. И нам остаётся просто скопировать фрагменты для инициализации, передачи и приёма
себе в файл.
Потом быстренько набросаем что-то типа этого
и соберём макет из элементов микроконтроллерного конструктора. Для обмена со стороны ПК, вернее нетбука ASUS EeePC 12.1 inch, я использую программу Terminal v1.9b — 20041226 — by BR@y++, т.к. мне она нравится за удобство. А в принципе, можно применить любую, какая у вас есть, терминальную программу. Посылка символов в микроконтроллер и приём на нетбук подтвердили верный ход наших действий, что и отображено на photo_1 и на fig_4.
Поскольку в нетбуке не имеется COM-порта, для его эмуляции я использую преобразователь на FT232. Скажу вам очень хорошая вещь! Интересно, что если покупать такой преобразователь готовый, т.е. собранный, цену за него ломят более 100 грн! Плата отдельно стоит 8 грн, и сама микросхема 30 грн, так что вывод однозначный. В пользу преобразователя говорит ещё то, что на плате есть выводы всех сигналов COM-порта, и DTR, и RTS и остальных. Кроме того имеются выводы питания 5 или 3,3 В, а также имеется возможность работы с 3,3 — вольтовой логикой, нетолерантной к 5 В (переключается джампером). Удобные штырьковые выводы позволяют соединяться проводниками микроконтроллерного конструктора, кроме того, имеется ещё плата расширения для коммутации розетками и вилками DB9. Вот и вся петрушка! Советую оформлять такие наработки отдельными файлами — тогда при разработке чего-то нового вам останеться только подключить их в makefile и в заголовочном файле поменять используемые ноги при необходимости. Всем удачи!
2.12.2011. Добавил архив с исходниками для данного проекта. Выводы, используемые для подключения ЖКИ смотрим в заголовочном файле lcd.h, учитываем, что используем для шины данных ЖКИ  младшие разряды порта микроконтроллера (смотрим в файле lcd.c). К преобразователю уровня RS-232/UART соединяемся крест накрест, т.е TxD контроллера к RxD преобразователя, а RxD контроллера к TxD преобразователя. Указанные выводы определяем по даташиту. Преобразователь уровней может быть как у меня USB-UART, а может быть COM-UART, если  у Вас имеется COM-порт. В таком случае применяйте MAX232 (включение смотрим по даташиту). Не забываем на макет подать питание.

Запись опубликована в рубрике Микроконтроллерный конструктор с метками , . Добавьте в закладки постоянную ссылку.

16 комментариев: Работа с UART

  1. ROM говорит:

    Ничего конкретного! + код в принскринах — это плохо!

  2. s_black говорит:

    А что Вам нужно более конкретное? Рассказать что такое разряд в регистре?

  3. ROM говорит:

    Та хотя бы схему, не будем же мы конструктор постоянно вешать в рабочее устройство.

  4. s_black говорит:

    Добавил архив с исходниками. Удачи Вам!

  5. ROM говорит:

    Спасибо

  6. s_black говорит:

    Я буду рад, если Вам помогли мои советы!

  7. UserL говорит:

    Я використовую блютуз адаптер. З ноута конектчусь до модуля і маю СOM порт з гальванічною розвязкою.

  8. ROM говорит:

    А можна детальніше ?

  9. UserL говорит:

    Купив Бездротовий 56к модем на якому є вибір комутації на RS-232 або bluetooth і його переробив.

    https://plus.google.com/u/0/109347027928302734826/posts/UVhsdFzLRza
    https://plus.google.com/u/0/109347027928302734826/posts/9LixTatfFmg

  10. s_black говорит:

    To ROM. Про що детальнiше?

  11. vanuha_63 говорит:

    Здравствуйте,коллеги. Подскажите, как сделать мультимастерную сеть типа RS-485 на микроконтроллерах AVR. Поиски по нету не дали ничего конкретного.Требуется сеть на несколько «слейвов» (до 8) с одним мастером. С USARTом понятно более-менее, загвоздка- как сделать обработку адресов при двустороннем обмене. Обмен предпологается такой- 4 байта от ведущего подчиненным и столько-же в обратном направлени. По физической части -подключение в шину RS-485 все понятно, а вот как спрограмить никак не соображу. Заранее благодарю за любую помощь.

  12. s_black говорит:

    Вопрос несколько непонятен… Как можно сделать «мультимастерную сеть» с «одним мастером» ? И в чём сложность с обработкой адресов?

  13. vanuha_63 говорит:

    Сформулируем вопрос по другому.Имется AtMega16 -с него требуется передать по конкретному адресу другому контроллеру ( AtMega8 или AtTiny 2313) 4 байта и сразу принять от этого контроллера 4 байта. И так по очереди несколько ( до 8 ) «периферийных» контроллеров. Есть идея замутить что-то вроде » умный дом» ( часы; регуляторы температуры, исполнительные реле, измерение влажности, и т. д). В програмировании AVR я новичок. Повторил несколько готовых проектов, некоторые доработал аппаратно и програмно. В инете есть много схем , реализующих связь по USART типа МК-комп, а вот сетевых решений мне не попадалось . Максимальная длина линии связи предпологается 50 метров, поэтому RS-485, хотя для передачи \ приема нескольких байт дорговато, но другие интерфейсы (I2S ; SPI) не имеют нужной дальности связи. Название «мультимастерная» прочитал в книге по AVR, автора сейчас не вспомню. Там так называлось подключение нескольких контроллеров по USART .

  14. s_black говорит:

    Ну, я вижу это где-то так… При инициализации обмена мастер выдаёт сначала адрес устройства. Слейвы постоянно «слушают» сеть, и при приёме своего адреса оный выдаёт байт подтверждения готовности к обмену. После этого мастер выдаёт информационные байты и байт подтверждения готовности принять байты от этого слейва. Слейв выдаёт информационные байты мастеру.
    Хотя можно всё это сделать и без байтов готовности и подтверждения, просто посылая адресный байт, а за ним информационные. Короче — вариантов немеряно, можете выдумать себе любой.

  15. maxteam говорит:

    здравствуйте!.

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

  16. s_black говорит:

    Здесь я купил плату и скачал документацию

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

Ваш e-mail не будет опубликован.