Как соединить контроллер с компьютером

Обновлено: 03.07.2024

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

Введение

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

Общее описание устройства. Электрическая часть устройства

Устройство (рис.1), по сути, представляет собой цифровой вольтметр. На входе вольтметра стоит операционный усилитель (DA1), имеющий высокое входное сопротивление. За операционным усилителем следует АЦП (DD2), позволяющий оцифровать интересующее нас напряжение для последующей передачи в микроконтроллер. Микроконтроллер DD3 является главным управляющим звеном устройства, так как он считывает информацию из АЦП и общается с персональным компьютером по последовательному каналу. В устройство также входят преобразователи питания для выработки +5 В для цифровой части и для выработки +/-10 В для операционного усилителя, а также микросхема преобразования уровней (логические <0> и <1> в -15:+15 В и обратно) для обмена информации по последовательному каналу типа RS232.

Значение, посылаемое в компьютер, лежит в диапазоне 0. 4095 (что соответствует разрядности АЦП), 0 соответствует входному уровню 0В, 4095 - уровню 5В, зависимость линейная.

Скорость обмена информацией может быть выбрана как меньше 9600 бод, так и выше - до 115 200 бод. На достаточно старых компьютерах, типа 386 и более ранних, верхний предел гораздо ниже - 19200 бод. Это связано с тем, что микросхемы последовательного порта, установленные в этих компьютерах, не были рассчитаны на более высокие скорости.

Описание микросхем

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

В последние годы в микроконтроллерной технике получили широкое развитие микросхемы, управляемые по последовательному каналу. Одной из таких микросхем является 12-разрядный АЦП МАХ1241. Как и в случае с МАХ680, МАХ1241 имеет достаточно много точных и приближенных аналогов (МАХ187 от Maxim, LTC1286, LTC1298 от Linear Technology, AD7894 от Analog Devices и ряд других).

Перед началом преобразования микроконтроллер на входе SCLK МАХ1241 должен установить нулевой логический уровень. Когда процесс преобразования внутри АЦП завершится, микроконтроллер должен сформировать на входе SCLK последовательность не менее чем из 12 положительных импульсов (рис. 2). Фронт первого импульса готовит МАХ1241 к передаче данных. По спаду импульса на DOUT появляется в виде логического нуля или единицы старший 12-й бит. Микроконтроллер считывает этот бит, формирует на SCLK фронт второго импульса, а спустя некоторое время - его спад. По спаду второго импульса на DOUT появляется считываемый затем микроконтроллером 11-й бит и т. д.

Алгоритмы работы LTC1286, LTC1298 от Linear Technology и AD7894 от Analog Devices незначительно отличаются от описанного для МАХ1241. Более подробно с ними можно ознакомиться, обратившись к соответствующим фирменным описаниям.

Преобразователь уровней MAX202Е

Мало для кого является секретом, что в стандартной логике единица представляется уровнем напряжения от 2,4 до 5 В, а ноль - от 0 до 0,8 В. Однако начинающим может быть неизвестно, что при передаче по каналу RS-232 нуль и единица кодируются одинаковыми по величине (от 5 до 12 В), но разными по знаку сигналами. В рамках настоящей статьи не предполагается объяснять, почему принято делать так, а не иначе, - мы ограничимся лишь констатацией этого факта.

Коль скоро для передачи по RS-232 стандартные логические сигналы должны быть преобразованы в сигналы другого уровня, необходимо предусмотреть в схеме соответствующие средства преобразования. Лет 10 назад для этой цели применялись специально разработанные каскады из трех-четырех транзисторов, пары диодов и почти десятка резисторов. Сейчас ситуация значительно изменилась: ведущие производители микросхем выпускают полностью законченные преобразователи, требующие минимального количества дополнительных элементов. К ним относятся МАХ202Е от MAXIM и полностью идентичная ей, вплоть до цоколевки, AD232 от Analog Devices. Внутри себя обе микросхемы содержат преобразователь напряжения +5 В в +10 В, идентичный вышеописанному МАХ680, и каскады, осуществляющие преобразование логических сигналов стандартного уровня в сигналы уровня по стандарту RS-232. Каждая из упомянутых микросхем содержит преобразователи логического уровня для двух приемников и двух передатчиков. Мы воспользуемся только одним приемопередающим каналом.

Режим работы МК с последовательным каналом

Как известно (смотри, например, номера 10 и 11 журнала "Радио" за 1994 г.), у микроконтроллеров семейства х51 существуют четыре режима работы приемопередатчика. Нас будет интересовать режим 1 как наиболее простой и приемлемый.

Режим 1 характеризуется следующими параметрами:

  • обмен информацией асинхронный;
  • передаются 10 бит за один акт обмена (старт-бит (0), 8 бит данных и стоп-бит (1));
  • скорость приема/передачи программируема и задается таймером.

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

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

Основные подпрограммы для МК

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

Считывание данных из АЦП

Настройка ПК для обмена информацией по последовательному каналу.

Для того чтобы настроить ПК на обмен информацией по последовательному каналу, необходимо сделать следующее:

  • запретить все прерывания, так как в их использовании необходимости нет;
  • настроить таймер 1 на работу в режиме 2 с автоматической перезагрузкой содержимого. Это необходимо для задания скорости обмена информацией и поддержания ее постоянной;
  • загрузить в счетчик таймера начальные значения;
  • запустить таймер 1.

Пример кода, рассчитанного на скорость обмена 9600 бит/с для кварцевого резонатора с резонансной частотой равной 11,059 МГц:

Прием и посылка байта

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

Считывать байт из порта ввода/вывода SBUF можно только при установленном бите RI регистра управления/статуса SCON, сигнализирующего о наличии байта в буфере приема. После считывания этого байта бит RI необходимо сбросить.

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

Подпрограмма приема байта в аккумулятор:

Подпрограмма посылки байта из аккумулятора:

Следует также отметить, что никаких средств для обнаружения ошибок ввода/вывода микроЭВМ не имеет.

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

Можно повысить надежность приема/передачи информации и другим путем: передавать с восемью битами данных еще один бит - бит четности, вычисляющийся аналогично флагу паритета в слове состояния программы (бит 0 PSW). Только вычисляться он должен для передаваемого или принятого байта. После принятия байта и бита четности необходимо сравнить их на соответствие друг другу. Если они не соответствуют, значит, имела место ошибка ввода/вывода. Для передачи дополнительного 9-го информационного бита нужно использовать режим 2 или 3 работы таймера/счетчика.

Общая программа для МК. Диаграмма состояний устройства

Общая программа для микроЭВМ базируется на нижеописанном алгоритме. Алгоритм довольно непростой, т.к. все же нужно каким-то образом, хотя бы программным методом, выявлять ошибки ввода/вывода и реагировать на их появление.

Для большей наглядности к алгоритму, описанному обычными словами, прилагается рисунок - так называемая диаграмма состояния устройства (рис.3), на которой приведены четыре основных состояния устройства с точки зрения обмена информацией с ЭВМ.

Заранее оговорим тот факт, что наша микро-ЭВМ является ведомой, а персональный компьютер - ведущим при обмене данными. Иными словами, устройство само по себе, без приказа от ПК, ничего делать не должно. Оно всецело подчиняется управляющему компьютеру. Персональный компьютер выбран ведущим по той простой причине, что он обладает большей мощностью и способен без особенных проблем управлять устройством. Кроме того, он может дать пользователю больше сервисных функций.

Состояние первое - Wait

В этом состоянии устройство оказывается сразу же после включения питающего напряжения. Здесь оно ожидает от компьютера запроса на инициализацию, который выражается в посылке компьютером символа NUL. Устройство же, в свою очередь, должно в ответ на полученный запрос включить и настроить, если требуется, дополнительные модули и ресурсы, а затем, если все прошло нормально, послать в ЭВМ символ ACK. В случае же ошибки оно должно послать NAK. Таким образом, происходит первое "общение" двух "собеседников". Если хотите, они должны "обменятся приветствиями" или "пожать друг другу руки".

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

В этом состоянии наша микро-ЭВМ ожидает запроса ПК на посылку измеренного значения, считанного с АЦП. Запросом является символ XON. По принятии этого символа устройство переходит в новое состояние - Sending. Переходу соответствует стрелка 2.

Попадая сюда, микроконтроллер считывает двоичное двенадцатиразрядное число из АЦП ранее указанным методом и посылает частями в ЭВМ. В данной реализации происходит преобразование двоичного числа в трехсимвольный шестнадцатеричный эквивалент, например, в <1FF> для десятичного числа 511. Сначала посылается <1>, затем и еще один .

По окончании передачи значения в компьютер микро-ЭВМ переходит в следующее состояние по стрелке 4.

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

Тут возможными являются несколько вариантов ответа ПК на посланное число: он может ответить об успешном приеме символом XOFF, который будет означать, что больше пока не требуется других значений, а может ответить символом XON, означающим, что нужно еще одно значение. Если принят XOFF, то устройство возвращается в состояние готовности Ready (переход 7 на диаграмме). Если же принят символ XON, то устройство опять оказывается в состоянии Sending (переход 5) и повторяет считывание из АЦП с последующей передачей числа в линию. Не рассмотренным оказался лишь тот случай, когда ПК не понравилось то, что он получил: например, вместо символов диапазона <0>. <9>, . он получил нечто иное, или <,>. В этой ситуации он посылает нашему устройству символ NAK, который должен трактоваться как запрос на повторную посылку последнего значения, что и происходит: устройство опять переводится в состояние Sending (переход по стрелке 6).

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

Т.е. в каком бы состоянии не находилось наше устройство, оно обязано ответить на инициализационный запрос, таким же образом, как и при первичной инициализации (см. Пункт состояние Wait). Если же микро-ЭВМ получила какой-то неожиданный или неверный символ или запрос, то оно всегда должно ответить на него символом NAK.

Такая стратегия является выигрышной, так как при подобная организация программы для устройства облегчает выполнение сразу нескольких задач: микро-ЭВМ и ПК не будут играть в испорченный телефон, во-первых, а, во-вторых, они смогут просто и эффективно "общаться" друг с другом.

Переходим к ПК. Общая программа для ПК. Диаграмма состояний ПК.

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

Первое состояние Initialization

Сюда компьютер попадает, когда пользователь нажимает на его клавиатуре клавишу, соответствующую принятию единственного значения. В этом состоянии компьютер посылает символ инициализации NUL в устройство и ожидает ответа на него символом ACK или NAK. Если был получен ACK, значит инициализация прошла нормально и можно продолжить работу - перейти в следующее состояние по стрелке 2 на диаграмме. В случае получения NAK работа должна прекратиться и компьютеру следует перейти в заключительное состояние Done по стрелке 1.

В этом состоянии компьютер подготавливается к приему символов, из которых будет состоять запрошенное из микро-ЭВМ значение. Запросов на посылку значения существует два. Первый - это обычный запрос значения, ему соответствует символ XON.

Второй же запрос - это запрос на повторную посылку последнего значения. Это необходимо в том случае, если значение не было принято полностью за какое-то объективное время или были приняты неверные символы, не попадающие в диапазоны от <0> до <9> и от до . Для запроса на повторную посылку отводится символ NAK.

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

Здесь ПК просто считывает три символа значения, измеренного и преобразованного с помощью АЦП. Как было сказано ранее, существует некоторое объективное время ожидания символа компьютером. Если символ не был считан за это время, то такая ситуация интерпретируется как ошибочная, т.е. имела место ошибка ввода/вывода.

Кстати говоря, при довольно высоких скоростях обмена информацией (больше 19200 бит/с) или при работе в операционной системе MS-Windows (любой версии) часто бывает, что компьютер из посылаемых ему трех символов принимает только два, а иногда и того меньше - один. Чтобы компьютер "не висел" - ожидал бесконечно долго недостающего или пропущенного символа - вводится некоторое время, ограничивающее это ожидание. К сожалению, эти пропуски аппаратным методом никак не выявляются.

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

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

Если так и не было принято всех 3-х символов значения за отведенное время, то компьютер должен попросить наше устройство послать ему значение повторно. Этой ситуации соответствует переход по стрелке 5, т.е. компьютер делает запрос символом NAK и переходит обратно в состояние Ready.

Если в процессе приема компьютером была зафиксирована ошибка ввода/вывода (а у ПК есть такая возможность достаточно проанализировать регистр состояния последовательного порта), то лучше привести и компьютер и микро-ЭВМ в исходное состояние, т.е. повторить инициализацию. Поэтому на диаграмме также присутствует и стрелка 3.

И, наконец, если компьютер получил от устройства все три символа, то он переходит в состояние анализа полученного значения - в состояние Received по стрелке 8.

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

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

Плата снизу

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

Плата сверху

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

В собранном виде

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

Печатная плата. Тонер не смыт.

Все, аппаратная часть для связи микроконтроллера с компом готова. Ждите следующего поста в котором я расскажу как конфигурировать и использовать UART в микроконтроллерах AVR . В будущем я буду через UART осуществлять отладочную связь с компом. Может быть даже ради этого соберу отдельный модуль с LCD экранчиком. Для отладки в железе. Посмотрим как попрет.

Спасибо. Вы потрясающие! Всего за месяц мы собрали нужную сумму в 500000 на хоккейную коробку для детского дома Аистенок. Из которых 125000+ было от вас, читателей EasyElectronics. Были даже переводы на 25000+ и просто поток платежей на 251 рубль. Это невероятно круто. Сейчас идет заключение договора и подготовка к строительству!

А я встрял на три года, как минимум, ежемесячной пахоты над статьями :)))))))))))) Спасибо вам за такой мощный пинок.

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

Парадокс однако, последовательные порты в писюках пропадают. А потребители последовательных портов множатся =)

Будет! Когда найду где купить эту гребанную FT232 а заказывать за 3 цены из Москвы совершенно не хочется.

Да COM у меня гдет в глубине, а USB на морде. ПЛюс на ноуте нет СОМ порта, а хочется :)

А чо за камеры за 10 баксов да еще с RS232? Чтот не верится.

Классно, у нас таких цен нет :( Все везут сначала в Москву, а потом только к нам. Выходит раз в 5-10 дороже.

Не смогли бы вы скинуть фотку платы видеопередатчика описываемого выше?

Много надо?
Могу прислать сколько-нибудь.

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

Сейчас проще уже сразу Obdev AVR-USB использовать, а в пару ему загрузчик BootloadHID. Лишь бы кварц не меньше 12 МГц был.

А как с этим Obdev AVR общатсья с компом? Он виртуальный COM порт открывает?

Сколько памяти в кристалле сжирает код USB?

Драйвер памяти кушает

1.5 Кб, зависит от конфигурации. На tiny2313 точно влезало, даже ещё место под свой код оставалось.

HIDBoot кушает 2 Кбайта.

Вопрос: какую набольшую длину кабеля можно сделать от платы с MAX232 до выводов контроллера ? и какая наибольшая длина может быть у кабеля от MAX232 до COM порта, если делать девайс на стороне контроллера ?

У меня от МАХ232 до контроллера 1.5 метра, от MAX232 до порта тоже было 1.5 метра, работало без сбоев. ПОдозреваю, что можно и много больше, по крайней мере раза в два три точно. Но тут уже от скорости передачи зависит.

Это чистый 12В рс232. Поэтому от МАкс до контроллера сильно лучше не удалять.

Я писал про случай Макс-COM.

На быстром обмене можно не заморачиваться на создание буффера и слать посимвольно. На медленной скорости будет тупить вся прога на передаче =)

Гдето давно схемка была датакабеля для симена с25,на мах232 дак там и питание от ком порта было и вся схема с микрой в дипе в пластмассовый корпус разъёма влезала

Действительно, лучше уж сразу про USB статью делать. Простейший пример я в ЖЖ постил.

Да он еще столько же проживет. Может и не на пользовательских компах, но вот в промышленных решениях точно!

FT232 спасет отца русской демократии :)

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

Открываю ГиперТерминал, выбираю подключиться через com 1, пишу текст. Что я должен увидеть?

Свой же набранный текст к тебе должен вернутся (при отключеном эхе). Если схема собрана верно и работает.

Еще вопросик. В печатной плате. номерация площадок для приклеивания разьема RS232 с лево на право 1,2. 5. Когда начал прикладывать разем к спаеной плате получилось, что цифры не на разьеме и на плате не совпадаю. 1(RS232) напротив 5 (плата), 2(RS232) напротив 4 (плата) и т.д. это так и задумывалось? или на печатной плате в электронном виде перепутан порядок цифр?

Нет, все нормально. Это я маму с папой перепутл. Когда взяд маму все цифры совпали :). Тока еще вопрос есть. если нумерация ног начинается от метки с возростанием номера ноги против часовой стрелко, то как Тх и Rx попали на 7 и 8 ногу Мах232. Должны наверно быть 15 и 16 (в тексте статьи)

да кстати. про ноги тоже заметил, только не 15,16 а 9,10.

Хотел купить микруху MAX232, а её в прайсе нет, но есть другие, какую брать? Самую дешёвую? ;-) И чем они отличаются?

MAX232AEJE 127.65руб.
MAX232AEPE+ 71.63руб.
MAX232AESE 63.86руб.
MAX232AESE+ 58.64руб.
MAX232AEWE 56.11руб.
MAX232AMJE 223.67руб.
MAX232CPE 22.12руб.
MAX232DR PBF 9.83руб.
MAX232ECDW PBF 21.07руб.
MAX232EEPE 56.53руб.

ST232ABDR PBF 22.42руб.
ST232ACDR PBF 11.59руб.
ST232BDR PBF 12.64руб.
ST232BN PBF 16.22руб.
ST232CDR PBF 11.24руб.
ST232CN PBF 11.59руб.

Разница только в производителе и в типе корпуса. Еще в температурном диапазоне.

Типовая схема подключения контроллера Arduino UNO к компьютеру через USB порт показана на Рисунок 1. Со стороны компьютера канал связи виден как стандартный СОМ порт. Но, на самом деле, это виртуальный СОМ порт с которым компьютер обменивается пакетами данных на частоте 12 МГц, а специализированный контроллер, расположенный на плате Arduino UNO, преобразует пакеты USB данных в последовательность бит в формате асинхронного интерфейса UART с уровнями 0/5В, которые и используются основным контроллером Arduino UNO (микросхема ATmega328P) для загрузки программ и обмена данными с компьютером в процессе выполнения программ.

image


Рисунок 1. Типовое подключение контроллера Arduino UNO к компьютеру через USB порт.

Временная диаграмма последовательной передачи данных по правилам UART устройства с уровнем сигналов 0/5В показана на Рисунок 2. Данные передаются байтами. Помимо данных последовательность содержит стартовый и стоповый биты и может включать другие служебные биты, например, бит контроля четности, применение которого задается в настройках СОМ порта, там же устанавливается и одна из стандартных скоростей передачи.

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

СОМ порт не имеет сигналов синхронизации, временные интервалы формируются как передатчиком так и приемником с точностью тактирования не хуже 5%.

image


Рисунок 2. Временная диаграмма UART последовательной передачи данных (01001011) микросхемы ATmega328P контроллера Arduino UNO.

Контроллер Arduino UNO содержит специализированный контроллер для преобразования UART сигналов в USB последовательность и наоборот. Порт USB компьютера осуществляющий связь с виртуальным СОМ портом работает в режиме Full-speed на частоте 12 Мбит/с (Рисунок 3). Этот режим поддерживает как USB 1.0. так и USB 2.0.

image


Рисунок 3. Измеренный 4В сигнал на дифференциальной линии USB–COM контроллера Arduino. Длина USB кабеля 2м. Частота сигналов на USB линии 12 МГц. Для формирования сигналов использовалась запись данных в СОМ порт контроллера. Частота USB данных 12 МГц не изменялась при записи в СОМ порт как на скорости 9600 бит/c так и 115200 бит/c.

Данные по шине USB передаются пакетами (Рисунок 4). Размеры пакета зависят от типа выполняемой передачи. Каждый пакет в режиме Full-speed содержит 8 бит синхронизации тактов приемника и передатчика (Sync), 8 бит идентификатора пакета (PID) и 2 бита конца пакета (EOP). Блок данных может составлять от 0 до 1023 байт.

image


Рисунок 4. Пример передачи пакета по дифференциальной линии USB 1.1 в режиме Full-speed [2]. Изменение состояние дифференциального сигнала соответствует передаче нуля, сохранение уровней — соответствует передаче единицы. Для улучшения синхронизации на единичных последовательностях принудительно вставляют нуль на каждые 6 единиц подряд.

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

Дифференциальные сигналы USB передаются по витой паре экранированного 4-проводного кабеля. По стандарту, сечение сигнальных проводников высокоскоростного кабеля USB 2.0 должно быть 28 AWG и от 20 до 28 AWG для жил питания, в зависимости от длины кабеля (см. Таблица 1).

Таблица 1. Примерное соответствие длины и диаметра проводов USB2 кабеля.
Размер провода [3]

image

Для увеличения длины USB кабеля его снабжают встроенными усилителями сигнала.
По требованию спецификации USB 2.0 для режима High-speed (до 480 Мбит/с) задержка распространения сигнала в кабеле не должна превышать 5,2 нс/м и быть не более 26 нс, что и определяет максимальную длину кабеля 5 м.

Задержка на метр длины в коаксиальном кабеле обратно пропорциональна скорости распространения волны в м/c, которая вычисляется как

image

,
где с – скорость света 3*10^8 м/с; е — диэлектрическая проницаемость материала внутреннего изолятора; u — магнитная проницаемость изолятора. Для полиэтилена с u= 1 и е= 2,2 фазовая скорость равна 2*10^8 м/с и, соответственно, задержка 5 нс/м.

Для уменьшения потерь сигнала важно обеспечить однородность волнового сопротивления (в.с.) сигнальной линии. Изменение в.с. может быть связано с некачественной заделкой кабеля, плохим согласованием элементов линии, низким качеством разъёма и др.

Волновое сопротивление кабеля определяется его конструкцией. В.с. коаксиального кабеля в области высоких частот (30 кГц и выше) вычисляется по следующей формуле.

image


где L – продольная индуктивность закороченного кабеля, Гн; C – поперечная ёмкость разомкнутого кабеля, Ф; e — диэлектрическая проницаемость изолятора; D — диаметр изолятора; d – диаметр проводника. Величина в.с. не зависит от длины кабеля.
Диэлектрическая проницаемость изоляторов лежит в диапазоне 1… 7: 1 – воздух, вакуум; 1.3… 2.4 – полиэтилен; 2.5..6 — резина; 5..7 – фарфор; 6..7 – слюда; 7 — стекло.
Величина в.с. витой пары USB 2.0.кабеля составляет 90 ± 15% Ом [5]. Расчет в.с. экранированной витой пары должен учитывать и взаимное расположение проводников.

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

image

,
где rH — сопротивление нагрузки; Z – в.с. кабеля.

Включении несогласованных элементов в USB линию может значительно исказить сигнал. Например, линия оказывается неработоспособной при включение в неё эектровводов из силового кабеля с волновым сопротивлением 10… 40 Ом.

Структура канала USB – RS-232 – плата Arduino UNO

Для обеспечения устойчивой связи удаленного СОМ устройства с компьютером через USB порт длина USB канала сведена к минимуму, на выходе USB линии поставлен USB – RS-232 преобразователь, который через длинную линию подключен к преобразователю уровней +15/-15В == 0/5В, находящегося вблизи контроллера Arduino и подключенного к его UART порту, как показано на Рисунок 5. Скорость обмена данными в этой структуре такая же как и при подключении Arduino к компьютеру через USB кабель, но частота сигнала в протяженной линии почти в 100 раз ниже — как 0,115200 Мбит/с и 12 Мбит/с.

image


Рисунок 5. Схема подключения контроллера Arduino UNO к компьютеру через USB порт и длинные несогласованные линии. Обозначение контактов GND, передатчика Tx и приемника Rx на стандартном разъеме DB-9 СОМ порта компьютера показано вверху слева. Со стороны устройства сигналы TxD и RxD на разъема DB-9 надо поменять местами.

Преобразователь RS232 уровней (Рисунок 5) не меняет последовательность бит. Он изменяет уровни сигнала 0/5 В в +12/-12 В и наоборот (Рисунок 6).

image


Рисунок 6. Временная диаграмма и уровни сигналов преобразователя RS232.

Для преобразования уровней сигналов RS232 могут использоваться микросхемы, например, MAX232 (компании Maxim Integrated Products), SP232 (Sipex), ADM232 (Analog Devices). Эти микросхемы имеют одинаковые характеристики и назначения выводов. Подключение преобразователя MAX232 показано на Рисунок 7 [6].

image


Рисунок 7. Схема подключения преобразователя уровней MAX232. Схема обеспечивает уровень выходного напряжения приблизительно ± 7.5 В соответствующий интерфейсу RS-232.

Рынок предлагает множество модулей преобразователей уровней построенных на базе перечисленных и других микросхем. Внешний вид одного из таких модулей показан на (Рисунок 5).

К компьютеру устройство можно подключить через стандартный COM порт, если он есть, или использовать преобразователь USB-RS232 (другие названия: USB-COM конвертеры, переходники или адаптеры), связанный с USB портом напрямую или через собственный USB кабель. Внешний вид USB преобразователей показан на Рисунок 5.

Вариант реализации макета линии COM устройство – USB порт компьютера без RS-232 линии показан на Рисунок 8.

image


Рисунок 8. Вариант подключения контроллера Arduino UNO к преобразователю USB-COM компьютера.

