Как связать микроконтроллер и компьютер по каналу rs-232

Сопряжение ПК и внешних устройств на базе микроконтроллера по интерфейсу RS232

Автоматика. Вычислительная техника » Сопряжение ПК и внешних устройств на базе микроконтроллера по интерфейсу RS232

Кузьминов А.Ю.

В книге отражены вопросы по аппаратным средствам и программному обеспечению сопряжения компьютера с современными 51-совместимыми микроконтроллерами — системами на кристалле (MSC12XX, ADUC8XX, P89LPC9XX, AT89C51ED2/RD2 и C8051F067/330).

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

Рассмотрены схемные решения и программное обеспечение программирования в системе (In-System-Programming-ISP) современных микроконтроллеров по интерфейсу RS232. Предложен разработанный автором новый протокол обмена по интерфейсу RS232, использующий аппаратную синхронизацию с помощью линий данных и обладающий высокими надежностью и скоростью обмена (115 200 бод).

Показано преимущество применения прямых команд ввода/вывода (in и out) в COM-порт перед использованием API-функций при программировании интерфейса RS232 в OC Windows 98/XP. Даны рекомендации по последовательности действий, позволяющих применить прямые команды ввода/вывода в COM-порт в OC Windows 98/XP.

Книга снабжена большим количеством примеров по схемным решениям (приведены принципиальные схемы и фотографии макетных плат) и программному обеспечению для OC DOS и Windows XP (приведены тексты программ). Программы для микроконтроллеров написаны на ассемблере и С51 (Keil, v.6.

14), а для компьютера — на языке Кларион, являющемся одной из двух распространенных современных RAD-систем (вторая — Delphi), предназначенных для быстрой разработки приложений (Rapid Application Development — RAD). Программы для компьютера, работающие в DOS, написаны на языке Кларион для DOS (Clarion v.3.100), работающие в Windows 98/XP — на языке Кларион для Windows (Clarion v.6.0) и встроенному в него С ++. Описаны примеры использования RS232 в системах сбора и обработки информации с датчиков.

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

Издательство: ДМК-Пресс 2008

978-5-94074-447-4

Цена: 288 руб. 

Наличие: Отсутствует

Подробнее…

Источник: http://rcl-radio.ru/?p=32083

Связь микроконтроллера и компьютера по каналу RS-232

Общее описание устройства.

Связь микроконтроллера и компьютера по каналу RS-232 можно рассмотреть на примере устройства (рис.13.), которое представляет собой цифровой вольтметр. На входе вольтметра стоит операционный усилитель (DA1), имеющий высокое входное сопротивление. За операционным

усилителем следует АЦП (DD2), позволяющий оцифровать интересующее нас напряжение для последующей передачи в микроконтроллер. В микроконтроллер

DD3 является главным управляющим звеном устройства, так как он считывает информацию из АЦП и общается с персональным компьютером по последовательному каналу.

В устройство также входят преобразователи питания для выработки +5 В для цифровой части и для выработки +/-10 В для операционного усилителя, а также микросхема преобразования уровней (логические «0» и «1» в -15…

+15 В и обратно) для обмена информации по последовательному каналу типа RS-232.

Преобразователь питающего напряжения MAX680

На вход микросхемы подается напряжение ивх величиной от 3…5 до 6…10 В (в зависимости от типа), на выходах ее формируются напряжения, равные примерно ±2ивх.

Замечательно то, что, во-первых, для формирования этих напряжений помимо 8-выводных MAX680 или LT1026 нужно всего лишь 4 небольших электролитических конденсатора (см. рис.13.

), а во-вторых, при изменении входного напряжения удвоенные выходные изменяются синфазно, что практически не сказывается на выходном сигнале ОУ. АЦП MAX1241

MAX1241 упакована в 8-выводный корпус, питается напряжением от 2,7 до 5 В, потребляет ток около 5мА. Она требует применения внешнего источника опорного напряжения (в данном случае применен прецизионный стабилитрон КР142ЕН19, формирующий напряжение 2,50 В) и использует для связи с микроконтроллером всего три линии.

Работу MAX1241 иллюстрируют временные диаграммы, изображенные на рис.14. До начала преобразования и обмена вход CS# MAX1241 должен поддерживаться микроконтроллером в единичном состоянии. Для старта

преобразования на этот вход необходимо подать уровень логического нуля. Процесс преобразования в MAX1241 переводит выход DOUT в уровень логического 0. После завершения преобразования MAX1241 переводит выход DOUT в единичное состояние. Преобразователь уровней MAX202E

MAX202E от MAXIM и полностью идентичная ей вплоть до цоколевки, AD232 от Analog Devices.

Внутри себя обе микросхемы содержат преобразователь напряжения +5 В в ±10 В, идентичный вышеописанному MAX680, и каскады, осуществляющие преобразование логических сигналов стандартного уровня в сигналы уровня по стандарту RS-232.

Каждая из упомянутых микросхем содержит преобразователи логического уровня для двух приемников и двух передатчиков. Мы воспользуемся только одним приемопередающим каналом.

Источник: http://knigechka.blogspot.com/2009/10/rs-232.html

Подключение контроллера к компьютеру по RS-232 с помощью встроенного модуля USART

В данной статье приведена схема для организации двунаправленного обмена данными по интерфейсу RS-232 между контроллером и компьютером ( встроенный модуль USART com-порт ), на примере микроконтроллера PIC16F628A.

Итак, модуль USART в PIC16F628A встроенный (реализован аппаратно), но контроллер работает с TTL уровнями (0, +5В), а интерфейс RS232 имеет уровни +5…+15В, -15…-5В, следовательно, нам нужен двунаправленный преобразователь уровней TTL RS232. Возьмем для этого стандартную, достаточно распространенную микросхему MAX232.

Схема:

Вот такая схемка. В общем-то, главное подключить GND, RX, TX. Это, соответственно, земля, линия приемника, линия передатчика. Как видите, приемник контроллера (RX) надо соединить с передатчиком компьютера (TxD), а передатчик контроллера (TX) с приемником компьютера (RxD).

Собственно, CTS и RTS можете, если хотите, не подключать, а можете использовать их по другому: CTS как DSR (тогда его надо будет подключить к DTR компьютера), а RTS как DTR (его надо будет подключить к DSR компьютера).

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

Остальные входы/выходы контроллера можете использовать по своему желанию, например, для управления светодиодами, подключения ЖКИ и т.д.

Важно: линии RX, TX следует подключать строго по схеме, так как именно на эти ноги выведен встроенный USART контроллера (на 7-ю ногу RX, на 8-ю ногу TX), а вот сигналы CTS, RTS можете подключить к любым другим входам/выходам (повторюсь, ко встроенному модулю USART они отношения не имеют, просто с ними можно потом аппаратный контроль сделать).

Детали: конденсаторы С1…С5 — 1 мкФ, конденсатор С6 — 0,1 мкФ, резистор R1 — 1 кОм.

Неиспользуемые входы контроллера следует подтягивать через резисторы к земле или питанию, либо программировать как выходы (RA2 только подтягивать — этот вывод контроллера может быть только входом) иначе контроллер будет ловить на эти входы всякие наводки.

Готовый девайс:

В даташите на MAX конденсаторы обвязки — электролиты. В устройстве на фотографии использовалась микросхема MAX232CSE с керамическими конденсаторами на 0,1 мкФ, — отлично работает (я вообще электролитов ни в одном “фабричном” устройстве на MAX232 не видел, зато видел много MAX232CWE и MAX232CSE с керамикой на 0,1 мкФ).

Иногда бывает очень удобно использовать преобразователь уровней RS232 TTL в виде отдельной платы (там же — более подробное исследование на тему возможных номиналов конденсаторов обвязки).

Потребляет схема не более 15 мА, так что, если у вас нет внешнего источника питания +5В, можно запитать ее прямо от разъема USB.

Пример программирования модуля USART

Скачать плату в формате Sprint-Layout 5.0. Плата разведена для SMD компонентов (кроме пика, конечно).

Источник: http://radiohlam.ru/?p=858

Соединяем микроконтроллер с компьютером посредством интерфейса RS232

Источник: http://anubis-system.ucoz.com/publ/programmirovanie_mikrokontrollerov/programmirovanie_pic_mikrokontrollerov/soedinjaem_mikrokontroller_s_kompjuterom_posredstvom_interfejsa_rs232/9-1-0-10

Связь МК с ПК через RS-232

avrki@avrki.ru

Дата: 5 Февраля 2013. Автор: КонтроллЁр

Здравствуйте уважаемые посетители сайта. Как-то я начал уж слишком торжественно) Значит решил я поделиться своими попытками освоить RS-232. Кто не знает, это COM-порт который торчит сзади у любого ПК. Если вдруг у вас нет такого порта, то можно воспользоваться переходником USB-RS232. Коих сейчас навалом и работают они довольно сносно.

Далее давайте взглянем на схему.
Что я тут изобразил. А вот что. Здесь “классическая” схема LM7805+ATtiny2313+MAX232. Что это такое? Да все просто, чтобы соединить МК с СОМ-портом нужно три провода. RXD – принимает данные, TXD – передает данные и GND – объяснения не требует) Но тут есть одно НО…

Уровни сигналов МК не превышают +5вольт, а вот на СОМ-порту мы встретим +12в и -12в. Ну как-то МК будет жарковато от такого. Что же делать? Для сопряжения МК с СОМ-портом была придумана замечательная микросхема фирмы “Maxim” MAX232. Что в ней хорошего. А вот что. Для ее включения нам потребуется лишь пять конденсаторов на 1 мкФ и все.

(Смотрим схему выше) Дальше просто через микросхему пропускаем наши провода и все, микросхема сама разберется какие где уровни выставить. На схеме показан разъем DB-9 уже перевернутый. То есть TXD(МК) идет на RXD(ПК), а RXD(МК) идет на TXD(ПК). Можно конечно и прямой спаять но тогда нужен будет нуль-модемный кабель.

Ну вроде с железом разобрались, давайте перейдем к программе.
Сначала перейдем к настройке среды программирования. Запускаем CodeVisionAVR. (Надеюсь он у вас установлен) Далее выбираем новый проект и соглашаемся с созданием визордом начального кода. Далее выбираем наш МК и частоту кварца.
Теперь переходим на вкладку USART и заполняем как на рисунке ниже.

Теперь отвечу на вопрос самых не терпеливых, почему такое смешное значение кварца мы выбрали на вкладке Chip. Если взглянуть на вкладку USART на надпись “Boud Rate Error: 0,0%”, то должно стать понятно почему. Для работы UART требуется указать битрейт (сколько бит пробежит за секунду) Мы выбрали 38400. Теперь нам надо рассчитать частоту кварца.

Для этого есть формула:
BOUD = fck/16(UBRR+1) То есть битрейт равен частоте кварца деленной на 16 и сумму UBRR с 1. Вроде все ясно, кроме регистра UBRR который отвечает за контроль скорости передачи. Можно конечно в лоб поставить кварц на 4МГц и посчитать UBRR, но он получится не целым числом и при передаче будут возникать ошибки.

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

UBRR = (fck/(16*BOUD))-1

Подставляем наши значения:

UBRR = (3686400/(16*38400))-1 = 5

Замечательно, а теперь давайте взглянем на то что нам сгенерил визард. А теперь давайте попробуем посчитать, если бы мы выбрали 4МГц.
UBRR = (4000000/(16*38400))-1 = 5,51 Ну вот видите какое число получили. Ну с этим разобрались, поехали дальше. После долгих расчетов давайте попробуем что-нибудь вывести на ружу.

Поднимитесь на самый верх и найдите строку: // Declare your local variables here
После этого комментария допишите следующею строку:
char x, y;
Этой строкой мы про инициализировали две локальные переменные х и у.

Теперь идем вниз и в тело основного цикла впишем такой код:
if(x == y) { x = getchar(); } else { putchar(x); y = x; } Что мы тут получили. Сначала мы сравниваем значение х и у.

Если они равны, то в переменную х пытаемся занести данные из UART, а если не равны, то вычитываем значение из порта и приравниваем значения у к новому х. Решение конечно не из лучших, но для понимания и визуализации проекта допустимо.

Как вы заметили для записи значения в СОМ-порт нужно лишь вызвать функцию putchar(char x); и передать ей передоваемое значение вида char. Для чтения из СОМ-порта, нужно вызвать функцию getchar(); которая вернет текущее значение из СОМ-порта. Вот как это выглядит в терминале Proteus.

Помните что UART это по сути 8-битные сдвиговый регистр. И вталкивать туда int-ы бессмысленно. Вот вроде и все, пишите в коменты если что непонятно.

Частота 3,686400 МГц где-то в коде указывается? Или нужно искать кварц с такой частотой?

Нужен кварц такой. Такая частота нужна для минимизации ошибок. Продаётся в любом радио магазине.

А если без кварца задать такую частоту у МК, то работать будет без ошибок? Или МК только на фиксированной частоте работает?

Внутренний генератор сильно плавает, а для UART это не приемлемо. Установка кварца обязательно!

искать например HC49S-7.3728MHZ

Хорошая статья, сразу все дошло, спасибо)

Источник: http://www.avrki.ru/articles/content/mktors232/

Сопряжение микроконтроллера с компьютером без MAX232 | others | adminstuff

Источник: http://microsin.net/content/view/649/43/

Связь микроконтроллера с компьютером через RS232

Почти все микроконтроллеры имеют на борту последовательный порт — UART. Работает он по стандартному последовательному протоколу, а значит его можно без проблем подключить к компу на 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, цепляешься к порту и начинаешь посылать байты, они должны тотчас возвращаться обратно. Если этого не произошло — проверяй схему, где то косяк.

 

Источник: http://easyelectronics.ru/svyaz-mikrokontrollera-s-kompyuterom-cherez-rs232.html

Подключение микроконтроллера к компьютеру

ПодробностиКатегория: МикроконтроллерыОпубликовано 08.03.2014 19:11Просмотров: 9556

Один из вопросов, вызывающих повышенный интерес у начинающих (да и у опытных) конструкторов микропроцессорных систем является вопрос взаимодействия микроконтроллера с компьютером.

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

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

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

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

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

Шина ISA в те времена использовалась для подключения всех устройств расширения, таких как видеокарты, модули дополнительной памяти, контроллеры жестких дисков и т.п. Разъем для подключения к такой шине можно было при определенной сноровке, изготовить самостоятельно. Он представлял собой просто выступ печатной платы вашего вставного модуля с дорожками вместо контактов.

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

Теперь для подключения внешних устройств нам приходится использовать один из стандартных интерфейсов ввода вывода. Если отбросить такие сложные в реализации варианты, как подключение по ИК порту или по Bluetooth (БлюТуз), то остается только три варианта: подключение по LPT, подключение при помощи COM-порта и наконец, подключение по USB. Рассмотрим все эти варианты по порядку.

Подключение при помощи LPT порта

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

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

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

Например, программатор PonyProg, описанный в книге [1] при работе с LPT портом программно реализует последовательный канал связи SPI. Это один из протоколов, при помощи которого можно «прошить» программу в микроконтроллер AVR.

Использование LPT для связи с компьютером имеет и свои недостатки: Во-первых, современные операционные системы, в частности, последние версии Windows XP и тем более Vista защищают LPT порт от прямого доступа со стороны пользовательских программ. Поэтому написание программ, работающих с LPT крайне усложняется.

Во-вторых, LPT порты просто выходят из употребления. Все современные принтеры уже сейчас подключаются только по USB. В ноутбуках уже стало стандартом отсутствие как LPT, так и COM портов. Скоро их перестанут устанавливать и в стационарных компьютерах.

Подключение при помощи COM порта

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

Использовать их не имеет смысла. Лучше тогда уж воспользоваться более богатым в этом смысле портом LPT. Передача информации в COM порте происходит всего по двум линиям. Это линия RxD (прием данных), и линия TxD (передача данных). Для передачи данных используется специальный протокол, который называется RS232.

Большинство современных микроконтроллеров имеют встроенный интерфейс, совместимый с RS232. Это облегчает подключение. Однако есть одна трудность. Полноценный протокол RS232 предусматривает свой собственный стандарт уровней выходных и входных сигналов.

Сигнал на выходе TxD COM-порта принимает два значения: логическая единица – плюс 12В, логический ноль – минус 12В. Такой размах принят для уменьшения влияния помех. Такой же сигнал нужно подавать и на вход RxD. Последовательный канал микроконтроллера поддерживает другие значения уровней сигнала.

Там сигнал используются стандартные логические уровни. Логический ноль – 0В. Логическая единица – примерно +5В. Поэтому для связи COM порта и микроконтроллера необходимо согласовать уровни сигналов. Для этого обычно применяется специальная микросхема фирмы MAXIM. Это микросхема называется MAX232A. Это очень удобная в использовании микросхема.

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

Подключение при помощи USB порта

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

При помощи этого порта к компьютеру могут подключаться внешние накопители на жестких дисках и на Флэш-памяти, джойстики, мышки, звуковые системы, WEB-камеры, MP3 плееры и даже внешние TV-тюнеры. Действующий в настоящее время стандарт USB версии 2.0 поддерживает передачу данных со скоростью от 1.5 Мбит/сек до 480 Мбит/сек.

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

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

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

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

Оно должно правильно отвечать на все запросы компьютера. Но это не единственная проблема. Более серьезная проблема – слишком высокая скорость работы USB интерфейса. Это так же накладывает определенные ограничения и дополнительные требования. Для подключения микроконтроллера к компьютеру по каналу USB существует три способа. Рассмотрим их по порядку.

Использование микроконтроллера со встроенным аппаратным модулем USB.

Фирма Atmel производит несколько видов подобных микроконтроллеров. Например, AT90USB1287 или AT90USB647. Такой микроконтроллер содержит встроенный аппаратный USB интерфейс.

Этот интерфейс берет на себя всю обработку USB протокола, поэтому основное ядро микроконтроллера не загружается этой задачей и может быть занято выполнением своей главной программы.

Использование микросхемы со встроенным USB каналом – это самый грамотный подход с точки зрения качества и надежности работы всей системы. Недостаток – большая стоимость таких микроконтроллеров (примерно 25…30 у.е.).

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

Использование дополнительной микросхемы – преобразователя USB – RS232.

Такая микросхема производится, например, фирмой Future Technology Devices International Limited (FTDI) и называется FT232RL. Микросхема содержит аппаратный USB интерфейс и интерфейс RS232. Основное назначение микросхемы – преобразование данных, поступающих по USB интерфейсу в формат RS232 и наоборот.

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

В микросхеме FT232RL , так же, как и в микроконтроллере RS232 интерфейс работает с уровнями сигналов 0В … +5В. Использование отдельной микросхемы, преобразователя USB-RS232 в настоящее время является самым распространенным решением рассматриваемой нами проблемы.

Во-первых, это упрощает разработку программного обеспечения, так как работа с RS232 несравненно проще, чем работа с USB. Кроме того, такое решение оптимально по цене. Микросхема FT232RL стоит примерно 8 у.е.

Использование дополнительной микросхемы – преобразователя USB – FIFO
Эта микросхема является дальнейшим совершенствованием предыдущего способа.

Примером может служить микросхема FT245R фирмы Future Technology Devices International Ltd. Микросхему удобно применять в том случае, когда микроконтроллер не имеет встроенного последовательного интерфейса, совместимого с RS232. Микросхема FT245R так же, как и в предыдущем случае, эмулирует виртуальный COM порт в компьютере.

Однако данные, посланные компьютером в этот порт записываются внутри микросхемы в буфер, работающий по принципу очереди. Такой буфер в вычислительной технике называется буфер FIFO (сокращение от «First In, First Out»: первый вошел, первыйц вышел). Информация хранится в буфере до тех пор, пока не будет считана от туда микроконтроллером.

Лоя передачи информации от микроконтроллера в компьютер микросхема FT232RL имеет второй FIFO буфер. Компьютер считывает из этого буфера через тот же самый виртуальный COM порт. Микроконтроллер обменивается информацией с обоими FIFO буферами микросхемы FT232RL посредством простой восьмиразрядной шины. Подробнее об этом способе подключения читайте в специальной статье на нашем сайте. Читать.

Аппаратная реализация USB порта

Это самый дешевый способ подключения микроконтроллера к компьютеру посредством USB. Он предполагает наличие лишь самого контроллера. В качестве линий USB интерфейса используются две любые линии одного из портов ввода-вывода. А весь USB протокол реализуется программным путем. При определенных ухищрениях и при условии использования самого медленного режима передачи информации это оказалось вполне возможным. Однако такой способ подключения имеет массу ограничений. Во-первых, из за того, что микроконтроллер работает на грани своей вычислительной мощности, приходится разделять его работу на цикл обмена информацией по USB и цикл выполнения основной задачи. Одновременно выполнять то и другое не получится. Во-вторых, нестыковка по уровням сигналов. Уровень сигнала логической единицы порта USB должен быть в пределах 3…3,6В. А уровень сигнала порта ввода-вывода микроконтроллера примерно равен его непряжению питания. То есть +5В. Поэтому приходится ухищряться. Например, уменьшать напряжение питания микроконтроллера до 3,5 вольт. А это влечет за собой другие неудобства, возникающие при подключении к микроконтроллеру других внешних элементов. Подробно о аппаратной реализации USB читайте в статье Игоря Чешко из Словакии.

Литература:
[1] Разработка устройств на микроконтроллерах AVR, шаг за шагом от “чайника” до профи.

Источник: http://mirmk.ru/index.php/mikrokontrollery/51-podkl-mc-in-comp

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}
");let k=document.querySelector(".flat_pm_modal[data-id-modal=\""+a.ID+"\"]");if(-1===d.indexOf("go"+"oglesyndication")?flatPM_setHTML(k,d):jQuery(k).html(b+d),"px"==a.how.popup.px_s)e.bind(h,()=>{e.scrollTop()>a.how.popup.after&&(e.unbind(h),f.unbind(i),j())}),void 0!==a.how.popup.close_window&&"true"==a.how.popup.close_window&&f.bind(i,()=>{e.unbind(h),f.unbind(i),j()});else{let b=setTimeout(()=>{f.unbind(i),j()},1e3*a.how.popup.after);void 0!==a.how.popup.close_window&&"true"==a.how.popup.close_window&&f.bind(i,()=>{clearTimeout(b),f.unbind(i),j()})}f.on("click",".flat_pm_modal .flat_pm_crs",()=>{jQuery.arcticmodal("close")})}if(void 0!==a.how.outgoing){let b,c="0"==a.how.outgoing.indent?"":" style=\"bottom:"+a.how.outgoing.indent+"px\"",e="true"==a.how.outgoing.cross?"":"",f=jQuery(window),g="scroll.out"+a.ID,h=void 0===flatPM_getCookie("flat_out_"+a.ID+"_mb")||"false"!=flatPM_getCookie("flat_out_"+a.ID+"_mb"),i=document.createElement("div"),j=jQuery("body"),k=()=>{void 0!==a.how.outgoing.cookie&&"false"==a.how.outgoing.cookie&&h&&(jQuery(".flat_pm_out[data-id-out=\""+a.ID+"\"]").addClass("show"),j.on("click",".flat_pm_out[data-id-out=\""+a.ID+"\"] .flat_pm_crs",function(){flatPM_setCookie("flat_out_"+a.ID+"_mb",!1)})),(void 0===a.how.outgoing.cookie||"false"!=a.how.outgoing.cookie)&&jQuery(".flat_pm_out[data-id-out=\""+a.ID+"\"]").addClass("show")};switch(a.how.outgoing.whence){case"1":b="top";break;case"2":b="bottom";break;case"3":b="left";break;case"4":b="right";}jQuery("body > *").eq(0).before("
"+e+"
");let m=document.querySelector(".flat_pm_out[data-id-out=\""+a.ID+"\"]");-1===d.indexOf("go"+"oglesyndication")?flatPM_setHTML(m,d):jQuery(m).html(e+d),"px"==a.how.outgoing.px_s?f.bind(g,()=>{f.scrollTop()>a.how.outgoing.after&&(f.unbind(g),k())}):setTimeout(()=>{k()},1e3*a.how.outgoing.after),j.on("click",".flat_pm_out .flat_pm_crs",function(){jQuery(this).parent().removeClass("show").addClass("closed")})}countMode&&(flat_count["block_"+a.ID]={},flat_count["block_"+a.ID].count=1,flat_count["block_"+a.ID].click=0,flat_count["block_"+a.ID].id=a.ID)}catch(a){console.warn(a)}}function flatPM_start(){let a=flat_pm_arr.length;if(0==a)return flat_pm_arr=[],void jQuery(".flat_pm_start, .flat_pm_end").remove();flat_body=flat_body||jQuery("body"),!flat_counter&&countMode&&(flat_counter=!0,flat_body.on("click","[data-flat-id]",function(){let a=jQuery(this),b=a.attr("data-flat-id");flat_count["block_"+b].click++}),flat_body.on("mouseenter","[data-flat-id] iframe",function(){let a=jQuery(this),b=a.closest("[data-flat-id]").attr("data-flat-id");flat_iframe=b}).on("mouseleave","[data-flat-id] iframe",function(){flat_iframe=-1}),jQuery(window).on("beforeunload",()=>{jQuery.isEmptyObject(flat_count)||jQuery.ajax({async:!1,type:"POST",url:ajaxUrlFlatPM,dataType:"json",data:{action:"flat_pm_ajax",data_me:{method:"flat_pm_block_counter",arr:flat_count}}})}).on("blur",()=>{-1!=flat_iframe&&flat_count["block_"+flat_iframe].click++})),flat_userVars.init();for(let b=0;bflat_userVars.textlen||void 0!==a.chapter_sub&&a.chapter_subflat_userVars.titlelen||void 0!==a.title_sub&&a.title_subc&&cc&&c>d&&(b=flatPM_addDays(b,-1)),b>e||cd||c-1!=flat_userVars.referer.indexOf(a))||void 0!==a.referer.referer_disabled&&-1!=a.referer.referer_disabled.findIndex(a=>-1!=flat_userVars.referer.indexOf(a)))&&(c=!0),c||void 0===a.browser||(void 0===a.browser.browser_enabled||-1!=a.browser.browser_enabled.indexOf(flat_userVars.browser))&&(void 0===a.browser.browser_disabled||-1==a.browser.browser_disabled.indexOf(flat_userVars.browser)))){if(c&&void 0!==a.browser&&void 0!==a.browser.browser_enabled&&-1!=a.browser.browser_enabled.indexOf(flat_userVars.browser)&&(c=!1),!c&&(void 0!==a.geo||void 0!==a.role)&&(""==flat_userVars.ccode||""==flat_userVars.country||""==flat_userVars.city||""==flat_userVars.role)){flat_pm_then.push(a),flatPM_setWrap(a),flat_body.hasClass("flat_pm_block_geo_role")||(flat_body.addClass("flat_pm_block_geo_role"),flatPM_ajax("flat_pm_block_geo_role")),c=!0}c||(flatPM_setWrap(a),flatPM_next(a))}}}let b=jQuery(".flatPM_sticky");b.each(function(){let a=jQuery(this),b=a.data("height")||350,c=a.data("top");a.wrap("
");let d=a.parent()[0];flatPM_sticky(this,d,c)}),debugMode||countMode||jQuery("[data-flat-id]:not([data-id-out]):not([data-id-modal])").contents().unwrap(),flat_pm_arr=[],jQuery(".flat_pm_start, .flat_pm_end").remove()}

Мигание светодиодами это конечно здорово, но хочется двигаться дальше узнавая что-то новое. Сегодня мы будем подключать наш микроконтроллер к компьютеру и пробовать управлять нашим устройством. Делается это в основном помощью интерфейса передачи данных RS232.

Предыстория

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

Но все же чаще всего в роли терминала выступает персональный компьютер. Устройства в RS232 соединяются друг с другом посредством кабеля с двумя видами разъемов типа D-sub: 9-ти или 25-ти контактный.

В начале использовался только 25-ти контактный разьем, но из-за того что многие устройства не использовали половину контактов стандарт изменили и стало возможным применение 9-ти контактного разьема DE9.

Наименование контактов интерфейсного разьема DE9 (COM)

 Наименование  Направление  Описание  Контакт
 DCD  Вход  Определение несущей (Carrie Detect)  1
 RXD  Вход Принимаемые данные (Receive Data)   2
 TXD  Выход Передаваемые данные (Transmit Data)   3
 DTR  Выход Готовность терминала (Data Terminal Ready)   4
 GND  – Земля, общий провод (System Ground)   5
 DSR  Вход Готовность данных (Data Set Ready)  6
 RTS  Выход Запрос на отправку (Reqest To Send)   7
 CTS  Вход  Готовность приема (Clear To Send)  8
 RI  Вход  Индикатор (Ring Indicator)  9

Для подключения внешних устройств вроде микроконтроллера используют трехпроводную связь RXD, TXD и GND. Для расширения функциональности иногда задействуют дополнительные линий RTS и CTS. Можно конечно заморочится и задействовать все контакты, но это является лишним и на практике такое подключение чаще всего используется при подключении модема к компьютеру.

Читайте также:  Программатор для перепрограммирования чипов принтеров

Сейчас, в связи с активным продвижением интерфейса USB, RS232 отходит на второй план, только некоторые материнские платы продолжают комплектоваться COM-разьемом. Если на вашем компьютере сзади нет такого вот выхода:

то помимо модемного кабеля вам нужно будет купить переходник USB -> COM.

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

Итак приступим…

Создаем в MPLAB пустой проект как это мы делали в предыдущих статьях. Открываем даташит на главе Универсальный синхронно-асинхронный приемо передатчик (USART) и пытаемся понять что там написано.

https://www.youtube.com/watch?v=yr4VMvDZ_pE

Как вы уже знаете место между “void main(void)” и “while(1)” это область начальной настройки микроконтроллера, сюда мы и вписываем все необходимые значения регистров управления. В первую очередь настроим выводы порта C так как именно он участвует в работе модуля USART.

Code

200?'200px':''+(this.scrollHeight+5)+'px');>TRISC=0b11000000;

200?'200px':''+(this.scrollHeight+5)+'px');>PORTC=0b00000000;

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

Если вы внимательно читали его, то увидели: “для корректной работы модуля USART необходимо выводы и порта С перевести в режим входа подав на соответсвующие биты логическую “1”.

Если этого не сделать то можно часами просиживать возле компьютера в поиске ответа – “почему же схема собранная как по написанному все равно не работает?”.

Далее настраиваем регистры управления модуля USART.

Code

200?'200px':''+(this.scrollHeight+5)+'px');>TXSTA=0b00000000;

200?'200px':''+(this.scrollHeight+5)+'px');>    TXEN=1;

200?'200px':''+(this.scrollHeight+5)+'px');>    BRGH=1;

200?'200px':''+(this.scrollHeight+5)+'px');>RCSTA=0b00000000;

200?'200px':''+(this.scrollHeight+5)+'px');>    SPEN=1;

200?'200px':''+(this.scrollHeight+5)+'px');>    CREN=1;

200?'200px':''+(this.scrollHeight+5)+'px');>SPBRG=255;

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

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

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

И наконец к написанным ранее строкам настройки прерываний добавляем команду включения прерывания от модуля USART.

Code

200?'200px':''+(this.scrollHeight+5)+'px');>     RCIE=1;

а в обработчик прерываний следующий блок:

Code

200?'200px':''+(this.scrollHeight+5)+'px');>     if(RCIF)

200?'200px':''+(this.scrollHeight+5)+'px');>     {

200?'200px':''+(this.scrollHeight+5)+'px');>           // Тут будет ваш код

200?'200px':''+(this.scrollHeight+5)+'px');>           RCIF=0;

200?'200px':''+(this.scrollHeight+5)+'px');>     }

Все данные, которые приходят на микроконтроллер, записываются в регистр RCREG. Регистр 8-ми битный, в нем помещается только один символ, поэтому новые символы, пришедшие в микроконтроллер затирают уже принятые.

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

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

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

Code

200?'200px':''+(this.scrollHeight+5)+'px');>     Buffer=RCREG;

где Buffer это наша переменная содержащая очередной принятый байт (символ). Кстати, не забудьте ее объявить в начале программы:

Code

200?'200px':''+(this.scrollHeight+5)+'px');>     char Buffer=0;

Теперь загружаем PROTEUS и смотрим как все работает. Для схемы вам понадобятся:

  1. PIC16F877A (Category – Microprocessor ICS, Sub-category – PIC16 Family);
  2. Button (Category – Switches & Relays, Sub-category – Switches);
  3. Resistor 10k (Category – Resistors, Sub-category – 0.6W Metal Film (хотя на самом деле пофиг каким он будет));
  4. Capacitor 22p (Category – Capacitors, Sub-category – Ceramic Disc);
  5. Cristal 20MHz (Category – Miscellaneous, Sub-category – All) Частоту кварца, как вы помните, надо настраивать в свойствах самого кварца;
  6. Virtual Terminal;
  7. Terminal Mode – Power;
  8. Terminal Mode – Ground.

В конечном счете должно получиться следующее:

После запуска симуляции в открывшемся окне терминала можно набирать любую информацию и она будет отправляться в наш микроконтроллер. Чтобы все было более наглядно можно в качестве дополнения вставить в схему светодиоды и принятое с терминала значение сразу отправлять в порт:

Code

200?'200px':''+(this.scrollHeight+5)+'px');>     PORTB=RCREG;

либо каким то образом его обрабатывать и пересылать обратно на терминал:

Code

200?'200px':''+(this.scrollHeight+5)+'px');>     TXREG=RCREG+2;

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

Недавно пришлось снова подключать микроконтроллер к компьютеру по RS232, и пришлось сдунуть пыль со старых проверенных схем.

Известно, что основная проблема невозможности прямого подключения сигналов от COM-порта компьютера к UART микроконтроллера – несоответствие логических уровней 0 и 1, а также инверсия сигнала.

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

Эти схемы по сравнению с MAX232 имеют один существенный недостаток – для питания схемы без электрической развязки (создания отрицательного напряжения) используется выходной сигнал RTS компьютера (ножка 7 папы DB9), а для питания схемы с оптронной развязкой для получения положительного напряжения используется еще и выходной сигнал компьютера DTR (ножка 4 папы DB9).

[Схема без электрической развязки]

Эта схема проще. Здесь P3.0 – входной порт последовательного порта (RXD) микроконтроллера MCS51 (например, AT89C51), а P3.1 – выходной порт (TXD). Напоминаю, что каждый из портов имеет нагрузочный резистор внутри микроконтроллера номиналом в 51k.

Кабель, отходящий от платы, имеет разъем мама DB9 и может напрямую подключаться к COM-порту компьютера. Чтобы схема заработала, программное обеспечение компьютера должно установить сигнал RTS порта COM в состояние лог. 1 (при этом на ножке 7 разъема DB9 образуется необходимое для питания схемы отрицательное напряжение -12..

15 вольт).

Это еще одна схема без гальванической развязки, взята из платы AVR-IO-M16 компании Olimex.

Схема примечательна тем, что не требует дополнительных сигналов для формирования отрицательного напряжения, чем повышается удобство использования – можно применить любое программное обеспечение, работающее с COM-портом, не обязательно самописное.

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

[Схема с оптронной развязкой]

У этой схемы большое достоинство в том, что отсутствует риск порчи COM-порта компьютера и/или схемы, в которой стоит микроконтроллер – из-за возможной разности потенциалов шасси компьютера и общего провода схемы микроконтроллера.

Наименование сигналов, подписанных справа, относятся не к компьютеру, а к устройству с микроконтроллером. Для подсоединения нужен прямой кабель мама DB9 – папа DB9.

Чтобы схема заработала, программное обеспечение компьютера должно установить сигнал RTS порта COM в состояние лог. 1 (при этом на ножке 7 разъема DB9 образуется необходимое для питания схемы отрицательное напряжение -12..

-15 вольт), а сигнал DTR порта COM в состояние лог. 0 (при этом на ножке 4 разъема DB9 образуется необходимое для питания схемы положительное напряжение +12..+15 вольт).

[Полезные ссылки]

1. Схемы data-кабеля для мобильного телефона на основе MAX232.
2. Замечательная статья Алексея Кузьминова, “Современные аппаратные средства связи микроконтроллера с компьютером по интерфейсу RS-232” из журнала “Компоненты и технологии”, №3, 4 и 5.
3. Замена MAX232.