Tx rx подключение usb

Обновлено: 04.07.2024

Универсальный асинхронный приёмопередатчик (Univsersal Asynchronos Reciever-Transmitter) - это физическое устройство приёма и передачи данных по двум проводам. Оно позволяет двум устройствам обмениваться данными на различных скоростях. В спецификацию UART не входят аналоговые уровни на которых ведётся общение между устройствами, UART это протокол передачи единиц и нулей, электрическую спецификацию на себя берут другие стандарты, такие как TTL (transistor-transistor logic — транзисторно-транзисторная логика), RS-232, RS-422, RS-485 и другие (RS [англ.recommended standard] — рекомендованный стандарт). На данный момент в микроконтроллерах используется в основном TTL (или точнее CMOS) UART для соединения не более двух устройств. В наших примерах мы часто называем его последовательным портом.

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

У каждого устройства, поддерживающего UART обычно обозначены два вывода: RX и TX. TX — означает transmit (передаю), RX — receive (принимаю). Отсюда становится понятно что RX одного устройства нужно подключать к TX другого. Если Вы подключите RX одного устройства к RX другого, то оба устройства будут слушать друг друга, вы соединили их входы. Если соединить TX и TX - это уже более опасно, это выходы низкого сопротивления устройств и если на одном будет логическая единица, а на втором ноль — по проводу пойдёт ток короткого замыкания (это зависит от конкретной программной или аппаратной реализации). Хотя в современных чипах от этого есть защита, на всякий случай, не стоит на неё ориентироваться. Так же необходимо объединить референсные уровни двух устройств (GND-GND), если не подразумевается гальваническая развязка.


Пример соединения двух UNO:


UART на Arduino:

На Arduino и Arduino-совместимых платах аппаратный UART обозначается символами RX и TX рядом с соответствующими выводами. На Arduino UNO/Piranha UNO это 0 и 1 цифровые выводы:

Arduino UNO/Piranha UNO


В скетче инициализируется функцией begin() в коде функции setup():

Пример:

Piranha ULTRA

На Piranha ULTRA присутствуют два аппаратных UART. Один на тех же выводах, что и UNO, второй на 8 (RX) и 9 (TX) выводах:


В Arduino IDE второй аппаратный UART называется Serial1 (Сериал один), и инициализируется так же как и первый:

Arduino MEGA


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

Отладка проектов при помощи UART

Пример:

Программный UART на Arduino

Помимо аппаратного UART в Arduino можно использовать программный. Программный порт хорошо подходит для простых проектов, не критичных к времени работы кода или для отладки проектов, позволяя не отключать модули использующие UART во время загрузки сетчей. При его использовании нужно лишь помнить что никакой другой код не может выполняться пока программа занимается считыванием данных из него и передача может осуществляться только в полудуплексном или симплексном режимах. Так же на программный RX можно назначать только те выводы, которые поддерживают прерывание по смене уровней. На UNO, например, это все цифровые выводы, кроме 13-го. Прежде чем собирать свой проект, проконсультируйтесь с инструкцией к конкретной плате.

Пример использования программного порта:

Далее к программному порту нужно обращаться через объект mySerial . Например: mySerial.write(data); .

UART на Raspberry Pi:

На Raspberry Pi UART находится на выводах колодки 8 - TX (GPIO14) и 10 - RX (GPIO15)


Перед работой с последовательным портом необходимо его включить. Сделать это можно из эмулятора терминала командой sudo raspi-config -> Interfacing options -> Serial -> No -> Yes -> OK -> Finish или из графической среды в главном меню -> Параметры -> Raspberry Pi Configuration -> Interfaces -> Serial Port

Пример работы с последовательным портом на Python:

Данный пример выводит строку "iArduino.ru" в последовательный порт Raspberry и ждёт данных из последовательного порта.

Подробнее о UART:

Параметры