Для проверки работоспособности канала обмена данными между контроллером Arduino UNO и компьютером через длинную несогласованную линию был собран провод показанный на Рисунок 9 и Рисунок 10. Куски провода соединялись скруткой или удерживались в гнездах разъемов на трении.

image


Рисунок 9. Канал RS232 из составного кабеля 9,5 м.

image


Рисунок 10. Куски провода канала RS232 из составного кабеля 9,5 м.

Передача и прием данных через СОМ порт контроллера Arduino UNO контролировалась утилитой компьютера COM Port Toolkit.

Используемая для тестирования линии программа Arduino UNO, передающая в СОМ порт байты данных и переключающая светодиод контроллера по приходу внешних команд, показана ниже.


Осциллограммы сигналов, снятые на концах состоящей из кусков линии RS-232 показаны на Рисунке 11. Данные передаются на частоте 115200 бит/с.

Прошивка контроллера Arduino UNO

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

При подключении платы Arduino через канал RS-232 с двумя сигнальными линиями Tx и Rx при отсутствии линии сигнала сброса загрузка выполнялась в следующем порядке.

1. Запускалась среда разработки Arduino (как и в режиме загрузки через USB).

2. Загружалась программа (как и в режиме загрузки через USB).
3. Прошивка программы запускалась командой Ctrl+U или через кнопку (как и в режиме загрузки через USB)
4. Дополнительно, после запуска прошивки и заполнения прогресс индикатора нажималась кнопка Reset на плате контроллера Arduino приблизительно на 0,5 секунды.

image

.

Прошивка выполнялась успешно и при кратковременном отключении питания контроллера, вместо нажатия на кнопку Reset.

Запуск загрузчика контроллера Arduino можно выполнять и в автоматическом режиме от компьютера, без нажатия на кнопку Reset или кратковременного отключения питания. Для этого необходимо, например, канал RS-232 с Tx, Rx, и GND дополнить линией RTS и подключить ее через преобразователь уровней ко входу RESET контроллера Arduino.

Речь пойдёт о реализации простенького веб-сервера на базе TCP/IP стека, запиленного в предыдущей статье. Скорее, даже не сервера, а веб-интерфейса, который можно прикрутить к какому-нибудь сетевому девайсику на микроконтроллере.

Простой пример

Для начала, сделаем втупую)

Заходим браузером на, с позволения сказать, серевер и видим следующее:

Первый тест

Что радует, на отдачу странички уходят считанные милисекунды (смотрим в столбик Time):

Wireshark

Теперь рассмотрим как это работает поподробней.

SmartSniff

Как запрос, так и ответ содержат заголовки (каждая строка — отдельное поле заголовка). Заканичвается заголовок пустой строкой. После заголовка могут идти данные.

Заголовок запроса начинается со следующей строки:

Ответ нашего сервера начинается со строки:

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

Пример посложнее

Напишем простенький веб-интерфейс для управления светодиодом. Алгоритм его работы будет следующим:

  • При получении пакета по TCP, смотрим, является ли он GET-запросом. Если является, выковыриваем из него URL.
  • Разбираем URL на путь и параметры.
  • Проверяем путь. Пока у нас будет только главная страничка. Если путь не равен "/", возрвращаем страничку с ошибкой 404.
  • Проверяем параметры. Если в параметрах есть команда, выполняем её (включаем/выключаем светодиод).
  • Отдаём страничку, с текущим состоянием светодиода и ссылкой для включения/выключения.


Заходим на девайс браузером и видим примерно вот такую страничку:

Второй тест

Страничка наша сделана максимально компактной, чтобы точно поместиться в один пакет. Как видим, ответ сервера занял всего 200 байт.

Wireshark

Можно теперь немного поиграться:

Формы

HTML позволяет создавать формы для отправки различных данных на сервер. Главное не забывать о том, что вся страничка должна поместиться в 1 пакет. Такое уж ограничение у сервера на микроконтроллере)

Так что, если нужно сделать много настроек, стоит разбить веб-интерфейс на несколько вкладок.

Вот простейшая форма, позволяющая юзеру ввести один байт:

В тэге form указывается адрес и способ отправки данных на сервер. В данном случае, это метод GET — поля формы будут отправлены в виде параметров в URL.

В браузере эта форма будет выглядеть примерно вот так:

Пример формы

При нажатии ОК, на сервер будет отправлен следующий запрос:

С помощью такой формы мы можем, например, регулировать яркость светодиода

Заключение

Читайте также: