Форма входа

Поиск



Счетчик посетителей

Рейтинг@Mail.ru

Разработано jtemplate модули Joomla

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

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

Проблема соединения микроконтроллера и компьютера в разные времена решалась по-разному. В достопамятные времена, когда царствовали компьютеры под названием 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, шаг за шагом от "чайника" до профи.

Книга по микроконтроллерам