При обозначении параметров UART принято использовать короткую запись ЦИФРА-БУКВА-ЦИФРА

  • ЦИФРА — количество бит в кадре
    • от 5 до 9 бит. Обычно 8.
    • N - None (Отсутствует) без бита чётности
    • E - Even (Чётный). Проверка данных на чётность. Перед стоп-битом в кадр добавляется бит: 0 если в кадре было нечётное количество единиц, 1 — если чётное.
    • O - Odd (Нечётный). Проверка данных на нечётность. Перед стоп-битом в кадр добавляется бит: 1 если в кадре было нечётное количество единиц, 0 — если чётное.
    • 1, 1.5, 2. Продолжительность стоп-бита (1, 1.5 или 2 битовых интервала)

    Кадрирование данных

    При приёме-передаче данных каждое устройство ориентируется на своё внутреннее тактирование. Обычно это тактирование от 8 до 16 раз быстрее скорости передачи данных и обычно отсчитывается от стартового бита. Именно поэтому необходимо чтобы оба устройства были настроены на одну и ту же скорость передачи.

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

    Рассмотрим кадр данных:

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

    Старт-бит:

    При отсутствии передачи линия удерживается в состоянии логической единицы (в случае TTL Arduino это 5 вольт или Vcc). Как только передающее устройство притягивает линию к 0 (GND или 0 вольт в случае Arduino), это сигнализирует принимающему устройству о том что сейчас будет передача данных.

    Данные:

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

    Стоп-бит:

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

    Скорость передачи данных

    Скорость изменения логических уровней (импульсов) на линии принято измерять в бодах. Единица измерения названа так в честь французского изобретателя Жана Мориса Эмиля Бодо.

    Скорость при использовании UART может быть любой, единственное требование — скорости передающего и принимающего должны быть одинаковы. Стандартная скорость UART принята за 9600 бод. Arduino без проблем и лишних настроек может принимать и передавать данные на скоростях до 115200 бод.

    Методы связи

    UART позволяет одновременно передавать и принимать данные, однако не всегда это возможно или нужно. Например, если Вам нужно только получать не критические данные (которые можно проверить следующим пакетом, например расстояние, посылаемое лидаром каждые несколько сотен миллисекунд) от цифрового датчика или любого другого устройства и не нужно ничего передавать, такой метод называется симплексным. Всего различают три метода связи:

    Для полноценного функционирования устройства Atmega Fusebit Doctor потребовался преобразователь USB-UART.
    Решил собрать модуль преобразователя USB-UART на микросхеме FT232RL. Преобразователь позволяет создать соединение на любом компьютере имеющем USB разъем.
    Обвязка FT232RL минимальна, для работы устройства, помимо самой микросхемы, требуется пара конденсаторов. Также для индикации работы можно повесить 3 светодиода, которые будут сигнализировать о наличии питания, приеме и передаче данных. Само устройство собрано в форме флэшки, поэтому приткнутся к USB-порту можно в любой момент. На выходе устройства на разъем выведены пины Tx и Rx, GND, а также питание +5В, которым можно запитывать подключаемое устройство.
    Схема устройства приведена ниже:


    Вот что, собственно получилось:


    Это печатная плата, файл с макросом этого микроблока для Sprint Layout будет в конце записи.
    После травления:


    После пайки всех деталей:



    Отрезаем провод нужной длины, ставим разъемы типа "папа".




    Устройство USB-UART можно втыкать в USB порт. Операционная система (У меня это Windows 7) сразу найдет новое устройство и предложит найти драйвер. Если имеется подключение к интернету, можно выбрать автоматическую загрузку и установку драйвера, центр обновления windows все сделает сам:


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

    Устанавливать драйвера нужно 2 раза, сперва устанавливается USB драйвер для FT232RL:




    После чего Windows тут же обнаружит еще одно неопознанное устройство, тыкаем ее снова в папочку с драйверами и она находит виртуальный COM порт:



    Проверить работоспособность устройства можно следующим образом: открываем любую терминальную программу, выбираем в настройках COM порт созданный при установке драйвера, замыкаем джампером контакты Rx и Tx, и отправляем любую команду в терминал. Если команда вернулась, значит модуль выполняет свое предназначение. Также при этом должны весело мигнуть светодиоды индикации приема/передачи.

    Программа Terminal 1.9b RS232 (монитор COM порта ПК)
    Для связи AVR и компьютера по UART на компьютере нужна терминальная программа. После работы с разными программами я остановился на «Terminal 1.9b». Очень удобная терминалка. Рекомендую.


    Основные возможности Terminal 1.9b:
    -работает без инсталяции. Вся программа — один exe-файл размером около 300Кб
    -есть счетчик переданных и принятых байтов
    -возможность отправлять файлы
    -помимо стандартных скоростей (baudrate) есть возможность установить свою нестандартную
    -поддерживает до 64 COM-портов
    -можно весь лог работы записывать в файл
    -можно назначить до 24 макросов
    -реализованы Pascalе-подобные скрипты (правда документации по этому скриптовому языку я не нашел. В архиве есть несколько примеров применения скриптов и это все)


    Суть и вообще предназначение Ардуино состоит в быстрой и удобной разработке электронных устройств. Это универсальный контроллер, на базе которого можно сделать законченный девайс (от англ. Device – устройство, прибор) абсолютно произвольного назначения, от полезного (часы-будильник, реле времени с кучей настроек и дисплеем, автоматизацию теплицы, умный дом…) до бесполезного, но забавного или интересного (самонаводящийся вентилятор, машинка на радиоуправлении с пушкой, робот с большим количеством функций и так далее). Для достижения этих целей к Ардуино подключаются различные внешние устройства, с которыми она может взаимодействовать.

    Начнем с мира цифрового, в котором устройства общаются друг с другом при помощи цифровых сигналов, так называемых логических, то есть имеющих два простейших состояния: правда и ложь, да и нет, 1 и 0. В большинстве цифровых устройств эти два состояния передаются напряжением 0 и 5 Вольт, но бывает и 0 и 3.3 Вольта. Таким образом микроконтроллер по сути может измерить цифровой сигнал (что подаётся на ногу, 0 или 5 Вольт), или выдать со своей ноги 0 и 5 Вольт соответственно. Закодированный цифровой сигнал выглядит примерно вот так: скачки 0 и 5 (или 3.3) Вольт с разной продолжительностью.


    Совокупность правил и длин участков 5 и 0 Вольт называют интерфейсом связи.

    Распиновка Nano


    • GPIO – базовый порт ввода-вывода. Может читать и выдавать цифровой сигнал (только 0 и 5 Вольт).
    • PWM – может аппаратно генерировать ШИМ сигнал.
    • ANALOG – пин АЦП, аналогово-цифрового преобразователя. Может измерять напряжение.
    • UART – выводы аппаратного UART для подключения модулей с таким же интерфейсом.
    • I2C– выводы аппаратной шины I2C для подключения модулей с таким же интерфейсом.
    • SPI – выводы аппаратной шины SPI для подключения модулей с таким же интерфейсом.

    Простые цифровые датчики

    К простым цифровым можно отнести любые датчики, имеющие пин с логическим выходом, то есть напряжение на этом пине может быть только 0 или 5 Вольт в зависимости от показания датчика. Это например ИК датчик движения, кнопка, датчик линии, энкодер, а также практически все остальные датчики с пинами питания и выходом, помеченным как DO, OUT или S.

    Такие модули подключаются в любые GPIO пины.

    Интерфейсы

    Некоторые датчики имеют цифровой выход, но выдают не просто 0 и 5V, а передают данные по цифровому интерфейсу связи. Сигнальные пины таких датчиков могут быть подписаны как SCK, SDA, SCL, MISO, MOSI, SS и прочими аббревиатурами. Для работы с такими датчиками нужно обязательно смотреть примеры или документацию. По сути любой такой датчик можно подключить на любой GPIO пин и программно эмулировать нужный интерфейс связи, что сложно и будет отбирать лишнее процессорное время. Arduino Nano поддерживает несколько интерфейсов аппаратно, то есть позволяет работать с ними очень быстро и эффективно.

    UART – пины D0 (RX) и D1 (TX). По нему чаще всего подключаются Bluetooth, GPS и GSM модули. В общем случае поддерживает подключение только одного модуля. Пины на модуле называются обычно RX и TX. Подключение к модулю осуществляется “наоборот” – RX->TX и TX->RX, так как RX принимает сигналы (Receiver), а TX – передаёт (Transmitter). Для подключения нескольких UART модулей или одновременной работы модуля и “монитора порта” используют программный UART при помощи встроенной библиотеки SoftwareSerial.

    I2C (Wire)

    I2C – пины A4 (SDA) и A5 (SCL). Данный интерфейс является шиной, то есть к нему можно подключить параллельно сразу несколько (до 128) устройств с уникальными адресами.

    Варианты маркировки и подключение к аппаратному I2C:

    • A4 < SDA (D) – линия данных, Serial DAta
    • A5 < SCL (C, SCK) – линия синхронизации, Serial CLock


    SPI – пины D11 (MOSI), D12 (MISO) и D13 (SCLK), иногда добавляется D10 (SS). Данный интерфейс также является шиной, причём высокоскоростной, и поддерживает подключение по сути неограниченного количества модулей: у модуля есть пин CS (Chip Select), который прижимается микроконтроллером к GND для выбора данного модуля в качестве устройства приёма и передачи данных в текущий момент. SPI – очень распространённый и простой интерфейс, очень часто датчики и модули подключают к любым GPIO пинам и используют программную отправку и приём данных через встроенные функции shiftIn() и shiftOut(). “Сложные” датчики и датчики с большим объёмом и высокой скоростью передаваемых данных (карта памяти, NFC модуль) нужно подключать к аппаратной шине SPI микроконтроллера.

    Варианты маркировки и подключение к аппаратному SPI:

    • D11 < MOSI (SDI, DI, DIN, SI) – линия данных от Ардуино к модулю
    • D12 < MISO (SDO, DO, DON, SO) – линия данных от модуля к Ардуино
    • D13 < SCLK (SCK, CLK, SPC) – линия синхронизации
    • D10 < SS (SCK, CLK, SPC) – используется в случаях, когда Ардуино является “датчиком”
    • GPIO < CS (SS, RCK) – выбор текущего модуля прижатием этого пина к GND


    Другие

    Помимо этих трёх популярных интерфейсов существуют и другие (CAN, 1-wire и прочее), но так как у нас есть сила микроконтроллера, мы можем эмулировать практически любой протокол и интерфейс связи, так называемый software <название интерфейса> (softwareSerial, softwareI2C…). И тут на помощь приходит комьюнити ардуино, которое уже написало библиотеки для всего что можно, и можно без проблем общаться практически с любой железкой, поддерживающей какой-либо популярный протокол связи. По той же CAN шине можно подключиться к мозгам своего автомобиля и делать с ним всякое. Куча микросхем различного назначения без особых проблем и телодвижений подключаются к ардуино и позволяют собой управлять. Всяческие усилители, драйверы, сдвиговые регистры, ЦАПы, АЦПы, мультиплексоры, цифровые резисторы и сотни других интересных штук.

    Аналоговый сигнал

    Второй тип связи – аналоговый, работает только “на приём”. Микроконтроллер может измерять напряжение, которое подаётся ему на АЦП (аналогово-цифровой преобразователь), диапазон измерения ограничен вплоть до опорного напряжения или напряжения питания микроконтроллера, то есть максимум, что может измерить микроконтроллер без дополнительного железа – от 0 до 5 вольт, или от 0 до 3.3 вольт для 3.3 вольтовых моделей. К этому мы ещё вернёмся.

    Благодаря наличию АЦП (чтение аналогового сигнала) ардуино может считывать показания любых аналоговых датчиков: термисторы, термопары, фоторезисторы, потенциометры, напряжение шунта и прочее прочее из мира аналоговой электроники. По сути можно подключить всё что угодно без особых навыков, было бы желание и готовая библиотека. Ну и умение читать.

    К аналоговым относятся модули и датчики, сигнал с которых выходит в виде напряжения от 0 до 5 Вольт, но меняется “плавно” в зависимости от показания с датчика. Это например микрофон, термистор, фоторезистор, датчик влажности, потенциометр и прочее. Многие аналоговые датчики имеют пины, подписанные так же, как цифровые. Как отличить цифровой датчик от аналогового? Либо по описанию, либо методом “тыка” – подключить в аналоговый пин и вывести сигнал. Некоторые модули имеют цифровой и аналоговый выход одновременно (датчики звука, линии, холла и некоторые другие), пины у них обычно подписаны как DO – цифровой выход и AO – аналоговый. Также аналоговый выход может быть маркирован как OUT или S.

    Такие модули подключаются в любые ANALOG пины.

    Резюмируя

    Теперь по сути дела: датчики, их куча кучная, измерять можно ну просто всё, что вообще измеряется. Электроника: напряжение, ток, сопротивление, работа с переменным током, поля. Параметры микроклимата: температура, влажность, давление, содержание газов, скорость ветра, освещенность, что угодно. Интересных модулей тоже очень много: Bluetooth, сотовая связь, GPS, дисплеи различных типов и размеров, датчики присутствия, как ИК, так и микроволновые, модули для беспроводной связи ардуинок и многое другое.

    Можно управлять абсолютно любой железкой, которая выполняет свою функцию просто при подаче питания: лампочка, светодиодная лента, электронагреватель, мотор или любой электропривод, электромагнит, соленоид-толкатель, и это все с любым напряжением питания. Но тут нужно кое что понять: Ардуино (точнее микроконтроллер) – логическое устройство, то есть по-хорошему она должна только отдавать команды другим устройствам, или принимать их от них. Это я к тому, что напрямую от ардуино не работают ни лампочки, ни моторчики, ни нагреватели, ни- ху че-го. Максимум – светодиод. С пониманием этого идём дальше. Чтобы ардуино включила или выключила (подала питание) на другое устройство, нужно устройство – посредник, например реле или транзистор. Ардуино управляет реле, а реле в свою очередь включает любую нужную нагрузку с любым напряжением питания и все такое, подробнее об этом поговорим отдельно.

    Как суть всего выше написанного – возможности Ардуино по подключению и управлению различными железками практически безграничны, можно воплотить любую идею, даже самую безумную. Датчики что то измеряют, исполнительные устройства что то контролируют, в это же время ведётся отсылка данных куда-нибудь, что-то отображается на дисплее и контролируется при помощи кнопок. Романтика!

    У меня в каталоге ссылок на Ардуино-компоненты можно найти практически все существующие датчики, модули и прочие железки для Ардуино, и практически у каждого есть ссылка на статью с примером и библиотекой. Пользуйтесь!

    USB-UART преобразователь поможет прошить управляющую платформу без собственного USB, например Iskra Mini или Arduino Mini.


    Программатор также будет полезен для модулей с управляющим интерфейсом UART. Например настроить Bluetooth или прошить Troyka Wi-Fi.

    Видеообзор

    Подключение и настройка


    Подключите модуль к компьютеру через разъём micro-USB.


    Скачайте и установите драйвер в зависимости от операционной системы.


    Откройте диспетчер устройств и раскройте вкладку «Порты (COM и LPT)». Вы должны увидеть устройство с именем «Silicon Labs CP210x USB to UART Bridge (COMn)», где n — номер COM-порта.

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

    Примеры работы

    Прошивка микроконтроллеров

    Модуль позволяет прошивать управляющие платформы без собственного USB-порта.

    Настройка модулей с интерфейсом UART

    Преобразователь уровней идеально подойдёт для настройки модулей с выходным последовательным интерфейсом UART.

    Элементы платы


    Micro-USB разъём

    Разъём micro-USB предназначен для питания и коммуникации модуля с компьютером c помощью кабеля USB (A — Micro USB)

    Чип USB-UART

    Преобразователь USB-UART на микросхеме CP2102 от Silicon Laboratories обеспечивает связь с USB-портом компьютера.

    Понижающий DC-DC

    Понижающий DC-DC NCP1529 с выходом 3,3 вольта, обеспечивает питание на выходе модуля. Максимальный выходной ток составляет 1 А.

    Troyka-контакты

    На модуле выведено две пары Troyka-контактов.

    Сигнальный (TX) — цифровой выход USB-UART преобразователя. Используется для передачи данных из USB в микроконтроллер. Подключите к пину RX микроконтроллера. Питание (V) — соедините с рабочим напряжением микроконтроллера. Сигнальный (RX) — цифровой вход USB-UART преобразователя. Используется для приёма данных из микроконтроллера в USB . Подключите к пину TX микроконтроллера.

    Джампер выбора питания

    Выходное напряжение на линии питания USB-UART преобразователя можно выбирать установкой джампера:

    Читайте также: