Научная статья на тему 'Современные аппаратные средства связи микроконтроллера с компьютером по интерфейсу RS232'

Современные аппаратные средства связи микроконтроллера с компьютером по интерфейсу RS232 Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
695
328
i Надоели баннеры? Вы всегда можете отключить рекламу.

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Кузьминов Алексей

Разработанный еще в 1969 году последовательный интерфейс RS-232 до сих пор не утратил своего значения. Появление более современных интерфейсов, которыми оснащаются компьютеры (например, USB) и микроконтроллеры (например, CAN, I2C, SPI, RS485) и которые по многим параметрам (скорость и надежность обмена информацией, длина линии связи и т. п.) превосходят интерфейс RS-232, казалось бы, должно привести к «концу» использования этого интерфейса. Но интерфейсом RS-232 продолжают оснащать даже современные компьютеры и микроконтроллеры (а во многие из микроконтроллеров интегрируют даже по два таких интерфейса).

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Современные аппаратные средства связи микроконтроллера с компьютером по интерфейсу RS232»

Современные аппаратные средства связи микроконтроллера

с компьютером по интерфейсу 1^8-232

Разработанный еще в 1969 году последовательный интерфейс RS-232 до сих пор не утратил своего значения. Появление более современных интерфейсов, которыми оснащаются компьютеры (например, USB) и микроконтроллеры (например, CAN, I2C, SPI, RS485) и которые по многим параметрам (скорость и надежность обмена информацией, длина линии связи и т. п.) превосходят интерфейс RS-232, казалось бы, должно привести к «концу» использования этого интерфейса. Но интерфейсом RS-232 продолжа-Алексей КУЗЬМИНОВ ют оснащать даже современные компьютеры и микроконтроллеры (а во мно-

compmicrosys@maii.ru гие из микроконтроллеров интегрируют даже по два таких интерфейса).

Введение

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

Если, например, сравнить интерфейс И8-232 с интерфейсом ШВ, то получим следующие отличия.

Интерфейс И8-232:

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

• выигрывает по длине линии связи (15-20 м против 3 м);

• значительно выигрывает по простоте программирования (простота программирования Ив-232 общеизвестна, а протокол обмена данными по ШВ сложен, и реализовать его до недавнего времени было не под силу не только радиолюбителям, но и многим специалистам). Почему до недавнего времени? Потому что, хотя и публикуются статьи о программировании ШВ (см. например, цикл статей в журнале «Современная

электроника» за 2005/2006 год), одного взгляда на отрывок такой статьи достаточно (по мнению автора), чтобы отказаться самостоятельно запрограммировать интерфейс USB. В настоящее время двумя фирмами начат выпуск микросхем преобразователей USB-RS-232, в которых основные средства программирования USB переведены на аппаратный уровень и на драйверы, которые организуют «виртуальный» интерфейс RS-232 (повторюсь, как его программировать — всем известно). Если выпуск микросхем CP2101/02/03 компании Silicon Laboratories так и не оставил «глубокого следа» в сердцах разработчиков (поскольку сами микросхемы далеки от совершенства, выпущены в неудобных для ручной пайки корпусах; кроме того, требуются соответствующие драйверы и их установка на компьютер), то микросхемы FT8U100AX, FT8U232AM и FT8U245AM от FTDI (Future Technology Devices International) многим разработчикам очень понравились, поскольку они проще в применении (хотя и имеют неудобные корпуса).

Что касается других интерфейсов, то при

сравнении с ними интерфейса RS-232 можно

еще раз убедиться в его сбалансированности. Интерфейс RS-232:

• проигрывает интерфейсам CAN и RS-485 по скорости и дальности линии связи, но выигрывает по простоте программирования;

• проигрывает интерфейсу I2C по скорости, но выигрывает по дальности линии связи и простоте программирования;

• проигрывает интерфейсу SPI по скорости и простоте программирования (интерфейс SPI действительно примитивно прост), но выигрывает по дальности линии связи.

Помимо всего прочего, интерфейс RS-232 является на настоящий момент едва ли не единственным средством связи между компьютером и микроконтроллером (если, конечно, не принимать во внимание выпущенные в последнее время микроконтроллеры с интерфейсом USB). Учитывая это, такие ведущие фирмы-производители микроконтроллеров, как Analog devices, Texas Instruments, Atmel, Philips и др. стали выпускать микроконтроллеры, которые обладают свойством «программирования-в-системе» (In-System-Programming — ISP) по интерфейсу RS-232. Дело в том, что скорость программирования микроконтроллеров достаточно низкая (намного ниже, чем максимальная скорость обмена RS-232 — 115 200 бод). Эта скорость определяется относительно медленной записью данных в память программ (EEPROM). Если сравнивать интерфейс RS-232 по этому параметру (как средство коммуникации компьютера с микроконтроллером и его программирования в системе), то налицо явное преимущество RS-232 перед вышеупомянутыми интерфейсами.

И, наконец, последнее, что хотелось бы отметить относительно интерфейса RS-232.

В настоящее время этот интерфейс переживает свое новое рождение в связи с невероятным бумом, причина которого — современные беспроводные технологии. Скорость обмена информацией, например, в беспроводных устройствах малого и среднего радиуса действия едва дотягивает до 9600 бод, а иногда и много меньше (1200 бод). Об увеличении скорости обмена информацией в таких устройствах ни в настоящее время, ни в скором будущем, по-видимому, нет даже и речи, поскольку с каждым годом ужесточается ограничение мощности радиотран-

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

Максимальная скорость обмена, которую допускает интерфейс RS-232 (в компьютере) — 115 200 бод — не будет в скором времени перекрыта подобными устройствами беспроводной связи.

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

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

Интерфейс далеко не идеальный, достаточно старый (так и хочется применить слово «потрепанный»); он не лишен многих недостатков, некоторые из которых, к счастью, могут быть устранены как аппаратными, так и программными способами (вот это как раз и является целью публикации цикла статей).

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

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

Предлагаемый читателям материал об интерфейсе RS-232 условно делится на три части (что будет соответствовать трем статьям).

Предметом первой (настоящей) статьи будет обсуждение применения относительно новых традиционных и нетрадиционных преобразователей интерфейса RS-232 взамен широко известного MAX232, а также рассмотрение использования новых микросхем гальванических развязок взамен традиционно используемых оптоизоляторов (оптронов 6N137), применяемых в гальванически изолированном интерфейсе RS-232.

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

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

Вторая статья будет посвящена программированию интерфейса RS-232 в компьютере, работающем в операционных системах Windows 98/XP, с помощью прямых команд ввода-вывода в COM-порт взамен традиционно использующихся для таких целей функций API. Будет показана простота программирования (точно такая же, как и при программировании в DOS), а также сделано сравнение скоростей работы программ, использующих функции API и прямые команды ввода-вывода в COM-порт компьютера. Будет показано, что скорость работы программ, использующих прямые команды ввода-вывода в порт, на порядок выше скорости работы программ, где применяются функции API.

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

Третья статья будет посвящена новому, разработанному автором протоколу обмена по интерфейсу RS-232 с аппаратной синхронизацией, но только не линиями квитирования (например, RTS-CTS или DTR-DSR), традиционно использующимися для таких целей, а линиями данных (TxD и RxD). Необходимо сразу оговориться, что здесь речь идет не о программной синхронизации (традиционно называемой XON-XOFF) линиями данных (TxD и RxD), а именно об аппаратной синхронизации. Как известно, аппаратная синхронизация обладает высокой надежностью обмена, которая особенно важна на высокой скорости (115 200 бод). Будет показано, что линии данных вполне пригодны для аппаратной синхронизации обмена по RS-232; кроме того, использование аппаратной синхронизации линиями данных «освобождает» линии квитирования (DTR и RTS) для других более важных целей (например, для сброса-запуска и перевода микроконтроллера в ISP-режим программирования).

Для демонстрации использования аппаратной синхронизации будут приведены тестовые программы обмена по RS-232, написанные для микроконтроллера и компьютера, работающего под управлением ОС Windows 98/XP. Кроме того, для применения аппаратной синхронизации обмена линиями данных уже в практических целях будут приведены программы (для микроконтроллера и компьютера, работающего в Windows 98/XP) программирования микроконтроллеров P89LPC938 и P89LPC904 в режиме внутрисхемного программирования (In-Circuit-Programming —

1СР). Подробнее об этом режиме можно прочитать в описании на эти микроконтроллеры.

В настоящее время издательством «ДМК Пресс» готовится к публикации книга автора «Интерфейс RS-232. Связь между компьютером и микроконтроллером. От DOS к Windows 98/XP», часть информации из которой и приводится в предлагаемом цикле статей.

1. Новые аппаратные средства интерфейса RS-232

1.1. Предварительные замечания

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

В начале статьи приводится описание новых специализированных микросхем преобразователей уровней интерфейса Ив-232 (±10...±12 В) в ТТЬ уровни (0 ^ +5/+3В) и обратно, которые в настоящее время стали широко доступны. Кроме того, приводится несколько примеров применения некоторых электронных компонентов, которые могут быть использованы в качестве таких преобразователей. Описываются новые микросхемы гальванических развязок для Ив-232, среди которых совершенно новый тип развязок, использующий свойства электромагнитного поля.

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

1.2. Новые преобразователи

интерфейса RS-232

Новые преобразователи интерфейса Ив-232 обладают несомненным преимуществом (высокая скорость обмена, малые габариты и потребление энергии, а также достаточно низкая стоимость) перед использовавшимися ранее (МАХ318Х, МАХ3190, АБМ3202, МАХ1406).

Кроме того, переход на 3-вольтовое питание, которое стало поддерживаться многими современными микроконтроллерами, позволил по-новому подойти к использованию стандартных преобразователей интерфейса (например, АБМ231Ь).

Другой пример — двунаправленный преобразователь вШ5155 (корпус Б1Р8), который давно уже не используется, тоже очень удобно

DD1

DD2

DD3

DD4

1 SD V+ 6

2_ ± V- 5

3 4

МАХ3190

DD6

1

МАХ3183

_DD5

Vcc

5K

MAX3181

DD7

1 2 V- V+ 8 7

3 — RTC 6

4 X Ц| 5

SN75155

Рис. 1. Специализированные микросхемы преобразователей интерфейса RS-232

применять в таких приложениях. Что касается нестандартных преобразователей интерфейса RS-232, то к ним можно отнести новые КМОП-транзисторы с изолированным затвором p- и n-проводимости (например, BS250, 2N7000 и др.), которые с успехом могут служить приемниками RS-232, так как их затвор (Ши = ±20 В) без каких-либо дополнительных резисторов может непосредственно контактировать с выходными линиями RS-232 (±10 В).

Рассмотрим новые специализированные микросхемы преобразователей интерфейса RS-232 более подробно.

1.2.1. Новые специализированные микросхемы преобразователей интерфейса RS-232

На рис. 1 представлены вышеуказанные преобразователи. Кратко охарактеризуем их свойства.

Микросхема Analog Devices ADM3202 отличается высокой скоростью работы (до 460 кбод); емкости конденсаторов, требуемых для работы преобразователя, не превышают 0,1 мкФ; микросхема может работать и при Vcc = +3 В, и при Vcc = +5 В. Размах сигнала драйвера (передатчика) RS-232 составляет ±10 В (при Vcc = +5 В) и ±6 В (при Vcc = +3 В) при работе на нагрузку в 5 кОм. Сигнал очень чистый, без каких-либо паразитных искажений. Кроме того, ADM3202 отличается пониженным потреблением энергии (особенно при питании от +3 В).

Микросхема ADM231L этой же фирмы тоже работает на скорости 115 кбод (в описании указывается, что максимальная скорость обмена составляет 230 кбод), и емкости конденсаторов не превышают 1,0 мкФ. Размах сигнала драйвера повышен и составляет ±11,5 В при питании от первого источника питания + 12 В при работе на нагрузку в 5 кОм. Уникальной особенностью микросхемы является независимость размаха сигнала драйвера от напряжения второго источника питания Vcc. Vcc может быть и +3 В, и +5 В. Сигнал также имеет высокую чистоту без паразитных составляющих. ADM231L отличается пониженным потреблением энергии.

Микросхема МАХ1406 от МАХ1М отличается высокой скоростью работы (до 230 кбод), повышенным размахом сигнала драйвера (±11,5 В) при работе на нагрузку в 5 кОм, независимостью этого размаха от напряжения Vcc и высокой чистотой сигнала. Микросхема питается от 3 источников питания ^+ = +12 В, V- = -12 В и Vcc: +3 ^ +5 В), в связи с чем она не содержит преобразователей напряжения (удвоителей и инверторов напряжения как, например, АБМ3202 и АБМ231Ь) и не требует большого количества конденсаторов для работы. Особенностью микросхемы является наличие трех приемников и трех передатчиков, что, как будет видно из дальнейшего изложения, позволяет сопрягать с ее помощью компьютер с микроконтроллером (который может работать как в режиме программирования, так в штатном режиме) без каких-либо дополнительных преобразователей интерфейса Ив-232. МАХ1406 отличается пониженным потреблением энергии.

Микросхема передатчика Ив-232 МАХ3190 от МАХ1М отличается повышенной скоростью работы (до 460 кбод), имеет размах сигнала драйвера до ±10 В при работе на два входа приемников (на нагрузку в 2,5 кОм) при питающих напряжениях V+ = +12 В и V- = -12 В. Кроме того, она потребляет очень мало энергии при работе и может быть переведена в режим сверхнизкого потребления («спящий» режим). Особенностью микросхемы является уникально малый корпус вОТ23-6 размером 3x3 мм.

Микросхемы приемников МАХ3181 и МАХ3183 работают на сверхвысокой скорости для интерфейса Ив-232 (до 1,5 Мбод), отличаются сверхнизким потреблением энергии и уникально малым корпусом вОТ23-5 размером 3x3 мм. Микросхема МАХ3181 является инвертирующим приемником, как и подавляющее большинство всех микросхем приемников Ив-232, а МАХ3183 — неинвертирующим, что является уникальным свойством, позволяющим, как будет видно из дальнейшего изложения, напрямую подключать к нему вход ИвТ микроконтроллера с активно низким уровнем (например, Р89ЬРС9ХХ).

И, наконец, последняя микросхема, которую хотелось бы представить, — микросхема SN75155 от Texas Instruments. Это микросхема, в которой в одном корпусе всего с восемью выводами (DIP8, SOIC8) размещается и приемник, и передатчик. Микросхема не нова, однако мало где применяется и особой популярностью не пользуется. А зря. Микросхема реально работает на высокой скорости (115 кбод), требует всего двух источников питания (V+ = +12 В, V- = -12 В), так как источник питания +5 В встроен. В связи с этим для ее работы не требуется дополнительных конденсаторов для инверторов и удвоителей напряжения (как, например, у ADM3202 и ADM231L). Размах сигнала драйвера составляет ±10 В при работе на два входа приемника (то есть на нагрузку в 2,5 К). Недостатками микросхемы являются стандартное (не пониженное) потребление энергии и невозможность работы с микроконтроллером при питании его от +3 В (при 5-вольтовом питании микроконтроллера микросхема работает идеально).

1.2.2. Нетрадиционные

преобразователи интерфейса RS-232

Помимо специализированных микросхем преобразователей интерфейса RS-232, о которых было рассказано выше, существуют электронные компоненты, вообще говоря, не являющиеся преобразователями, но которые можно использовать в качестве таких преобразователей. Ниже представлены такие компоненты. Это КМОП-транзисторы прямой (BS250 от Vishay) и обратной (2N7000 от Fairchild или Vishay) проводимости с изолированным затвором и КМОП-коммутатор DG419 (от Vishay). Внутренняя структура и цоколевка этих компонентов приведена на рис. 2.

Кратко охарактеризуем их свойства.

Транзисторы выпускаются в корпусе TO-92 (см. рис. 2). Сопротивление транзисторов в открытом состоянии составляет около 10 Ом, максимальный ток стока — чуть более 200 мА, максимальное напряжение «сток-исток» — не более 50-60 В, время включения и выключения — около 10 нс,

и

T1

BS250

С (D) 3 (G) И (S)

w

с

3 C\h

И (S) 3(G) С (D)

72

^ 2N7000 V_y

DD1

1 8

2 7

3 I ! А 6

4 \| V+ Vl _5_

DG419

Рис. 2. Нетрадиционные преобразователи интерфейса RS-232

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

мощность рассеяния — около 0,5 Вт. Максимальное напряжение «затвор-исток» (Изи_шах) составляет ±20 В. Последнее свойство позволяет подключать затвор транзистора непосредственно к линиям Ив-232 (напомню, что сигнал передатчика Ив-232 составляет около ±10 ^ ±12 В), в связи с чем транзисторы могут использоваться в качестве приемников Ив-232. Единственное, что необходимо предусмотреть, это нагрузочный резистор номиналом в 5 кОм, который следует подключить между затвором и общим проводом («землей»), так как сопротивление (изолированного) затвора транзисторов составляет сотни МОм, а стандарт Ив-232 предусматривает входное сопротивление приемника в 5 кОм.

На рис. 3 приведены варианты использования КМОП-транзисторов 2Ы7000 и Вв250 в качестве преобразователей интерфейса Ив-232 — инвертирующих и неинвертирующих приемников Ив-232.

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

приемники, так и с общим стоком (истоко-вый повторитель) — в таком режиме работают неинвертирующие приемники. Схемы достаточно просты и в особых комментариях не нуждаются.

Проверка работы схем заключалась в подаче на затвор транзистора сигнала меандра частотой 115 200 Гц, сформированного передатчиком микросхемы ADM3202, и наблюдения выходного сигнала. Во всех случаях выходной сигнал представлял собой практически прямоугольный меандр.

Микросхема коммутатора DG419 выпускается в корпусе SOIC8 или DIP8. Напряжения питания V+, V- и VL лежат в следующих пределах: +10 ^ +15 В, -10 ^-15 Ви+3 ^ +5В соответственно. Сопротивление коммутатора в открытом состоянии составляет около 20 Ом. Коммутатор управляется напряжением, поданным на его управляющий вход (вывод 6). При лог. 1 на управляющем входе выводы 1-8 замыкаются, на что указывает символ «1», стоящий над контактом 8. При лог. 0 замыкаются контакты, связанные с выводами 2-8 (при этом контакты 1-8 размыкаются).

Микросхема Vishay DG419 по своей структуре и функциям не отличается от микросхем Analog Devices ADG419 и MAXIM DG419. Однако есть одно и очень существенное отличие в свойстве управляющего входа. Дело в том, что коммутатор управляется сигналом, поданным на его управляющий вход (6-й вывод), и этот сигнал в коммутаторах ADG419 (Analog Devices) и DG419 (MAXIM) должен строго соответствовать TTL-уровню (лог. 0 — от 0 до +0,8 В, лог. 1 — от +2,4 В до +5 В при VL = +5 В, V- = -12 В^+ = +12 В). При подаче на этот вход управления сигнала ниже 0 В (например, -10 В) эти две микросхемы автоматически коммутируют этот сигнал на «землю», так как оснащены входными диодами, защищающими вход управления от отрицательных напряжений (ниже 0 В). У микросхемы DG419 от Vishay таких ограничительных диодов нет, поэтому при VL = +5 В уровень напряжения управляющего сигнала Цупр в состоянии лог. 0 должен находиться в пределах от V- до 0,8 В, а в состоянии лог. «1» —

в пределах от +2,4 В до V+. Если V+ = +12 В, а V- = -12 В, то при Цупр. = ±10 В (уровни интерфейса RS-232) микросхема прекрасно работает и выполняет свои функции. Кроме того, вход управления можно смело подключать напрямую к сигналам с уровнями RS-232, не боясь, что вход будет закорочен на «землю».

Сопротивление открытого канала коммутатора DG419 Vishay (20 Ом) чуть больше, чем у DG419 MAXIM (4 Ом) и меньше, чем у ADG419 Analog Devices (35 Ом). Стоимость DG419 Vishay примерно в два раза меньше, чем ADG419 и примерно в три раза меньше, чем MAXIM DG419.

Таким образом, DG419 Vishay может работать приемником RS-232. Единственное, что необходимо предусмотреть — нагрузочный резистор в 5 кОм (в соответствии со стандартом RS-232), который необходимо подключить между управляющим входом и общим проводом («землей»), так как входное сопротивление микросхемы составляет несколько МОм (потребление энергии DG419 сверхнизкое). На вход VL можно также подавать не только +5 В, но и +3 В и даже меньше. При этом просто немного поменяется порог срабатывания.

Кроме того, DG419 может работать и как передатчик RS-232. В отличие от специализированной микросхемы передатчика RS-232, у DG419 более крутые фронты (намного круче, чем 30 В/мкс). На расстояниях до 10-15 м (расстояние от компьютера до микроконтроллера) это свойство ни к каким негативным результатам не приводит.

На рис. 4 приведены примеры использования коммутатора DG419 в качестве преобразователя интерфейса RS-232 — приемника (инвертирующего и неинвертирующего) и передатчика (инвертирующего). Схемы достаточно просты и в комментариях не нуждаются.

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

+5

+5

Неинвертирующие приемники

Рис. 3. Схемы применения транзисторов 2^000 и BS250 в качестве приемников интерфейса RS-232

DD1

1°gjRS-232_~10<b6~

V- a

R1

5K~

+5 BO-5-

«1»

—1>—1 Vl V+

+5 В

1 ttl~L?b

DD1

, +10 в +5 BO-y

r>+5B -10 bJrs-232 -mO-T

+10

1

DG419

Инвертирующий приемник

R1_

5K~

1+5 B<H-

«1»

V- a

—D—1 -1-

Vl V+

+5 В

1TTL ojsT

DD1

•+10'

DG419

Неинвертирующий приемник

+5 В

°%г10<^

V— A

+5B<H-

«1»

-Tf-

—|^-J -L Vl V+

+10 в 1 RS-232bl0B

->+10V

+10

DG419

Инвертирующий передатчик

Рис. 4. Схемы применения коммутатора DG419 в качестве преобразователя интерфейса RS-232

1.3. Примеры применения новых преобразователей для сопряжения микроконтроллеров с компьютером по интерфейсу RS-232

1.3.1. Предварительные замечания Вначале несколько слов по поводу оценочных плат, наборов, эмуляторов-программаторов и т. п. — устройств, предназначенных для «быстрой» разработки аппаратных и программных средств на базе микроконтроллеров. Эти устройства выпускаются либо самими производителями микроконтроллеров, либо «третьими» фирмами.

Разработчику любой системы, состоящей из компьютера и устройства связи с объектом (УСО), сопряженного с первым по интерфейсу RS-232, необходимо помнить следующее:

• Аппаратные средства сопряжения этих устройств имеют следующие особенности:

- в подавляющем большинстве случаев схемы сопряжения не приводятся или приводятся с ошибками;

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

- часто приводимые аппаратные средства сопряжения очень громоздки, и в них трудно разобраться, а разбираться все равно необходимо, иначе, если собственная разработка работать не будет, трудно или вообще невозможно определить причину неисправности;

- если схема сопряжения реализована даже по интерфейсу RS-232, то различные устройства по-разному управляют состояниями микроконтроллера: одни, например, управляют выводом RST микроконтроллера от линии DTR RS-232 компьютера, другие используют линию RTS, третьи устанавливают микрокнопку, нажав на которую можно сформировать сигнал RST и «сбросить» микроконтроллер; иногда для сопряжения используется сразу два порта RS-232 компьютера и т. п.

• Программные средства сопряжения подобных устройств с компьютером по И8-232

имеют еще больше недостатков:

- исходные тексты программ, естественно, не приводятся, а предлагаются уже готовые программы исполняемого формата (*.ехе);

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

- скорость обмена по И8-232 очень низкая (практически не более 9600 бод); приус-тановке более высокой скорости в подавляющем большинстве случаев обмен срывается.

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

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

Вот здесь, по мнению автора, и могут пригодиться приведенные ниже примеры сопряжения микроконтроллеров с компьютером по И8-232. Кроме того, автор «не бросает» разработчика только на одних аппаратных средствах схем сопряжения. Для некоторых из них во второй статье будут приведены тексты программ (с комментариями) как для микроконтроллера, так и для компьютера.

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

И, наконец, последнее. Автор ни в коем случае не отговаривает разработчиков от приобретения подобных устройств. В конце концов — это дело вкуса и средств. Цель настоящей статьи — показать, каким образом сконструировать схемы сопряжения микроконтроллера и компьютера и написать соответствующее программное обеспечение — и не более того. Автор никоим образом не специализируется на разработке, производстве и тем более продаже устройств для программирования микроконтроллеров по интерфейсу RS-232. Основная специализация автора — разработка и производство компьютерных систем сбора данных на базе микроконтроллера и компьютера. Проблема, затронутая автором в настоящем цикле статей, является как бы побочным продуктом основной специализации.

Кроме того, приведенные в статье аппаратные и программные средства сопряжения между микроконтроллером и компьютером по интерфейсу RS-232 работают ничуть не хуже, а даже лучше фирменных, если, например, сравнивать не красоту и универсальность программных средств устройств (описанных выше), а характеристики их обмена с компьютером по RS-232 — скорость, надежность обмена и простоту схемных решений. Все фирменные программные средства для нижеприведенных микроконтроллеров (кроме программных средств для микроконтроллеров от ATMEL) работают на скорости, не превышающей 38 400 бод, и даже на этой скорости программы часто «зависают». Нельзя не убедиться еще и в том, насколько фирменные схемы сопряжения с компьютером громоздки и часто сконструированы на старой элементной базе. Насколько же просты схемы сопряжения, предложенные автором, читатель сможет убедиться уже через несколько страниц. Кроме того, все без исключения аппаратные и поддерживающие их программные средства идеально работают на скорости обмена 115 200 бод (разумеется, на более низких скоростях они также работают).

В качестве иллюстраций, показывающих применение новых преобразователей на практике, ниже приведены схемы сопряжения микроконтроллеров MSC121X (Texas Instruments) и P89LPC9XX (Philips Semiconductor) с компьютером для целей программирования и штатного режима работы. Выбор именно этих микроконтроллеров обусловлен следующими причинами.

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

Следует отметить, что режим ISP микроконтроллеров не обязательно должен иметь интерфейс RS-232. Существуют микроконтроллеры, которые могут быть запрограммированы в режиме ISP и по другим интерфейсам. Например, микроконтроллеры AT89SXX (ATMEL) поддерживают ISP по интерфейсу SPI; микроконтроллеры C8051FXXX (Silicon Laboratories) — по интерфейсу JTAG и C2 и т. п. Поскольку компьютер не имеет этих интерфейсов, необходимо приобретать дополнительные устройства, предназначенные для программирования микроконтроллеров, и использующие интерфейсы, имеющиеся у компьютера (USB, RS-232, принтерный параллельный порт). Стоимость таких устройств, как уже говорилось, довольно высока и может достигать десятков и сотен долларов.

Во-вторых, микроконтроллеры MSC121X и P89LPC9XX помимо ISP по RS-232 обладают еще двумя свойствами, которые намного упрощают конструирование систем сбора данных на их основе: встроенный прецизионный системный таймер (разрядностью 23-24 бита) и встроенный АЦП (разрядностью 10-24 бита).

1.3.2. Управление состояниями микроконтроллера с помощью компьютера по интерфейсу RS-232 Для запуска и внутрисистемного программирования на определенные выводы микроконтроллера необходимо подавать два управляющих сигнала.

Первым таким выводом является вход сброса (RESET).

Практически все микроконтроллеры (кстати сказать, и микропроцессоры) имеют вход сброса RESET (RST), который предназначен для полного сброса и запуска микроконтроллера. В подавляющем числе микроконтроллеров этот вход имеет активный высокий уровень, то есть если подать на вход RST уровень лог. 1, то микроконтроллер будет сброшен и остановлен. При подаче на вход RST лог. 0 микроконтроллер начинает работать (запускается). У микроконтроллеров семейств MSC121X, ADUC8XX и AT89C51ED2(RD2) вход RST имеет активный высокий уровень.

Семейства же P89LPC9XX и C8051FXXX отличаются тем, что вход RST у них имеет активный низкий уровень.

В книге [2] помимо схем сопряжения с компьютером микроконтроллеров MSC1210 и P89LPC9XX (рассматриваемых в настоящей статье) приводятся также схемы сопряжения микроконтроллеров ADUC8XX, AT89C51ED2(RD2) и C8051FXXX. Логика работы схем сопряжения микроконтроллеров ADUC8XX и AT89C51ED2(RD2) аналогична логике работы схемы сопряжения для микроконтроллеров семейств MSC121X, поэтому в статье эти схемы не приводятся.

Помимо уровня сигналов, вывод RST характеризуется еще и тем, что это именно вход, то есть он предназначен для того, чтобы им управлять извне. Как правило, если RST имеет активный высокий уровень, то в микроконтроллере он соединен с внутренним подтягивающим резистором номиналом в несколько сотен кОм, подключенным к общему проводу («земле»). Так, например, значение этого подтягивающего резистора в микроконтроллерах MSC12XX составляет около 500 кОм. Если же RST имеет активный низкий уровень, то подтягивающий резистор подключен к шине питания. Например, в микроконтроллерах P89LPC9XX значение этого подтягивающего резистора, подключенного к шине питания, составляет около 20 кОм.

Кроме того, поскольку вывод RST является входом, его можно либо непосредственно соединять с шиной питания или общим проводом, либо управлять им двухтактным сигналом (который имеют все современные микросхемы логики и который еще называют пушпульным — от английских слов push и pull).

Необходимо отметить, что вывод RST в микроконтроллере является основным. Это означает, что он используется как при запуске и сбросе микроконтроллера, так и при его программировании.

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

В микроконтроллерах MSC12XX таким вторым выводом является вывод PSEN, одно из назначений которого — управлять микросхемами внешней памяти программ. В этом случае вывод PSEN является уже не входом, а выходом, то есть он «сам» подает определенные сигналы на эти микросхемы. В этом семействе микроконтроллеров вывод PSEN соединен с внутренним подтягивающим резистором номиналом около 10 кОм, подключенным к шине питания. Поскольку PSEN — выход, нельзя ни непосредственно соединять его с шиной питания или с общим проводом, ни управлять им двухтактным сигналом

(в некоторых случаях, когда двухтактный сигнал не очень мощный, то есть когда ток такого сигнала не превышает нескольких мА в состоянии лог. 0 и 1-2 мА в состоянии лог. 1, такое управление допускается). Для подачи на этот вывод уровня лог. 0 необходимо к нему подключить резистор номиналом в 1 кОм, соединенный с «землей». Для подачи уровня лог. 1 вывод PSEN можно либо просто оставить свободным (напомню, что у него есть собственный подтягивающий к шине питания резистор), либо соединить с шиной питания через высокоомный резистор. Для соблюдения необходимых временных соотношений (иногда с точностью до 1 мкс) при манипулировании сигналом на выводе PSEN этот высокоомный резистор не должен превышать 10-100 кОм, чтобы не затягивать длительности фронтов и спадов (например, свыше 1 мкс). В идеале резистор должен быть около 10 кОм. Для перевода микроконтроллеров семейств MSC12XX в режим ISP вывод PSEN должен находиться в состоянии лог. 0. В штатном режиме работы PSEN должен оставаться в лог. 1.

В микроконтроллерах семейства P89LPC9XX вторым выводом, предназначенным для перевода микроконтроллера в режим программирования, является вывод питания Vdd. В связи с тем, что потребление тока у этих микроконтроллеров достаточно низкое (не более 3 мА), этим выводом можно легко манипулировать обычным двухтактным сигналом, либо оставлять свободным или соединять непосредственно с общим проводом (выключать), либо подключать к шине питания (включать). Необходимо только помнить, что подключение к шине питания должно осуществляться при помощи электронного компонента с достаточно низким сопротивлением (несколько Ом), чтобы напряжение питания оставалось в норме (около 3 В). Для таких целей идеально подходят обычные маломощные KMOn-транзисторы (например, BS250 или 2N7000, о которых было упомянуто ранее). Можно также использовать коммутатор DG419.

Теперь несколько слов об управляющих сигналах в интерфейсе RS-232 компьютера. Напомню, что порт RS-232 (например, COM1) компьютера имеет только две выходных линии (DTR и RTS), состояниями сигналов на которых можно управлять программно, записывая необходимые биты в порт управления с адресом 3FCh. Причем 0-й бит управляет состоянием сигнала на линии DTR, а 1-й бит — на линии RTS. Если, например, значение регистра управления 3FCh равно 0, то линии DTR и RTS сброшены, то есть находятся в состоянии лог. 0 и имеют потенциал -10 В. Записав в порт 3FCh, например, единицу, получим: DTR = +10 В, RTS = -10 В.

Начальные состояния линий DTR и RTS — сброшенные, то есть при включении компьютера и загрузки в него той или иной операционной системы DTR = RTS = -10 В.

Для управления выводами RST и PSEN семейств микроконтроллеров MSC12XX и выводами RST и Vdd семейств микроконтроллеров P89LPC9XX можно (и нужно) использовать сигналы линий DTR и RTS. Причем, при составлении схемы сопряжения необходимо подобрать ее таким образом, чтобы при включении компьютера все (из рассматриваемых) микроконтроллеры находились в состоянии сброса, вывод PSEN у семейств MSC12XX находился бы в состоянии лог. 1 (штатный режим работы), а питание (вывод Vdd) у семейств P89LPC9XX было бы включено (также штатный режим).

Для управления выводом RST лучше всего использовать сигнал DTR (так как для управления им используется самый младший бит регистра управления), а для PSEN или Vdd — сигнал RTS.

Тогда, например, для запуска микроконтроллеров достаточно записать в регистр 3FCh единицу. И вообще, для манипулирования выводами RST, PSEN или Vdd достаточно записывать в регистр управления ту или иную комбинацию из нулей и единиц (а их, понятно, четыре: в двоичном виде — 00, 01, 10 и 11, в шестнадцатиричном: 0, 1, 2, 3).

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Итак, подытожим все сказанное по поводу управления состояниями микроконтроллеров с помощью интерфейса RS-232 компьютера.

1. В начальном состоянии интерфейса RS232 (линии DTR и RTS сброшены, т. е. находятся под потенциалами в -10 В) микроконтроллеры должны находиться в сброшенном состоянии (RST микроконтроллеров семейств MSC12XX должен быть в состоянии лог. 1, т. е. под потенциалом в 3^5 В, а RST семейств микроконтроллеров P89LPC9XX — в состоянии лог. 0, т. е. под потенциалом в 0 В).

Кроме того, вывод PSEN микроконтроллеров семейств MSC12XX должен быть в состоянии лог. 1, и (например) подключаться к шине питания через резистор номиналом в 10 кОм, а питание (вывод Vdd) семейств микроконтроллеров P89LPC9XX должно быть включено. Такое состояние микроконтроллеров является состоянием сброса. Оно должно предшествовать запуску микроконтроллеров в работу.

2. Для запуска микроконтроллеров в штатный режим работы линию DTR необходимо установить в состояние лог. 1 (+10 В). При этом вывод RST микроконтроллеров семейств MSC12XX должен установиться в состояние лог. 0 (0 В), а вывод RST микроконтроллеров семейств P89LPC9XX — в состояние лог. 1 (+3 В). Кроме того, вывод PSEN микроконтроллеров семейств MSC12XX должен оставаться в состоянии лог. 1 — быть подключенным к шине питания через резистор 10 кОм, а питание микроконтроллеров семейств P89LPC9XX должно оставаться включенным (Vdd = +3 В).

3. Для остановки микроконтроллеров их состояние, а также состояние линий DTR и RTS должно соответствовать п. 1 (состояние сброса).

4. Переключение микроконтроллеров в состояние программирования должно осуществляться путем манипулирования сигналами DTR и RTS. Эти сигналы, в свою очередь, должны управлять сигналами на выводах RST, PSEN и Vdd соответствующих микроконтроллеров согласно их спецификации программирования в режиме ISP, то есть устанавливать на выводах микроконтроллеров соответствующие потенциалы согласно приведенным в описаниях на микроконтроллеры временным диаграммам.

Перевод микроконтроллеров в режим ISP должен осуществляться из состояния сброса (п. 1).

Таким образом, схемы формирования соответствующих сигналов на выводах микроконтроллеров при помощи линий управления DTR и RTS и сами схемы сопряжения микроконтроллеров с компьютером должны быть составлены так, чтобы выполнялись условия всех п.п. 1-4.

1.3.3. Схемы формирования сигналов RST и PSEN для микроконтроллеров семейств MSC12XX

Свойства приведенных ранее КМОП-тран-зисторов и микросхемы DG419 являться приемниками RS-232 могут быть использованы в практических применениях для формирования сигналов запуска и остановки микроконтроллеров, а также для программирования микроконтроллеров в режиме ISP.

На рис. 5 приведены две альтернативные схемы управления сигналом на выводе ИвТ, а на рис. 6 — две альтернативные схемы управления сигналом РвЕЫ микроконтроллеров семейств МвС12ХХ. Принципы их функционирования достаточно просты и в комментариях не нуждаются, а достоинства и недостатки сводятся к следующему.

На рис. 5а показана одна из альтернативных схем управления сигналом ИвТ с помощью сигнала ЭТИ. Из схемы видно, что для формирования сигнала ИвТ в соответствии с п.п. 1-4 (см. 1.3.2) достаточно сигнал ЭТИ «пропустить» через стандартный приемник И8-232, обладающий инвертирующими свойствами и имеющий двухтактный выход. Эта схема наиболее проста, не содержит ни одного дополнительного компонента и рекомендуется к применению.

Схема на рис. 5б может быть использована, если приемник Ив-232 либо занят другими функциями, либо отсутствует вовсе.

На рис. 6 показаны две альтернативные схемы формирования сигнала РвЕЫ. Схема рис. 6а более предпочтительна, так как сигнал РвЕЫ, сформированный ей, больше защищен от помех; кроме того, эта схема имеет более высокое быстродействие. Оба эти свойства определяются тем, что, с одной стороны, сигнал РвЕЫ (в одном из состояний) соединен с резистором номиналом в 10 кОм, с другой — высоким быстродействием коммутатора Б0419. Схема рис. 6б дешевле, но она имеет невысокое быстродействие, поскольку резистор 100 кОм несколько затягивает время спада сигнала. Обе схемы удовлетворяют условиям п.п. 1-4 (1.3.2).

1.3.4. Схемы формирования сигналов RST и Vdd для микроконтроллеров семейств P89LPC9XX На рис. 7 приведены две альтернативные схемы управления сигналом на выводе ИвТ (для Р89ЬРС9ХХ), а на рис. 8 — две альтернативные схемы управления сигналом микроконтроллеров семейств Р89ЬРС9ХХ. Принципы их функционирования достаточно просты, а достоинства и недостатки описываются ниже.

Две схемы, показанные на рис. 7а (на базе КМОП-транзисторов обратной и прямой проводимости — 2Ы7000 и Вв250 соответственно) имеют достаточное быстродействие,

R1 1К

DD1

+5 В

PSEN~l°B ,____R2

+5 В

PSEN^B

J10K

0+5

+10-

Рис. 5. Схемы формирования сигнала RST Рис. 6. Схемы формирования сигнала PSEN

и

+3 в RSTOBf

+ 10 в

‘10 bJdTR

2N7000

И

DD1

№£) BS250

___ +3 в

RSTOBf

+3 в

+ 10 В

_1° §Jdtr

8 «1» 1 RST0BJ

v-i

IV 7^ +3 RST

+3<^5_ VL V+ ^Ч> +10=^=

DG419

Рис. 7. Схемы формирования сигнала RST

И

8 1 VddL?B

+10 в _|_ 7 -1°bJrts -10<^ V-T

|\ і y>+3

т Vl v+ ^4>+10-L

DG419

Рис. S. Схемы формирования сигнала Vdd

очень просты, дешевы, но потребляют ток около 3 мА (который проходит через резистор Ш при включении транзистора). Эти схемы могут быть рекомендованы, если нет ограничений по энергопотреблению.

Схема рис. 7б имеет более высокое быстродействие, практически не потребляет энергии, поскольку выходной сигнал (ЯБТ) является двухтактным, но несколько громоздка и дорога.

Схема, показанная на рис. 8а, обладает достаточным быстродействием, очень проста и дешева, отличается низким сопротивлением при включении питания (менее 10 Ом), но имеет повышенное потребление энергии, так как резистор И2 параллелен нагрузке (а это вход У(Ы микроконтроллера) и через него проходит дополнительный ток в 3 мА. При необходимости резистор И2 можно удалить; в этом случае нагрузкой схемы будет сам микроконтроллер, ток потребления которого в активном режиме составляет не менее 3 мА. Однако если микроконтроллер будет переведен в «спящий» режим, его ток потребления намного снизится; это приведет к соответствующему увеличению внутреннего сопротивления (которое в этом случае может составить десятки килоом), что, в свою очередь, может привести к значительному

затягиванию времени включения и выключения транзистора Т1.

Все же схема рис. 8а может быть рекомендована к применению, так как манипуляция с включением и выключением питания микроконтроллера (Vdd) в основном используется для его программирования (в режиме ISP). В штатном же режиме работы микроконтроллера его питание Vdd должно быть всегда включено (независимо от того, в каком состоянии находится вывод RST).

Схема, показанная на рис. 8б, имеет высокое быстродействие, низкое потребление энергии и не зависит от потребления тока микроконтроллером. Эта схема более дорогая и громоздкая. Сопротивление в открытом состоянии коммутатора (20 Ом) в два раза выше, чем у транзистора на схеме рис. 8а. Эта схема может быть рекомендована к применению, если есть ограничение на потребляемую энергию.

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

Продолжение следует.

Литература

1. Кузьминов А. Ю. Интерфейс К8-232. Связь между компьютером и микроконтроллером. М.: Радио и связь. 2004.

2. Кузьминов А. Ю. Интерфейс К8-232. Связь между компьютером и микроконтроллером. От БОв к Windows 98/ХР. М.: ДМК Пресс. 2006.

3. Кузьминов А. Ю. Универсальная система сбора и обработки данных АСИР-3. // Мир ПК. 1996. № 6.

4. Кузьминов А. Ю. Удаленные системы сбора информации с датчиков на базе однокристальных микроЭВМ // Автоматизация и производство. 1996. № 3.

5. Кузьминов А. Ю. Однокристальные микроЭВМ — основа удаленных систем сбора и обработки сигналов, поступающих с датчиков // Электроника и компоненты. 1998. № 2.

6. Кузьминов А. Ю. Новые МС851-совместимые микроконтроллеры и их применение в системах сбора информации сдатчиков // Контрольно-измерительные приборы и системы. 1997. № 6. 1998. № 7.

7. ww w.analog.c om

8. w ww.atmeLc om

9. ww w .maxim-ic.c om

10. w ww.semkonductor-phШpsx om

11. ww w.silabs.c om

12. w ww.ti.c om

13. ww w.msdn.microsoft.c om/library

14. w ww .gapdev.c om

i Надоели баннеры? Вы всегда можете отключить рекламу.