Последовательный интерфейс uart. Что такое UART. Коротко о методе приема-передачи

Раз уж я буду использовать UART для связки устройств блога с Вашими проектами немного расскажу как он устроен и как им пользоваться.

Универсальный асинхронный приемопередатчик (UART) довольно старый и распространенный интерфейс. До недавнего времени разъем COM порта (тот-же UART только уровни напряжения другие) был обязательным атрибутом каждого компьютера. Теперь COM порт постепенно «отмирает» и если на «башнях» он еще не редкость, то на ноутбуках его уже нет и в помине. Но в виду простоты и популярности интерфейса подавляющее большинство микроконтроллеров имеет UART в составе своей периферии. И если персональный компьютер UART перестает удовлетворять из-за низкой скорости и невозможности расширения, то для микроконтроллеров интерфейс удобен и использование его будет продолжаться.
Раз UART есть во многих микроконтроллерах, значит мы его будем использовать как один из интерфейсов связи устройств блога с Вашими электронными устройствами.
Для начала немного теории работы интерфейса (без лишних подробностей). Для связи по интерфейсу UART используется две ножки контроллера RXD – для приема сообщений (Receiver) и TXD – для передачи сообщений (Transmitter). UART — полнодуплексный интерфейс. Это значит, что приемник и передатчик работают независимо друг от друга. Более того, передатчик или приемник можно отдельно отключить, освободив ножку контроллера для других нужд. Передача (соответственно и прием) сообщений осуществляется фиксированными пакетами битов (такой пакет называют кадром). Кадр состоит из старт-бита (с него начинается каждый кадр), битов данных (может быть от 5 до 9 бит), бита проверки четности (проверка правильности передачи данных) и одного или двух стоп-битов (сигнал об окончании кадра).

где:
IDLE — ожидание обмена — должна быть 1 ;
St — Старт-бит — всегда 0 ;
(n) — Биты данных — может быть от 5 до 9 бит;
P — Бит четности;
Sp — Стоп бит — всегда 1.

Если посылка содержит более одного байта, каждый следующий байт передается отдельным кадром. Передача (и прием) данных ведется на определенных фиксированных частотах (измеряется в Бод=бит/сек) от 600 до 128 000 Бод. Условием правильной работы порта есть задание одинаковых параметров, как для приемника, так и для передатчика (скорость, количество бит данных, бит четности, количество стоп битов).

Договоримся о формате кадра (настройках UART) для устройств блога:
Скорость передачи – 9600 (это в пределах килобайта в секунду);
Количество бит данных – 8 (наиболее удобно работать);
Бит четности – Even (производится проверка на четность);
Количество стоп-бит – 1;
В сокращенном варианте это выглядит так:
Baud Rate: 9600, 8 Data, 1 Stop, Even Parity

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

Если нужны дополнительные возможности, то полное описание UART есть в datasheet на микроконтроллер – обращайтесь к нему.

Для того чтобы устройство с блога начало работать с Вашим проектом через интерфейс UART нужно:
1 Подключить устройство блога к соответствующим ножкам микроконтроллера.
2 Настроить приемо-передатчик UART Вашего контроллера. Для этого в соответствующие порта ввода/вывода записать определенные значения.
3 Иметь (написать) процедуры приема/передачи сообщений по UART в Вашей программе.

Теперь рассмотрим подробно каждый пункт:


1 СОЕДИНЕНИЕ УСТРОЙСТВ ПОСРЕДСТВОМ UART.

Тут все просто:
— если планируется и прием и передача — устройства соединяются по двум линиям — TX_устройства с RX_проекта и TX _проекта с RX_устройства (здесь и далее под «устройством» я буду понимать устройство с блога, а под «проектом» — Ваш электронный проект);
— если нужен только прием (например принимаются данные с клавиатуры) — TX_устройства с RX_проекта;
— если нужна только передача (например передаются данные на устройство отображения) — TX _проекта с RX_устройства.


2 НАСТРОЙКА ПРИЕМО-ПЕРЕДАТЧИКА UART.

Как мы договорились выше, формат кадра для наших устройств:
Baud Rate: 9600, 8 Data, 1 Stop, Even Parity
Для работы в с этим форматом кадра нужно в разделе инициализации устройств в Вашей программе, записать соответствующие значения в нужные порта ввода/вывода контроллера. Для этого нужно открыть раздел USART datasheet’а на Ваш микроконтроллер и выбрать/вычислить необходимые значения. Но можно сделать все гораздо проще – использовать автоматические настройщики периферии – CodeWisard’ы.
Возьмем для примера микроконтроллер Attiny2313 (по аналогии можно настроить любой микроконтроллер) и настроим UART в разных языках программирования.

Для начала — Algorithm Builder .
Тут все предельно просто – создаем проект (Файл/Новый ). Выбираем микроконтроллер и частоту задающего генератора в Опции/Опции проекта… (ATtiny2313, внутренний задающий генератор на 8МГц). В панели инструментов жмем кнопочку «S» — настройщик управляющих регистров» выбираем USART и в открывшемся окошке заполняем все как на картинке. Там все подписано и понятно.


Жмем «ОК» . Готово – UART проинициализирован и готов к работе.
Если нужен только приемник или только передатчик ставим только нужную галочку – незадействованную ножку можно использовать как порт ввода-вывода.

Так как в программе будут разрешены прерывания, нужно перед инициализацией USART установить указатель стека на конец памяти («S» /Stack Pointer SP ) и озаглавить вершину блока ключевым словом «Reset ».


В ассемблере. Честно говоря, я не знаю, есть ли в асемблерах для AVR настройщики периферии, но даже если нет, простое решение использовать все тот же Algorithm Builder. В окошке настройки USART, в правой части, прописаны мнемокоманды (Operations), обеспечивающие выбранные характеристики. Перевести их в ассемблерный код не составит труда.

Переводим в ассемблерные команды.

;USART initialization ;Communication Parameters: 8 Data, 1 Stop, Even Parity ;USART Receiver: On ;USART Transmitter: On ;USART Mode: Asynchronous ;USART Baud Rate: 9600 uart_init: LDI R16, $ 00 OUT UBRRH, R16 LDI R16, $ 33 OUT UBRRL, R16 LDI R16, $ 26 OUT UCSRC, R16 LDI R16, $ 00 OUT UCSRA, R16 LDI R16, $ 98 OUT UCSRB, R16

;USART initialization ;Communication Parameters: 8 Data, 1 Stop, Even Parity ;USART Receiver: On ;USART Transmitter: On ;USART Mode: Asynchronous ;USART Baud Rate: 9600 uart_init: LDI R16, $00 OUT UBRRH,R16 LDI R16, $33 OUT UBRRL,R16 LDI R16,$26 OUT UCSRC, R16 LDI R16,$00 OUT UCSRA, R16 LDI R16,$98 OUT UCSRB, R16

CodeVision содержит свой настройщик периферии (CodeWisard), еще похлеще чем у Algorithm Builder’а. Для генерации настроек UART, нажимаем на значок шестеренку (CodeWisardAVR ) на панели инструментов. В открывшемся окошке сначала выбираем вкладку Chip в ней выбираем микроконтроллер и устанавливаем частоту, с которой будет работать задающий генератор. Далее выбираем и заполняем вкладку USART в соответствии с нужными характеристиками (если нужен только приемник или только передатчик ставим соответствующую галочку).

// USART initialization // Communication Parameters: // 8 Data, 1 Stop, Even Parity // USART Receiver: On // USART Transmitter: On // USART Mode: Asynchronous // USART Baud Rate: 9600 UCSRA= 0x00 ; UCSRB= 0x98 ; UCSRC= 0x26 ; UBRRH= 0x00 ; UBRRL= 0x33 ;

// USART initialization // Communication Parameters: // 8 Data, 1 Stop, Even Parity // USART Receiver: On // USART Transmitter: On // USART Mode: Asynchronous // USART Baud Rate: 9600 UCSRA=0x00; UCSRB=0x98; UCSRC=0x26; UBRRH=0x00; UBRRL=0x33;

Сохраняем сгенерированный проект (File\Generate, Save and Exit ) — готово. Создан проект со всеми нужными установками для UART. В проекте инициализируется и другая периферия (зачастую не нужная). После создания проекта его можно подкорректировать – удалить все не нужное.


3 СОЗДАНИЕ ПРОЦЕДУР ОБРАБОТКИ СООБЩЕНИЙ UART.

Небольшое отступление.
Работу с UART можно организовать различными способами. Например:
— просто ожидать в теле программы когда придет сообщение, постоянно проверяя бит приема сообщения;
— разрешить прерывание и в теле прерывания обрабатывать сообщение;
— создать буфер куда по прерываниям будут загоняться сообщения, а уже в теле программы, «по свободе», считывать из буфера значения;
— еще куча вариантов – выбор за Вами.
Но , исходя из того, что сообщения от устройств, в большинстве своем, единичные (один байт) и не слишком часты (взять, к примеру, клавиатуру – пару нажатий в секунду, не больше), наилучшим вариантом, в плане экономии памяти и скорости обработки, будет обработка сообщения UART в теле прерывания. Под обработкой я понимаю чтение регистров, проверка на правильность приема и сохранение принятого байта в глобальной переменной (своего рода буфер в один байт). Если предполагаются несложные манипуляции с принятым байтом можно их тоже организовать в теле прерывания.

В дальнейшем я буду ориентироваться на такой алгоритм работы, если другой не будет более оправданным.

Algorithm Builder.
Прием данных осуществляется в процедуре обработки прерывания по окончании приема байта (кадра). Принятый байт записывается в глобальную переменную FromGCnDevice. В теле программы проверяется значение FromGCnDevice ели оно нулевое ничего не принято.

Если работа с принятым значением несложна можно это сделать прямо в теле обработки прерывания.
Передача данных производиться без использования прерываний и буфера (аппаратно у UART передатчика существует буфер на 2 байта). Это значит, что комфортно будут передаваться только единичные байты (что мы и планируем делать). Если зарядить сразу строку данных, то микроконтроллер будет заниматься только этой строкой.

Ассемблер.
Прием байта осуществляется в прерывании, результат остается в регистре r17 (если нужно сохраните в SRAM).

;Обработка прерывания по окончании приема байта PUSH R16 IN R16, SREG PUSH R16 IN R16, UCSRA ;Читаем статус из UCSRA IN R17, UDR ;Читаем данные из UDR ANDI R16, $ 1C BREQ _END ;Проверяем на ошибки CLR R17 _END: ;в R17 находится принятый байт POP R16 OUT SREG, R16 POP R16 RETI

;Обработка прерывания по окончании приема байта PUSH R16 IN R16,SREG PUSH R16 IN R16,UCSRA ;Читаем статус из UCSRA IN R17,UDR ;Читаем данные из UDR ANDI R16,$1C BREQ _END ;Проверяем на ошибки CLR R17 _END: ;в R17 находится принятый байт POP R16 OUT SREG,R16 POP R16 RETI

Передача байта

LDI R16,значение SBIS UCSRA,UDRE RJMP PC-1 ; ждем готовности принять байт OUT UDR, R16 ; шлем байт


С — в программе CodeVisionAVR .
Тут все просто CodeWizard вместе с инициализацией UART создает и процедуры для приема-передачи. Единственно что можно тут поковырять так это выкинуть буфер для приема (если разрешить прерывания по приему или передаче автоматически создается буфер). Если этот буфер не нужен процедура обработки прерывания приема байта и процедура передачи могут выглядеть так:

// Глобальная переменная - полученные даные от устройства // Эсли FromGCnDevice==0 - ничего не получено char FromGCnDevice; // Обработка прерывания окончания приема байта interrupt [ USART_RXC] void usart_rx_isr(void ) { char status; // Получаем байт статуса и данных status= UCSRA; FromGCnDevice= UDR; // Если произошла ошибка при приеме байта то FromGCnDevice=0 if ((status & amp; (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN) ) != 0 ) FromGCnDevice= 0 ; } // Процедура передачи байта void ToGCnDevice (char c) { // Ждем окончания передачи предідущего байта while ((UCSRA & amp; DATA_REGISTER_EMPTY) == 0 ) ; // Передаем байт UDR= c; }

// Глобальная переменная - полученные даные от устройства // Эсли FromGCnDevice==0 - ничего не получено char FromGCnDevice; // Обработка прерывания окончания приема байта interrupt void usart_rx_isr(void) { char status; // Получаем байт статуса и данных status=UCSRA; FromGCnDevice=UDR; // Если произошла ошибка при приеме байта то FromGCnDevice=0 if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))!=0)FromGCnDevice=0; } // Процедура передачи байта void ToGCnDevice (char c) { // Ждем окончания передачи предідущего байта while ((UCSRA & DATA_REGISTER_EMPTY)==0); // Передаем байт UDR=c; }


Во и все про UART. Этого должно хватить для того чтобы подключить устройство к Вашему проекту. По анологии приведенных примеров легко все можно проделать и для других микроконтроллеров АВР.
Ниже оставляю архивы программ с примерами работы UART для ATtiny2313.
- Пример проекта созданного автоматически CodeWisionsAVR
- Пример программы для работы с UART в Algorithm Builder


P.S. Я слабо знаю С и Asm, поэтому пинать и кидать тапками — разрешается! Мы все учимся.


Инициализируется

(Visited 10 796 times, 2 visits today)

Есть одна замечательная микросхемка — FT2232D. Это конвертер USB-UARTx2. Удобно когда надо получить два UART хвоста из одного USB провода. Но это семечки по сравнению с тем, что в эту микруху FTDI внедрили мощную аппаратную поддержку MPSSE (Multi-Protocol Synchronous Serial Engine), что позволяет на одной только этой микрухе реализовать кучу разных интерфейсов вроде SPI или JTAG.
Что дает просто широчайший простор под построение разнокалиберных программаторов под все что угодно. На данный момент я видел схемы для прошивки AVR, ARM, Altera и бог еще весть чего.

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

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

Готовую программу надо каким-либо образом запихать в контроллер. Для этого существует множество способов.

JTAG/SWD адаптер
Так как часто для отладки под ARM используется JTAG, то этот метод получается наверное самым популярным. Для этой цели используется какой-либо адаптер. Например я использую так что показывать буду на его примере. Там все просто — подключаешь адаптер к контроллеру стандартным SWD или JTAG шлейфом. Через линии NRST/TDI/TDO/TCK/TMS для JTAG или через SWO/SWOCLK/SWDIO/NRST для SWD режима. На адаптере моей верси CoLinkEX оба эти разьема выведены на одну колодку, так что получается как бы сразу и JTAG и SWD соединение. А там какое надо такое и выбираешь. Особой разницы в отладке/прошивке между ними нет.

Либо используя утилитку CoFlash oт CooCox.com

Одним из серьезных достоинств контроллеров AVR является дикое количество прерываний. Фактически, каждое периферийное устройство имеет по вектору, а то и не по одному. Так что на прерываних можно замутить кучу параллельных процессов. Работа на прерываниях является одним из способов сделать псевдо многозадачную среду.

Идеально для передачи данных и обработки длительных процессов.

Для примера покажу буфферизированный вывод данных по USART на прерываниях.

В прошлых примерах был такой код:

// Отправка строки void SendStr(char *string) { while (*string!="\0") { SendByte(*string); string++; } } // Отправка одного символа void SendByte(char byte) { while(!(UCSRA & (1<

Данный метод, очевидно, совершенно неэффективен. Дело в том, что у нас тут есть тупейшее ожидание события — поднятие флага готовности USART. А это зависит, в первую очередь, от скорости передачи данных. Например, на скорости 600 бод передача каких то 600 знаков будет длиться 9 секунд, блокируя работу всей программы, что ни в какие ворота не лезет.

Как то раз мне потребовалось устройство способное соединяться с удаленным сервером и пересылать байты. Конечно, для этих целей можно использовать компьютер, но это громоздко и неудобно, да и надежность такой системы оставляет желать лучшего — слишком сложное устройство. Другое дело микроконтроллер, например Microchip PIC, MSC-51 или Atmel AVR — простой, надежный, потребляет минимум энергии и способен надежно выполнить узкий круг поставленных задач. Например, мониторинг сигнализации через Internet или Ethernet сеть. Всё бы хорошо, но тут появляется очередная проблема — протокол TCP/IP. Реализовать на AVR или PIC стек протоколов TCP/IP задача выполнимая, но требует времени, а время, как известно, деньги. Надо было срочно и с минимальным геморроем. И вот тут мне на помощь пришел интерфейсный модуль Ethernet — RS232. Задача стандартная, поэтому предложений на рынке готовых модулей предостаточно, однако не стоит торопиться. Тут есть ряд тонкостей, связанных с особенностями работы данных устройств. Например, подавляющее большинство модулей может работать исключительно в роли сервера, которому требуется выделенный IP адрес. Устройство-клиент работает только с специализированным софтом, как правило под Windows, и открывает виртуальный COM порт который соединяется с удаленной системой (UART — Ethernet модуль) и обеспечивает обмен данными. Не самый удобный вариант. Для моей задачи данная конструкция была совершенно непригодна. Поэтому я начал искать дальше, вскоре был обнаружен замечательный модуль EG-SR-7100 , а потом и его более новая модификация WIZ100SR . Почитал характеристики — оно! Все для решения моей задачи!

Прикупил я себе парочку модулей HM-TR433 . Так, помучить. Стоит такая радость на данный момент порядка 800рублей. Это трансивер, то есть он может как принимать, так и передавать. Мало того, тут стоит управляющий контроллер, который сам кодирует информацию, загоняет ее в радио канал и декодирует пойманное. То есть, по сути, мы получаем удлинитель UART и всякие проблемы вроде шума после пропадания несущей, какие были в связке HM-T433/HM-R433 нас уже не волнуют. Один минус — канал полудуплексный, то есть синхронный прием и передача невозможны, только по очереди. Но это не велика проблема — зачастую полудуплекса хватает за глаза.


Существует две модификации этого модуля. Одна имеет окончание TTL другая RS232. Разница лишь в уровнях и в том, что в первую китайцы забыли впаять MAX232 и обвязку из конденсаторов, зато поставили перемычки. Так что имея прямые руки и нужный инструмент можно из TTL сделать RS232 и наоборот. Впрочем, по цене они копейка в копейку идут.

Такс, в порядке работы над коммерческим проектом (и не спрашивайте о каком — не скажу), который сожрал все мое свободное время огромной зазубренной ложкой, раскурил до самого пепла радиомодули HopeRF HM-R433/HM-T433 . Сегодня собрал полудуплексную схему на четырех модулях и провел сеанс дальнобойной приемо-передачи.

Итак, что из себя представляла установка:

Блок А:

  • Передатчик: HM-T433
  • Приемник: HM-R433
  • Расположение блока: 5 этаж, на столе. У северной стены.
  • Питание: 5 вольт.
  • Скорость передачи: 4800 бод.
  • Длина пакета данных: 10 байт.

Блок Б:

  • Передатчик: HM-T433
  • Приемник: HM-R433
  • Антенна передатчика: Кусок провода МГТФ длинной 17см (1/4 от длины волны 433Мгц сигнала) загнутый абы как.
  • Антенна приемника: та же херня.
  • Расположение модулей: параллельно друг другу, на расстоянии 2см, усики антенн разбросаны в разные стороны, на манер тараканьих.
  • Расположение блока: У меня в руках, на земле. С южной стороны дома (смотри схему)
  • Питание: 5 вольт.
  • Скорость передачи: 4800 бод.
  • Длина пакета данных: 10 байт.

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


При первоначальных испытаниях сея железка показала себя с лучшей стороны, но вот на практике вылезли не просто баги, а прям гигантские тараканы убийцы. Казалось бы, чему там работать не так? А, как оказалось, есть чему. Точнее это не баги, а особенности, о которых производитель самым подлым образом умолчал в даташитах. Знай я о них я бы еще подумал стоит ли их покупать. Итак:

Несущая
Приемник ловит изменение несущей, которую генерирует передатчик. А если не будет передатчика, что будет ловить приемник? По идее не должен ловить ничего, а что на практике? А на практике дикий срач!!! Натурально белый шум по всему диапазону от 0 до 255. Фигасе бага, да? Но ладно, хрен с этим белым шумом, его, в конце концов, можно фильтровать, отслеживать в нем наличие чего либо разумного и лишь после начинать прием.

Ждущий режим
У передатчика, к моему, а также ряда внимательных читателей, удивлению нет входа Enable. У приемника то есть. Редкостный бред, особенно ввиду того, что спустя 70mS простоя на линии DATA передатчик впадает в спячку и… правильно, отрубает несущую — на выходе приемника начинается в этот момент жуткий срач. Так что либо шли данные непрерывным потоком, либо перед каждой посылкой шли идентификационный пакет. А еще не забыв предупредить приемник о том, что передача закончена и дальше ловить нечего.

Совместная работа
Тут все просто, два передатчика одновременно работать не могут. От слова совсем. Либо по отдельности, либо никак. Это было ожидаемо и это надо учитывать.

Баги при передаче
Но что меня больше всего добило, так это баги. Если с первые три пункта можно учитывать и обрабатывать программно без лишних заморочек, то со последним уже все гораздо веселей.

В числе прочих ништячков, помимо ультразвукового дальномера мне в посылке из Терры пришли еще и радиомодули. Hope HM-T433 и Hope HM-R433 На передачу и на прием, соответственно. Сам модуль представляет из себя крошечную платку 15х25 мм с торчащим из нее разъемом. У передатчика разъем трехконтактный — GND, DATA и Vcc у приемника есть еще вход ENABLE при подаче на который высокого уровня разрешается прием.

Возникла у меня необходимость забабахать себе девайсину, чтобы можно было с его помощью раздавать байты по i 2 c и UART , а также принимать байты по этим же протоколам и выдавать на экранчик. Как по одному, так и пачками. Этакий дебаггер.

Ну а чо, сказано сделано. Воткнул ATMega8535 — первая которая под руку подвернулась из многоногих. Вывел все что только можно наружу, присобачил небольшую клавиатурную матрицу 4х4 и LCD экранчик . Экранчик мелкий WH0802A 8х2 символа, но уж какой был. Других у нас в продаже не встречал, а под заказ везти лень. Да и, думаю, там и не надо больше.

А раз уж пошла такая пьянка, то до кучи вывел наружу пару каналов ШИМ , да пару входов АЦП . Ну и SPI заодно — гулять так гулять. Там же можно и Dallas 1-wire проткол организовать, приделать частотомер, индикатор сигнала, вольтмер и вообще можно много чего наворотить, было бы желание. Опять же, линий на вход/выход получается дофига, так что из нее можно сделать головной блок умного дома или контроллер чего нибудь.

Корпус взял халявный, PAC-TEC ‘овский который намутил года два назад. Вот и пригодится коробочка:) Надо сказать, PAC-TEC делает просто изумительные коробки. Не чета тому говну, что продается в наших радиомагазинах. Не скрипят, не люфтят, крепко сбиты, ладно скроены и выглядят круто. Где бы их еще продавали у нас.

Пока только плату развел, еще некоторых деталей не хватает. На днях вытравлю плату, соберу и буду программировать. Вот тогда будет вам и примеры живого кода и подробное описание SPI , i2c, UART, клавиатура и LCD . Кстати, обратите внимание как легко матрицировать обычные тактовые кнопки. А все благодаря тому, что у них четыре попарно соединенных вывода.

Пока же, раз все еще в виде чертежа, набрасывайте в комменты свои идеи по поводу фич будущего девайса.

Пока писал статью про UART пришла в голову одна извращенная идея — на базе UART же можно организовать самый натуральный низкодискретный ШИМ!

Достаточно только сделать где-нибудь в памяти переменную, куда мы будем совать число с заданной скважностью нулей и единиц, а по прерыванию опустошения буфера это число снова пихать в регистр UDRE. Таким образом, генерация ШИМ будет самопроизвольной, без лишних телодвижений. Правда можно получить всего 10 разных значений ШИМ, но зато нахаляву!!!

Для тех кто не понял как, приведу числа которые надо будет непрерывно слать через UART:
два дополнительных значения мы получим за счет старт и стоп битов.

00000000 — 1/10
00000001 — 2/10
00000011 — 3/10
00000111 — 4/10
00001111 — 5/10
00011111 — 6/10
00111111 — 7/10
01111111 — 8/10
11111111 — 9/10

Да и частоты там можно получить нефиговые!
Красота!=)))))

Почти каждый микроконтроллер имеет на борту универсальный последовательный интерфейс — UART . AVR тут не исключение и поддерживает этот протокол в полном обьеме полностью аппаратно. По структуре это обычный асинхронный последовательный протокол, то есть передающая сторона по очереди выдает в линию 0 и 1, а принимающая отслеживает их и запоминает. Синхронизация идет по времени — приемник и передатчик заранее договариваются о том на какой частоте будет идти обмен. Это очень важный момент! Если скорость передатчика и приемника не будут совпадать, то передачи может не быть вообще, либо будут считаны не те данные.

Протокол
Вначале передатчик бросает линию в низкий уровень — это старт бит . Почуяв что линия просела, приемник выжидает интервал Т1 и считывает первый бит, потом через интервалы Т2 выковыриваются остальные биты. Последний бит это стоп бит . Говорящий о том, что передача этого байта завершена. Это в самом простом случае.

В конце байта, перед стоп битом, может быть и бит четности. Который получается если поксорить между собой все биты, для контроля качества передачи. Также может быть два стопа, опять же для надежности. Битов может быть не 8, а 9. О всех этих параметрах договариваются на берегу, до начала передачи. Самым же популярным является 8 бит, один старт один стоп, без четности.

Причем с самим протоколом можно не заморачиваться — все реализовано аппаратно. Разве что захочется завести второй UART, тогда придется делать его программно.

По такому же протоколу работает COM порт компьютера, разница лишь в разнице напряжений, поэтому именно этот протокол я буду использовать для связи микроконтроллера с компом. Для преобразования напряжений можно использовать RS232-TTL конвертер. COM порт. Но есть тут одна проблема — дело в том, что комповый RS232 он за логические уровни принимает +/- 12 вольт, а UART работает на пятивольтовых уровнях. Как их совместить? Для этого существует несоколько вариантов схем преобразователей уровня, но самая популярная это все же на специальном преобразователе RS232-TTL . Это микросхема MAX232 и ее аналоги.
Практически каждая фирма делает свой преобразователь, так что тут сгодится и ST232 , и ADM232 , и HIN232 . Схемка простая как три копейки — вход, выход, питание и обвязка из пяти конденсаторов. Конденсаторы обычно ставятся 1uF электролиты, но в некоторых модификациях ставится 0.1uF керамика. Я везде впаивал 0.1uF керамику и обычно этого хватало. :) Работает как часы. Если же на высоких скоростях будет глючить, то надо будет повышать емкость.


Кстати, существует еще и MAX3232 это то же самое, но на выходе у него не 5вольт TTL, а 3.3 вольта TTL. Её используют для низковольтных контроллеров.

Я себе сделал один такой универсальный шнурочек, чтобы к контроллерам цепляться было удобно по UART . Для общей компактности всю схему запихал прям в разъем, благо у меня были ST232 в soic корпусе. Получилась платка не больше рублевой монеты. Так как под рукой не было мелких SMD конденсаторов, то пришлось напаять кондеры сверху, кто во что горазд. Главное работает, хоть и не очень красиво вышло.


Если сомневаешься, что у тебя получится столь мелкий монтаж, то я тебе развел плату на стандартный PDIP корпус. Размером она будет со спичечный коробок, зато мельчить не надо.


После сборки проверяется просто:
Втыкается в разъем COM порта. Подается 5 вольт питания на схему, а затем замыкаешь Rx на Tx (у меня это зеленый и желтый провода).

Дальше открваешь любую терминалку, хоть Hyper Terminal , цепляешься к порту и начинаешь посылать байты, они должны тотчас возвращаться обратно. Если этого не произошло — проверяй схему, где то косяк.

Если работает, то дальше все просто. Тот провод который идет от ножки 9 микросхемы MAX232 это передающий вывод , его заводи на ногу RxD контроллера. А тот который с ножки 10 — принимающий , его смело сажай на вывод TxD контроллера.


Плата сделана была методом ЛУТ , в одном месте по моему недосмотру толщина просвета оказалась 0.05мм, протравилась, но со спайками, пришлось процарапывать. А в целом с первого раза ать и никаких проблем. Аж сразу захотелось сделать что нибудь маленькое маленькое, нафаршированное нафаршированное:)

UART микроконтроллеров AVR.

Одним из самых распространенных протоколов взаимодействия микроконтроллера с внешними устройствами является UART (Universal Asynchronous Receiver-Transmitter ) - Универсальный асинхронный приёмопередатчик . Данный протокол аппаратно реализован в большинстве микроконтроллеров AVR , что позволяет разработчику не вдаваться в особенности реализации данного интерфейса. Для его использования достаточно настроить всего несколько регистров!

Рассмотрим кратко принцип работы UART .

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

При передаче байта передатчик изначально выставляет логический 0 на выводе TX (Transmitter ). Это так называемый старт-бит, означающий начало передачи. После этого передатчик выставляет биты передаваемого байта через определенные промежутки времени, заданные частотой. Далее может быть передан бит четности, который служит для проверки качества передачи. Когда переданы все биты, выставляется стоп-бит, то есть логическая 1 на линии передачи. Число стоп-битов может быть различным:1 ; 1 , 5 ; 2.

Огромным плюсом данного интерфейса является возможность его использования для настройки связи с ПК. Для этого необходимо изготовить UART —RS 232 или UART —USB переходники, основанные на микросхемах MAX 232 и FT 232RL соответственно.

Подробнее о переходниках здесь.

За работу с UART (на самом деле USART , о днако, для нас это сейчас не важно) отвечают следующие регистры:

UDR - Регистр данных UART . При передаче в него записываются данные, которые необходимо отправить, а при чтении — принятые данные. Всё просто.

UCSRA - Регистр контроля и статуса UART . Рассмотрим биты данного регистра подробнее:

  • RXC (Receive Complete ) - флаг окончания приема данных. Устанавливается в 1 при наличии несчитанных данных и сбрасывается в 0 по окончании приема данных.
  • TXC (Transmit Complete ) - флаг окончания передачи данных. Сбрасывается в 0 по окончании передачи данных и устанавливается в 1 при наличии непереданных данных.
  • UDRE (Data Register Empty ) - флаг, означающий готовность регистра UDR получать новые данные. Когда UDRE равен 1, регистр UDR пуст и готов к приему новых данных.
  • FE (Frame Error) - флаг ошибки фрейма.
  • DOR (Data OverRun ) - флаг переполнения регистра данных.
  • PE (Parity Error) - флаг ошибки четности
  • U 2 X - бит, позволяющий увеличить скорость передачи вдвое. При записи 1 в данный бит предделитель тактовой частоты модуля UART уменьшается вдвое, что позволяет вдвое увеличить скорость передачи данных.
  • MPCM - мультипроцессорный режим коммуникации.

UCSRB - Регистр контроля и статуса UART .

  • RXCIE (RX Complete Interrupt Enable ) - Бит, разрешающий или запрещающий генерацию прерывания по окончании приема. При записи 1 в данный бит прерывание по окончании приема разрешено, при записи 0 — запрещено.
  • TXCIE (TX Complete Interrupt Enable ) - При записи 1 в данный бит прерывание по окончании передачи данных разрешено, при записи 0 — запрещено.
  • UDRIE (Data register empty Interrupt Enable ) - Бит, разрешающий или запрещающий возникновение прерывания по флагу UDRE .
  • RXEN (Reciever Enable ) - Запись 1 в данный бит включает приемник UART модуля, запись 0 — выключает.
  • TXEN (Transmitter Enable ) - Запись 1 в данный бит включает передатчик UART модуля, запись 0 — выключает.
  • UCSZ 2 (Character Size ) - В паре с битами UCSZ 1 и UCSZ 0 задает число передаваемых бит.То есть мы можем передавать не только побайтно, но и по 5,6,7,8,9 бит.
  • RXB 8 (Receive Data Bit 8) - 9 бит принимаемых данных при передаче по 9 бит. Должен быть считан перед операциями с регистром UDR .
  • TXB 8 (Transmit Data Bit 8) - 9 бит отсылаемых данных при передаче по 9 бит. Должен быть записан перед записью других бит в UDR .

UCSR С - Регистр контроля и статуса UART .


  • UCPOL - Данный бит позволяет настроить, по какому фронту будет происходить обмен данными при синхронном режиме передачи. При работе в асинхронном режиме передачи необходимо установить данный бит в 0.

Регистры UBRRL и UBRRH отвечают за настройку скорости работы приемопередатчика. Следует помнить, что при работе с регистром UBRRH бит URSEL должен быть равен 0.

Для получения необходимой скорости работы UART значение UBRR (Пары регистров UBRRH и UBRRL ) рассчитывается по следующей формуле:

UBRR = (F osc /(B*16))-1

Где,

F osc - частота работы микроконтроллера (Гц).

B - необходимая скорость работы UART (Бит/сек).

Например, необходимо настроить скорость передачи 9600 бит/ сек при работе микроконтроллера на частоте 8 МГЦ(8000000 Гц).

UBRR = (8000000/(9600*16))-1 = 51.083333

Округляем до целого числа, то есть до 51.И уже данное число записываем в регистры UBRRL:UBRRH.

Урок получился достаточно объемным, поэтому практическую реализацию протокола UART на микроконтроллерах AVR рассмотрим в следующем уроке.

Любое копирование, воспроизведение, цитирование материала, или его частей разрешено только с письменного согласия администрации MKPROG .RU . Незаконное копирование, цитирование, воспроизведение преследуется по закону!

UART - Universal Asynchronous Receiver-Transmitter, или по русски Универсальный Асинхронный Приёмопередатчик - УАПП. Используется для организации связи компьютера с различными цифровыми устройствами в электронике. Интерфейс преобразует передаваемые данные в последовательный код так, чтобы была возможна их передача по одной цифровой линии другому электронному устройству. Прямого описания протокола UART все таки есть, но его косвенное описание можно увидеть в стандартах на широко известные физический протоколы RS-232, RS-422, RS-423, RS-485

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

Главным достоинством параллельной передачи можно считать то, что за один момент посылается сразу группа битов. К тому же внутри микроконтроллера также используется параллельная передача данных, благодаря этому не требуется их дополнительное преобразовании. Но есть и существенные минусы. Главный из них состоит в том, что биты по проводам могут приходить не параллельно и необходимы дополнительные схемотехнические решения для получения точных посылок. Это ограничивает скорость передачи.

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

Универсальный Асинхронный Приёмопередатчик - УАПП применяется с начала 60-х годов прошлого века и с тех пор претерпевал серьезные модернизации. Даже в 21 столетии последовательные протоколы UART всё ещё представляют один из основных методов обмена битами между различными цифровыми устройствами на небольшие расстояния.

UART является базой так широко используемого в прошлом . В самом простом виде UART интерфейс представляет собой три провода: передача, приём и земля.


Существенный минус универсального асинхронного приёмопередатчика кроется в том, что нет возможности определить какое из цифровых устройств является ведущим, а какое ведомым (мастер / раб). Обычно, это определяет то кто проектирует схему может назвать этот провод как TX и задать работу устройства, в соответствии с рисунком ниже:


В данном случае микроконтроллер принимает, и передаёт данные. А можно сделать следующим образом:


В соответствие с этой схемой микроконтроллер всегда передаёт (TX) получателю (RX) и наоборот. Какая из двух схем все таки правильная? Оказывается обе, все зависит только от производителя микросхемы и готового цифрового устройства.

Внимание TX, подключенный к TX и RX-RX, в большинстве случаев приведет к сгоранию микросхемы, так что это хороший пример того, что надо читать документацию перед тем как соединять чипы по UART, так как существует несколько способов соединения.

Если приемник и передатчик находятся на одной печатной плате, тогда уровень сигнала при приеме-передаче практически равен уровню напряжения питания микроконтроллера. Допустим, уровень логической единицы - "1" будет передаваться с потенциалом 3.3В, а ноль, с потенциалом, не более 0,5 Вольта. С передачей сигнала на большие расстояния начинают появляться проблемы в виде искажения сигнала и растет , появляются ошибки передачи, вплоть до полной остановки.

Для того, чтобы исключить такие проблемы в линию передачи и приема добавляют дополнительные буферы, которые усиливают сигнал. После этого их можно передавать на десятки метров без потери информации. Но в д.с для передачи уровня логической единицы применяется напряжение -3В..-15В, а для "0" - +3В до +15В.


Вместо инхронизации в UART применяется, так называемый "стартовый бит" подготавливающий цифровую схему к передачи сообщения. После стартового бита иду данные, а затем в линию посылается "стоп-бит", говорящий о завершении передачи информации. Вместе выходит 10 бит: первый - старт-бит, 8 бит данных, и последний стоп-бит, смотри осциллограмму передачи данных по протоколу UART интерфейса на рисунке ниже.


Биты передаются с определенной скоростью передачи, которая измеряется в битах в секунду или, в бодах. Так 9600 бод эквивалентно 9600 бит/сек. А так как у нас передаётся 10 бит за одно сообщение, это значит, что мы при этой скорости можем передать 960 сообщений за одну секунду.

Значение скорости передачи не передаётся вместе с сообщением, то в приёмнике и передатчике должны быть заранее заданы равные скорости. Интерфейс UART допускает до 5% рассинхронизации таймеров. В этом интервале он может получать и принимать верные информационные данные.

Можно сказать со 100% уверенностью, что каждый современный микроконтроллер имеет в своем составе универсальный последовательный интерфейс - UART. Умея работать с этим портом вы можете согласовать работу старых и современных электронных устройств, передать или принять данные в различные электронные устройства.

В современных микроконтроллерах, вместо UART интерфейса используют полностью с ним совместимый стандарт USART (универсальный асинхронный/синхронный приёмопередатчик).

USART это более гибкий в плане настройки UART с дополнительными функциями. В USART можно регулировать длину слова с более большим интервалом (от 5 до 9) чем в UART (от 8 до 9). В USART возможна как синхронная так асинхронная и передача данных (в UART осуществляется только асинхронная). При синхронной передачи помимо двух линий - данных и питания, применяется дополнительная шина (XCK) с синхросигналом. С такой настройкой USART уже пересекается с интерфейсом SPI и его можно применять как «ведущий» в интерфейсе SPI.

Рассмотрим классический случай, когда интерфейс асинхронный (т.е. с отсутствующей линией синхронизации).

Передача данных в UART интерфейсе происходит по одному биту в одинаковые временные промежутки. Этот промежуток задается скоростью UART и для конкретного типа соединения обозначается в бодах, что соответствует количество бит в секунду. В электронике имеется общепринятый ряд типовых скоростей: 300; 600; 1200; 2400; 4800; 9600; 19200; 38400; 57600; 115200; 230400;460800; 921600 бод;

Скорость (S, бод) и длительность бита (T, секунд) связаны между собой общеизвестной формулой

Байт данных отправляются в пакетах (первый бит идет перед байтом данных и второй бит следует после, количество бит опциональны)


Для приема и передачи данных в интерфейсе UART применяются всего две линии данных и земля:

передающая шина данных (TXD или TX);
принимающая линия данных (RXD или RX);
земля (GND).

Уровню логической единицы и нуля аналогичны типовым уровням TTL:

лог. "1" - +5 Вольт;
лог. "0" 0 Вольт.

Разновидность UART - интерфейс RS-485

Сети, построенные на основе интерфейсов RS-485 и RS-422, представляет собой приемопередатчики, подключенные с помощью витой пары. В основе RS-485 лежит принцип дифференциальной (балансной) передачи данных. Основа ее базируется на передаче одного сигнала по двум проводам. Причем по первому проводу (A) интерфейса следует оригинальный сигнал, а по второму - его инверсная копия. Простыми словами, если на А "1", то на В "0" и наоборот, т.е, между двумя проводами витой пары всегда существует разность потенциалов: при "1" уровне она положительная, при "нулевом" - отрицательная.

Интерфейс RS-232 (стандарт EIA) был создан для сопряжения персонального компьютера (PC) и аппаратуры передачи данных (модема) с использованием синхронно-асинхронного режима передачи на расстояние до нескольких метров . Стандарт предусматривает два типа разъемов DB25 и DB9 с 8 сигналами. Данные передаются по 2 независимым цепям RxD, TxD приемопередатчиков интерфейса (UART1, UART2 на рис. 1.14) и позволяют использовать дуплексный режим обмена, остальные 6 сигналов предназначены для управления обменом данных. В современных реализациях интерфейса эти сигналы не используются, предполагается постоянная готовность приемопередатчиков к обмену данными (интерфейс UART). Применяемые алгоритмы управления вместо формирования управляющих сигналов производят передачу управляющих сообщений вместе с основными данными через сигнальные цепи RxD, TxD.

Рис. 1.14. Интерфейс RS232

Для функций управления и контроля данных можно использовать алгоритмы и средства стандартных протоколов канального уровня. Эти алгоритмы управления и контроля реализуются как дополнение к интерфейсу UART, используя его стандартный, обычно однобайтовый, формат отдельного сообщения. Инициализация с выбором параметров и режимов должна производиться перед началом работы, каких-либо средств автоматической инициализации интерфейс не содержит.

В настоящее время интерфейс применяется как средство физического уровня в интерфейсах "точка-точка" с невысокой скоростью передачи данных 2,4 – 115,2 кбит/с. Наиболее часто используется асинхронный режим с форматом отдельного сообщения: стартовый бит – 5-8 бит данных – стопо- вый бит (UART-кадр). Стартовый и стоповый биты отмечают начало и конец сообщения и позволяют обеспечить синхронизацию приемопередатчиков и контроль длины сообщения; стартовый бит – сигнал логического нуля в течение 1 такта, а стоповый бит – сигнал логической единицы.

Дуплексный режим передачи данных предполагает независимость работы приемника и передатчика интерфейса. Поэтому они содержат независимые схемы управления и регистры данных. Обычно запись байта данных в регистр передатчика приводит к старту процедуры передачи UART-кадра, а завершение приема UART-кадра формирует сигнал готовности байта данных к считыванию из регистра приемника.

Из-за несложных алгоритмов управления, универсальности и возможности дуплексного обмена данными интерфейс UART широко применяется как стандартный последовательный интерфейс связи между различными техническими средствами автоматизации. Например, микроконтроллеры семейств AVR, PIC и многие другие содержат встроенные средства аппаратной реализации интерфейса UART, через которые могут быть подключены внешние устройств, обеспечивающие поддержку других современных интерфейсов LVDS, 1-W, IrDA, RS-485, CAN и т.п.

Некоторые характеристики и особенности микросхем UART этой фирмы приведены на рис. 1.16.

Если применяемые технические средства не содержат встроенного интерфейса UART, можно использовать специальные микросхемы UART. Эти микросхемы (рис. 1.15) преобразуют параллельный формат данных в последовательный, обеспечивают хранение данных в буферных запоминающих устройствах, формируют необходимые сигналы управления интерфейса, запросы прерываний для обработки данных передаваемых интерфейсом и т.п. Компания EXAR является признанным лидером в области

производства микросхем UART.

Рис. 1.15. Передача данных с помощью микросхем UART

Рис. 1.16. Классификация микросхем UART фирмы EXAR

Самым простым среди 8-разрядных UART является микросхема ST16C450 (рис. 1.17).

Рис. 1.17. Структурная схема ST16C450

Это устройство полностью совместимо с промышленным стандартом 16450 и обладает следующими свойствами:

Раздельное управление приемом и передачей;

Программно управляемая скорость передачи (от 50 бит/с до 1.5 Мбит/с);

Сигналы управления модемом (CTS, RTS, DSR, DTR, RI и CD);

Программируемая длина передаваемых символов (5, 6, 7 и 8 бит);

Генерация и обнаружение битов четности;

Низкий потребляемый ток – 1.2 мА.

Кроме традиционных UART с 8-разрядной параллельной шиной, фирма EXAR производит 32-разрядные UART для работы с шиной PCA. Внутренние буферы FIFO предназначены для разгрузки процессорного ядра и позволяют уменьшить число прерываний для обслуживания UART. Например, микросхема UART типа XR16C85x с объемом FIFO 128 байт может накапливать в буфере целую страницу данных, увеличивая длительность передачи без прерываний CPU.

Ранее было отмечено, что интерфейс RS-232 предусматривает применение двух типов разъемов: DB9 и DB25. Назначение контактов разъемов приведено в табл. 1.2.

Таблица 1.2

№ контакта

№ контакта

Назначение

Детектор сигнала с линии (несущей)

Прием данных

Передача данных

Готовность терминала

Сигнальное заземление

Готовность данных

Запрос передачи

Готовность к передаче

Индикатор вызова

Достаточно часто сигналы интерфейса формируются со стандартными логическими уровнями (0-5 В), а по протоколу RS-232 уровни напряжений составляют ±12 В. Приемопередатчики для преобразования физических уровней сигналов интерфейса UART, называемые драйверами COM-порта, выпускаются многими производителями интегральных микросхем. Отличаются микросхемы числом приемников и передатчиков, питающими напряжениями, потребляемой мощностью, максимальной скоростью передачи, а также наличием встроенных конденсаторов и некоторыми другими параметрами.

Лидерами по производству микросхем в этой области являются фирмы Maxim и Analog Devices. Перечень микросхем RS-232 Line Driver/Receivers, выпускаемых фирмой Maxim, состоит из 150 наименований, фрагмент перечня приведен в табл. 1.3. Аналогичный перечень для Analog Devices приведен в табл. 1.4.

В стандартных применениях интерфейс RS-232 используется для соединения двух устройств. Одно из этих устройств является передатчиком, а другое – приемником. В этой связи сигналы линии связи RS-232 приемником и передатчиком формируются и обрабатываются по-разному.

Скорость (кбит/с)

Режим энерго- сбереже-ния

Состояние RxD

Конденсаторы

Напряжение питания (В)

Ток потребления (мА)

Скорость (кбит/с)

Режим энерго- сбереже-ния

Состояние RxD

Конденсаторы

Напряжение питания (В)

Ток потребления (мА)

Устройство-передатчик (например, компьютер) в системе передачи данных принято называть оконечным оборудованием данных или DTE (Data Terminal Equipment), а приемник (например, модем) – устройством аппаратуры передачи данных или DCE (Data Communication Equipment). Направление передачи сигналов между DTE и DCE показано в табл. 1.5.

Как видно из табл. 1.5, каждый сигнал выходной для одного устройства и входной – для другого. Например, для DTE-устройства сигнал передаваемых данных TD является выходным, а для DCE-устройства сигнал TD является входным. DCE-устройство формирует сигнал DCD (если это модем, то он определяет наличие несущего сигнала в телефонной линии), а DTE-устройство принимает этот сигнал и т.п.

Устройство DTE

Направление передачи

Устройство DCE

- * ¦¦

В некоторых случаях возникает задача обеспечить работу интерфейса RS- 232 между двумя однотипными устройствами, например, необходимо обеспечить соединение DTE-DTE (компьютер-компьютер). Соединения между разъемами в этом случае определяются коммуникационными программами, используемыми компьютерами. В минимальной конфигурации кабель, соединяющий два устройства, должен содержать три провода: один – для объединения сигнальной земли SG, второй и третий – для передачи сигналов TD и RD (рис. 1.18), причем необходимо выполнить перекрестное соединение сигналов. Такой кабель, например, может обеспечить соединение двух компьютеров с помощью встроенной в Windows программы Hyper Terminal.

Если компьютер "предполагает", что он работает с модемом, то, в этом случае, можно применить нуль-модемный кабель (рис. 1.19). На этом рисунке цифрами обозначены контакты разъема DB25M, а штриховой линией – провод "защитной земли"- GND.

Рис. 1.18. Трехпроводный вариант RS-232

Рис. 1.19. Нуль-модемные соединения кабелей RS-232

Выбор варианта соединения определяется условиями формирования управляющих и проверочных сигналов устройств DTE. Следует отметить, что вариант кабеля "a" наиболее популярен, и его следует использовать в тех случаях, когда нет достаточной информации об особенностях реализации интерфейсов соединяемых устройств. Вариант кабеля "г" позволяет "убедить" компьютер в постоянной готовности внешнего устройства DTE к приему и передаче сигналов.

Рис. 1.23. Схема питания устройства ввода-вывода от COM-порта