- Настройка UART соединения в Ардуино
- Определение UART
- Соединение UART-устройств
- Принцип действия
- Отправка последовательных данных
- Прием последовательных данных
- Параметры UART
- Скорость передачи
- Длина данных
- Бит четности
- Количество стоп-битов
- Управление потоком
- Интерфейс Arduino UART
- UART логический уровень
- Простой проект
- Компоненты
- Схема соединения
- Скетч
- Serial.begin()
- Serial.available()
- Serial.read()
- Serial.write()
- Загрузка скетча и тестирование
- Arduino USB UART чипы и драйвера CH340, CH340G, FTDI
- Чипы CH340g, FTDI FT232, ATMEGA 16U2 / 8U2
- Зачем нужен USB / UART TTL преобразователь
- USB преобразователи в Ардуино
- USB драйвер для ардуино
- Установка драйвера для CH340
- Установка драйвера CH340
- Характеристики CH340
- Чип FTDI для Arduino
- Чип ATMEGA16U2/8U2 для ардуино
- Заключение и выводы
Настройка UART соединения в Ардуино
Рассмотрим что такое и как настроить UART соединение в Ардуино, напишем небольшой скетч для понимания работы.
Определение UART
UART означает Универсальный асинхронный приемник/передатчик. Это аппаратное устройство (или схема), используемое для последовательной связи между двумя устройствами.
Ниже мы обсудим, что такое соединение UART и как оно работает. Мы также напишем простой эскиз, чтобы показать, как использовать UART-интерфейс Arduino Uno.
Соединение UART-устройств
Подключение двух устройств UART друг к другу просто и понятно. На рисунке ниже показана основная схема подключения.
Один конец предназначен для передачи данных (называется TX-контакт), а другой — для приема данных (называется RX-контакт). Мы можем соединить только два UART устройства вместе.
Принцип действия
UART работает путем преобразования данных в пакеты для отправки или восстановления данных из полученных пакетов.
Отправка последовательных данных
Перед отправкой данных устройство UART преобразует байты данных в биты. После преобразования данных в биты устройство UART разбивает их на пакеты для передачи. Каждый пакет содержит стартовый бит, блок данных, бит четности и стоп-биты. На рисунке ниже приведен пример пакета данных.
После подготовки пакета цепь UART отправляет его через Tx -контакт.
Прием последовательных данных
Принимающее устройство UART проверяет принятый пакет (через вывод RX) на наличие ошибок, вычисляя число единиц и сравнивая его со значением бита четности, содержащегося в пакете.
Если ошибки при передаче отсутствуют, то для получения блока данных он перейдет к обработке стартового бита, стоповых битов и бита четности. Возможно, ему понадобится получить несколько пакетов, прежде чем он сможет пересобрать весь байт данных из фреймов данных. После восстановления байт сохраняется в буфере UART.
Принимающее устройство UART использует бит четности для определения факта потери данных при передаче. Потеря данных при передаче происходит, когда бит во время передачи изменил свое состояние. Бит может меняться, в том числе, из-за расстояния передачи, магнитного излучения, несовпадения скоростей передачи.
Параметры UART
UART имеет настройки, которые должны быть одинаковыми на обоих устройствах, чтобы иметь правильную связь. Этими настройками UART являются скорость передачи данных, длина данных, бит четности, количество стоповых битов и управление потоком.
Скорость передачи
Скорость в бодах — это количество битов в секунду (бит/с), которое может передавать/принимать устройство UART. Для правильной передачи данных необходимо настроить оба прибора UART с одинаковой скоростью передачи данных в бодах. Распространенными значениями скорости передачи данных являются 9600, 1200, 2400, 4800, 19200, 38400, 57600 и 115200 бит в секунду.
Длина данных
Длина данных — это количество битов на байт данных.
Бит четности
Бит четности — это бит, добавляемый к передаваемым данным и сообщающий приемнику, является ли число единиц в передаваемых данных нечетным или четным. Возможная настройка для бита четности — «нечетный» (ODD) или «четный» (EVEN).
- ODD — бит четности равен ‘1’, если в данных присутствует нечетное число 1. В противном случае бит четности устанавливается равным нулю.
- EVEN — бит четности равен ‘1’, если в данных присутствует четное число единиц. В противном случае бит четности устанавливается равным нулю.
Количество стоп-битов
Приборы UART могут использовать ни одного, один или два стоповых бита для маркировки конца переданного набора битов (так называемых пакетов).
Управление потоком
Flow Control (управление потоком) — это метод, позволяющий избежать риска потери данных при передаче данных через UART. В устройстве UART в качестве управления потоком для запуска/остановки передачи данных используются специальные символы.
Интерфейс Arduino UART
Arduino имеет один или несколько контактов UART в зависимости от платы. Для нашего проекта, мы будем использовать Arduino Uno, который имеет только один UART интерфейс, найденный на контакте 0 (RX0) и контакте 1 (TX0).
Arduino контакты 0 и 1 также используются для связи с Arduino IDE через USB. Так что если вы будете загружать эскизы в UNO, убедитесь, что сначала вы отсоединили любые провода на контактах 0 и 1. На рисунке ниже показано расположение контактов UART TX и RX.
UART логический уровень
Уровни логики UART могут отличаться у разных производителей. Например, Arduino Uno имеет 5В логический уровень, а RS232 порт компьютера имеет +/-12В логический уровень.
Подключение Arduino Uno непосредственно к порту RS232 повредит Arduino. Если оба устройства UART не имеют одинаковых логических уровней, то для подключения устройств необходима подходящая схема преобразователя логического уровня.
Простой проект
Узнав, как работает UART, давайте теперь сделаем простой проект и напишем скетч, демонстрирующий, как использовать коммуникацию UART, используя Arduino Uno.
Наш проект заключается в управлении встроенным светодиодом Arduino дистанционно через UART. Кнопка, подключенная к первой плате Uno, будет управлять встроенным светодиодом второй платы Uno и наоборот.
Компоненты
Для создания нашего проекта нам понадобятся следующие компоненты:
- Arduino Uno (2 шт.)
- Кнопки (2 шт.)
- Макет
- Перемычки
Схема соединения
На рисунке ниже показано, как подключить компоненты, используемые в нашем проекте.
Скетч
После подготовки и сборки компонентов, мы готовы программировать наши платы. Для этого проекта обе платы будут иметь одинаковые скетчи.
Сначала, мы устанавливаем режим контакта 8 (кнопка) в INPUT_PULLUP , режим контакта 13 (светодиод) в OUTPUT и устанавливаем начальное состояние контакта 13 в состояние LOW (светодиод выключен).
Как всегда, Arduino позволяет нам легко использовать встроенное оборудование UART с помощью объекта serial. Последовательный serial объект имеет необходимые функции для простого использования UART-интерфейса Arduino.
Serial.begin()
Для связи через UART-интерфейс необходимо сначала его настроить. Самый простой способ настроить UART Arduino — это использовать функцию Serial.begin(speed) . Параметр speed («Скорость») — это скорость передачи данных, с которой мы хотим запустить UART. С помощью этой функции остальные параметры UART будут установлены на значения по умолчанию:
- Data length = 8 (длина данных)
- Parity bit = 1 (бит четности)
- Number of Stop Bits = None (количество стоп-битов = нет)
Если настройки по умолчанию для вас не работают, используйте функцию Serial.begin(speed,config) вместо Serial.begin(speed) . Дополнительный параметров config используется для изменения настроек длины блока данных, бита четности, количества стоповых битов. Определенные значения для конфигурирования параметра можно найти здесь.
Нижеприведенный код добавляет Serial.begin(9600); внутри setup() для инициализации Arduino Uno UART со скоростью 9600 бит/с и другими параметрами, установленными по умолчанию.
Следующая часть кода — это чтение и сохранение значения, полученного из последовательного интерфейса. Для этого мы будем использовать функцию Serial.available() вместе с оператором If , чтобы проверить, не получены ли данные. Затем мы вызовем Serial.read() для получения одного байта полученных данных и сохраним значение в переменную data_rcvd . Значение data_rcvd управляет включением/выключением встроенного светодиода.
Serial.available()
Для проверки наличия данных, ожидающих чтения в буфере UART (или в последовательном интерфейсе), воспользуемся функцией Serial.available() . Serial.available() возвращает количество байт, ожидающих чтения в буфере.
Serial.read()
Для чтения данных, ожидающих в последовательном буфере, будем использовать функцию Serial.read() . Эта функция возвращает один байт данных, считанных из буфера.
Serial.write()
Для отправки данных через контакты Arduino TX0 мы будем использовать функцию Serial.write(val) . Параметр val — это байт (или серия байтов), который будет отправлен.
В нашем скетче мы будем посылать значение char в зависимости от состояния контакта 8. Мы отправим значение char ‘1’, если пин 8 HIGH, или значение char ‘0’, если пин 8 LOW.
Загрузка скетча и тестирование
Сохраните скетч как arduino_uart_tutorial.ino. Оставшийся шаг — загрузить эскиз на обе платы Arduino Uno. Пожалуйста, не забудьте отсоединить провода, подключенные к контактам TX0 и RX0, перед загрузкой эскиза. После успешной загрузки переподключите провода к контактам TX0 и RX0.
После загрузки мы можем управлять встроенным светодиодом одной из плат, нажимая кнопку, подключенную к другой плате. Наш эскиз проверяет состояние кнопки и посылает соответствующее значение char «0» или «1» на другую плату для управления встроенным светодиодом.
Источник
Arduino USB UART чипы и драйвера CH340, CH340G, FTDI
Чипы FTDI, CH340, ATMEGA16U2 с драйверами позволяют плате Arduino и USB адаптерам подключаться к компьютеру и взаимодействовать с внешним окружением через Serial UART. С их помощью Ардуино может скачивать прошивку, загружать и отправлять данные, не заботясь о низкоуровневой поддержке последовательного соединения. В платах разных производителей могут использоваться различные чипы и драйвера.
В этой статье мы рассмотрим наиболее популярные микросхемы и узнаем, как скачать и установить соответствующие драйвера для нормальной работы Arduino Uno, Nano, Mega и другими платами.
Чипы CH340g, FTDI FT232, ATMEGA 16U2 / 8U2
Зачем нужен USB / UART TTL преобразователь
Когда вы подключаете Ардуино к компьютеру или любому другому устройству по USB, вы связываете между собой сразу два мира: микропроцессорный, сосредоточенный на плате Arduino и мир внешних устройств. Подходы к организации взаимодействия между элементами в этих мирах сильно отличаются. Для работы внутри платы используется особый протокол со своими правилами взаимодействия – UART. И для того, чтобы “внутреннюю” линию соединить с “внешней” нужен определенный преобразователь-посредник, который будет хорошо понимать физические сигналы, используемые как для USB, так и для платы контроллера. Вот этим посредником и являются чипы USB- UART (иногда их еще обозначают называют USB-TTL, хотя это не совсем корректно) преобразователей, самыми популярными из которых являются микросхемы FTDI, CH340G, ATMEGA U16.
USB преобразователи в Ардуино
Мы должны использовать внешние чипы, потому что контроллер ATMEGA328, являющийся сердцем большинства современных плат Arduino, не содержит в своих кристаллических внутренностях встроенного преобразователя. Если вы посмотрите на плату ардуино, то увидите корпус чипа, на нем можно разобрать и его тип.
Исторически наиболее популярным вариантом чипов USB/UART конвертера была линейка микросхем от шотландского производителя FTDI. Главным ее недостатком была стоимость и весьма странная политика в области контроля контрафакта, зачастую приводящая к тому, что легальные купленные устройства блокировались драйверами компании. Сегодня существенную конкуренцию FTDI составляют микросхемы семейства CH340, массово производимые многочисленными китайскими производителями. Они гораздо дешевле и достаточно надежны и это постепенно привело к тому, что в большинстве недорогих контроллеров Arduino и адаптеров установлены именно чипы CH340 (CH340g).
Наверное, единственной, но очень важной проблемой при использовании CH340g взамен FTDI является необходимость в некоторых случаях установки USB драйвера. “Респектабельная” FTDI давно уже тесно интегрирована в Windows и при подключении устройства с FTDI-преобразователем никаких драйвером устанавливать не нужно – они уже есть в системе. Для подключения CH340g иногда нужно скачать драйвер и установить его – только после этого система увидит наше устройство.
Процедура установки драйвера для CH340g на самом деле очень проста и почти всегда проходит без ошибок на самых популярных операционных системах Windows7, Windows10. Именно поэтому никаких проблем с использованием недорогих ардуино плат, несущих на себе чип CH340, почти никогда не возникает.
Остается только вопрос – а зачем вообще нужен какой-то USB драйвер для подключения ардуино к компьютеру? Давайте разберемся.
USB драйвер для ардуино
Мы не будем уходить в теоретические дебри, разбирая многочисленные коммуникационные протоколы, поддерживаемые современными компьютерными системами. Главное, что нужно понимать: когда мы присоединяем какое-то устройство к компьютеру, оно может передавать или получать данные только если его “поймут” с другой стороны. На стороне компьютера таким переводчиком является специальная программа, называемая драйвером. Драйвер USB работает в режиме эмуляции последовательного, COM-порта. Это означает, что при подключении операционная система создает виртуальные, программные COM-порты, с которыми и работает драйвер. В Windows их можно посмотреть в диспетчере устройств.
Если мы подключаем Ардуино к компьютеру, то чип с помощью драйвера попросит систему открыть порт и начнет взаимодействие . И для чипов разных производителей потребуются разные драйвера. Проблемы возникают, когда драйвера нет. Система пытается найти его для подключенного устройства, не находит и мы никогда не увидим его в списке устройств. Для решения проблемы надо найти и скачать соответствующие драйвера, а затем установить их на компьютер. Ниже мы рассмотрим, как это делается на примере USB драйвера CH340.
Установка драйвера для CH340
Китайские микросхемы CH340 используется довольно часто благодаря своей низкой стоимости и вполне приемлемому качеству.
В серию микросхем CH340 входят CH340T (мост USB – UART), CH340R (мост USB – IrDA) и CH340G (мост USB – UART). Последняя микросхема является наиболее распространенной и удобной с точки зрения корпуса с меньшим числом выводов.
Установка драйвера CH340
Если в вашей системе отсутствует драйвер, его можно легко установить. Процедура занимает 5 минут и практически никогда не вызывает проблем. Скачать драйвер для CH340 можно по этой ссылке.
Процесс установки драйвера разбивается на несколько шагов:
- Загрузка драйвера.
- Распаковка скачанного архива.
- Найдите папку CH341ER.
- Запуск исполнительного файла SETUP.EXE.
- Нажать на кнопку Установить.
- На этом установка драйвера на компьютер завершена.
Характеристики CH340
Микросхема обладает следующими характеристиками и возможностями:
- Не нужно большое количество внешних компонентов, требуются только кварцевый резонатор и 4 конденсатора.
- Создание виртуального последовательного порта.
- Возможность применения всех приложений для COM-портов.
- Работает с сигналами уровней 5 и 3,3В.
- Выполнена в удобном корпусе SO-16 с малым количеством выводов и небольшим числом внешних компонентов.
- Поддержка полной скорости спецификации USB0.
- Наличие встроенного буфера типа FIFO.
- Поддержка всех стандартных режимов передачи данных.
- Поддержка симплексного, полудуплексного, дуплексного асинхронных режимов обмена.
- Поддержка интерфейсов RS23, RS422, RS485.
- Рабочие температуры лежат в диапазоне от -40С до 85 С.
Распиновка микросхемы CH340G представлена на рисунке.
На плате обозначены следующие контакты:
2 – TXD сигнал UART.
3 – RXD сигнал UART.
4 – напряжение питания.
5 – UD+ сигнал USB.
6 – UD- сигнал USB.
7 – XI вход для кварцевого резонатора и конденсатора.
8 – XO выход для кварцевого резонатора и конденсатора.
9 – CTS сигнал UART.
10 – DSR сигнал UART.
11 – RI сигнал UART.
12 – DCD сигнал UART.
13 – DTR сигнал UART.
14 – RTS сигнал UART.
15 – Включение инверсии входа RXD.
Микросхема эмулирует работу последовательного порта. Все приложения работают с конвертером интерфейса CH340G без изменения кода.
Чип FTDI для Arduino
Шотландская фирма FTDI занимается разработкой аппаратных мостов “USB-UART” и “USB-FIFO”. Производство началось с запуска и продажи схем FT8U232 и FT8U245, которые в итоге стали очень популярными и востребованными на рынке устройств с USB. Эти виды микросхем имели всего лишь 1 режим работы и огромное количество дополнительных внешних элементов.
Следующим поколением аппаратных мостов были микросхемы FT232B и FT245B. В них добавился новый режим работы BitBang, также появилась возможность реализации восьми независимых линий ввода-вывода. Помимо этого была изменена схемотехника кристалла.
С 2006 года начался выпуск микросхем FT232R и FT245R, в которых были интегрированы на кристалл энергонезависимая память, тактовый генератор и другие компоненты. Основными преимуществами микросхемы FT232RL являются хорошая функциональность, легкость монтажа и минимальная обвязка. Распиновка модуля представлена на рисунке ниже.
Характеристики микросхемы FT232R:
- Одночиповый переходник USB-UART.
- Поддержка режимов передачи 7и 8 бит данных, 1 и 2 стоповых бита.
- Бесплатные драйверы VCP и D2XX.
- Скорость передачи 300 бод – 3 мегабод для RS422.
- Наличие встроенного идентификационного номера.
- Настраиваемые выходы CBUS.
- Вывод состояния приема и передачи на внешние светодиоды.
- Наличие буферов FIFO для высокоскоростного приема/передачи данных.
- Усовершенствованный режим bit bang.
- Встроенная память EEPROM на 1024 байт.
- Наличие встроенного стабилизатора напряжения на 3.3 В и для внешних сигналов от 1,8 до 5В.
- Высокая нагрузочная способность.
- Малое потребление энергии.
- Совместима с USB 2.0 Full Speed.
- Температурный диапазон от -40С до 85С.
Микросхема предоставляется с заранее запрограммированной памятью EEPROM, поэтому дополнительное программирование энергонезависимой памяти перед началом работы не требуется.
Чип ATMEGA16U2/8U2 для ардуино
Чипы ATMEGA16U2/8U2 используются в качестве моста между USB-портом и последовательным портом. Версия платы ATmega8u2 использовалась для предыдущих плат Ардуино Uno и Mega.
Технические характеристики чипа ATMEGA16U2:
- Процессор AVR.
- Высокая производительность, низкая мощность.
- Размер ядра 8-бит.
- Подключение SPI, UART/USART, USB.
- Количество контактов 32.
- Скорость ЦПУ 16 МГц.
- 512 б ОЗУ.
- 512 б энергонезависимой памяти.
- 22 программируемых линии ввода-вывода.
- Интегрированный аналоговый компаратор.
- Объем флеш-памяти 16 Кб.
- Размер EEPROM 512х8.
- Напряжение от 2,7В до 5,5В.
- Рабочие температуры от -40С до 85С.
Контроллер ATmega8u2 в своей прошивке уже имеет установленные USB COM драйвера, поэтому установка дополнительных не требуется.
Характеристики ATmega8u2:
- Диапазон напряжений от 2,7В до 5,5В.
- 32 вывода.
- Скорость ЦПУ 16 МГц.
- Объем флеш-памяти 8Кб.
- Поддержка встроенных интерфейсов I2C, SPI, UART, USART.
- Размер ядра 8 бит.
- Несколько режимов работы – холостой ход, энергосберегающий режим, режим ожидания, расширенный режим ожидания и выключение питания.
- Возможность внешнего и внутреннего прерывания.
- 22 программируемых линии ввода-вывода.
- 512 б энергонезависимой памяти.
- 512 б ОЗУ.
- Рабочие температуры от -40С до 85С.
Заключение и выводы
Микросхемы-контроллеры последовательного порта служат в качестве преобразователя интерфейса USB. Наиболее популярными являются микросхемы CH340 (преобразователь USB в UART), аппаратные мосты от фирмы FTDI, к которым относятся микросхемы FT8U232, FT8U245, FT232R и FT245R (USB-UART и USB – FIFO) и ATmega8U2 и ATmega16U2.
Источник