Последовательный порт - TTL и RS232

Микроконтроллеры в Arduino (ATmega328, 168, 2560) используют, кроме прочих интерфейсов, аппаратно реализованный последовательный интерфейс (UART). В МК ATmega2560 (Arduino Mega) реализовано сразу четыре UART. Интерфейс использует два провода - RX (прием) и TX (передача), где цифровой сигнал кодирует значения бит "0" и "1" напряжением на проводе. Значению "0" соответствует 0В, а значению "1" - рабочее напряжение интегральной схемы (5В или 3.3В, в зависимости от модели и режима работы МК). Такой тип кодирования также называют транзистор-транзисторной логикой (ТТЛ), т.к. напряжение на проводе напрямую влияет на состояние (открытое/закрытое) транзисторов, обеспечивающих приемо-передачу цифрового сигнала.

Последовательный порт компьютера (COM-порт), который все реже можно видеть в современных моделях компактных компьютеров, работает по старому телекоммуникационному стандарту RS232, где кодирование сигнала иное: значение "0" кодируется напряжением от +3В до +25В, а "1" - отрицательным напряжением от -3В до -25В. В COM-портах персональных компьютеров обычно встречается напряжение +13В и -13В.

Большая разница напряжений делает RS232 соединение более устойчивым к помехам, однако, в современных цифровых устройствах чаще используется ТТЛ-совместимый последовательный порт, либо USB - гораздо более современный и высокоскоростной интерфейс.

На приведенном рисунке для сравнения отображены сигналы TTL serial и RS 232, снятые при передаче значения одного байта.

Для преобразования сигнала RS232 в TTL и обратно необходимо его инвертировать (хотя это можно сделать и программно) и преобразовать напряжение. Обычно для этого используются микросхемы типа MAX232. Иногда используют упрощенные самодельные схемы, обеспечивающие инверсию сигнала и преобразование напряжения или прибегают к программно-аппаратным решениям (программная инверсия, аппаратное изменение напряжения).

В случае с Arduino (Uno, Mega и пр.) используется USB-TTL serial контроллер, обеспечивающий работу с МК через ТТЛ-совместимый последовательный интерфейс. В старых моделях для этого использовался чип FTDI FT232, в новых - ATmega8U или ATmega16U. Выводы последовательного интерфейса МК так же доступны для прямого подключения. Для Uno это выводы D0, D1, а у модели Mega имеется сразу несколько последовательных интерфейсов. Подключать к этим выводам RS232 порт нельзя - корректно работать он не сможет из-за другого типа кодирования, а высокое напряжение может повредить МК.

Для подключения к ТТЛ-совместимому последовательному порту с компьютера удобно использовать USB-TTL serial адаптер. Однако, USB-TTL serial адаптеры общего назначения продаются только в специализированных магазинах и, нередко, по неоправданно высокой цене. При этом гораздо более популярны (и дешевы) USB-RS232 адаптеры. При ближайшем же рассмотрении, любой USB-RS232 адаптер содержит два основных компонента - микросхемы USB-TTL serial адаптера и RS232-TTL serial преобразователя.

У меня нашелся USB-RS232 адаптер, схема которого была спрятана в легко разбираемый корпус DB9 разъема (иногда корпус делают литым и добраться до схемы сложнее). Адаптер оказался построен на популярных чипах Prolific PL2303 (USB-TTL serial адаптер) и Zywyn ZT213 (RS232-TTL адаптер). Посмотрев на спецификацию PL2303 выяснил, что мне нужны выводы 1 (TX) и 5 (RX), к которым я подпаял провода, никак не меняя схему (так что RS232 часть осталась работоспособной). Землю взял с 5го контакта DB9, чтобы не трогать 7й вывод микросхемы.


В итоге получился дешевый и сердитый USB-TTL serial адаптер. На скриншоте: Serial monitor от Arduino IDE подключен по USB, а realterm - напрямую к D0,D1 через USB-TTL serial адаптер.

Слышал, что многие data-кабели для мобильных телефонов также содержат USB-TTL serial контроллеры, хотя все большее количество современных моделей подключаются к USB интерфейсу напрямую, не требуя специальных адаптеров. Многие микроконтроллеры снабжены USB интерфейсом, в частности ATmega8U и ATmega16U, которые используются в Arduino в качестве USB-TTL serial контроллеров, предоставляя доступ к ATmega328, который USB интерфейса не имеет.