учебник. Бхв, 2020. Isbn 9781119405375 (англ.) Isbn 9785977567367 (рус.) 2020 by John Wiley & Sons, Inc. Перевод на русский язык, оформление. Ооо бхвпетербург, Ооо бхв, 2020
Скачать 1.9 Mb.
|
Глава 7. Последовательный интерфейс USB 186 обмениваться данными между компьютером и платой Arduino или между платой Arduino и другими устройствами, оснащенными таким интерфейсом, включая другие платы Arduino. В этой и следующей главах мы рассмотрим практически все, что нужно знать о подключении платы Arduino к компьютеру через порт USB и обмене данными между ними по этому каналу. ВОЗМОЖНОСТИ ПОСЛЕДОВАТЕЛЬНОГО ОБМЕНА ДАННЫМИ ПЛАТФОРМЫ ARDUINO Разные платы Arduino реализуют последовательный обмен данными раз- ными способами. Это касается как аппаратной реализации адаптеров USB/ RS-232, так и программной поддержки различных возможностей. В этом раз- деле мы рассмотрим разные аппаратные интерфейсы последовательного об- мена данными, предлагаемые на различных платах Arduino. Примечание Дополнительная информация по последовательной связи предлагается в видеоуроке на веб-странице для этой главы по адресу https://www.exploringarduino.com/con- tent2/ch7. Для начала нам нужно понимать разницу между последовательным пор- том и портом USB. Тем, кто помоложе, возможно, даже никогда и не приходи- лось иметь дело с последовательным портом (или портом RS-232 ), поскольку этот интерфейс был довольно давно заменен на USB. На рис. 7.1 показано, как выглядит стандартный разъем последовательного порта. Самые первые платы Arduino оснащались разъемом последовательно- го порта, который позволял подключать плату к компьютеру с помощью 9-жильного кабеля. В настоящее время таким разъемом оснащаются разве что специализированные компьютеры, но на рынке предлагаются адапте- ры, позволяющие подключать устройства RS-232 к порту USB компьютера. Рис. 7.1. Разъем последовательного порта (Источник: Википедия. Общественный доступ) Возможности последовательного обмена данными платформы Arduino 187 Микроконтроллер ATmega 328P, на котором основана плата Arduino Uno, оснащен встроенным аппаратным портом RS-232. На плату Arduino выведе- ны его линии передачи (TX) и приема (RX), которые подключены к цифро- вым контактам 0 и 1 платы. Как уже упоминалось в разделе «Настройка загрузчика и встроенной про- граммы Arduino» главы 1, плата Arduino оснащена загрузчиком, позволяю- щим загружать в нее программы через последовательный интерфейс. Эти контакты мультиплексированы, и кроме последовательного интерфейса они применяются для обслуживания других функциональностей. Посредством специальной адаптерной схемы эти контакты также подключены к лини- ям передачи и приема разъема USB платы. Но хотя оба интерфейса (USB и RS-232) являются последовательными, они несовместимы напрямую друг с другом. Поэтому для обеспечения возможности взаимодействия платы Arduino с другими устройствами через интерфейс USB используется один из двух вспомогательных способов. Первый способ состоит в преобразовании с помощью дополнительной интегральной схемы протокола RS-232 платы Arduino в протокол USB компьютера, и наоборот. Эта микросхема может встраиваться в плату Arduino или поставляться отдельно с адаптерной пла- той или кабелем. Этот подход применяется в плате Arduino Uno, в которой встроенная микросхема выполняет преобразование между протоколами USB и RS-232. Второй способ состоит в использовании микроконтроллера со встроенным контроллером USB. Этот подход применяется, например, в пла- те Arduino Leonardo, оснащенной микроконтроллером 32U4. Использование встроенной или внешней микросхемы преобразователя USB/RS-232 компании FTDI или Silicon Laboratories Как упоминалось в предыдущем разделе, многие платы Arduino (а так- же их клоны) оснащены дополнительной микросхемой для преобразования между интерфейсами USB и RS-232. Одна из наиболее популярных таких микросхем — CP210x производства компании FTDI или Silicon Laboratories. При подключении этой микросхемы к компьютеру через разъем USB она отображается в разделе Порты диспетчера устройств как виртуальный по- следовательный порт COM, к которому можно обращаться, как к обычному последовательному порту RS-232. На рис. 7.2 показана плата Arduino Nano, в которой есть встроенная микросхема преобразователя USB/RS-232 компа- нии FTDI (обведена белой линией). В плате METRO 328 от компании Adafruit (которая подойдет вместо платы Arduino Uno для реализации проектов в этой книге) также имеется встроен- ная микросхема преобразователя CP2104 . 8 Список деталей и оборудования для проектов этой главы Плата Arduino Leonardo или Seeeduino Lite или Pololu A-Star 32U4 Prime LV. USB-кабель (тип A на Micro-B). Беспаечная макетная плата половинного или полного размера. Набор проволочных перемычек. Кнопки (3 шт.). Резистор номиналом 220 Ом (1 шт.). Резистор номиналом 10 кОм (3 шт.). Фоторезистор (1 шт.). Светодиод красный диаметром 5 мм (1 шт.). Аналоговый датчик температуры TMP36 (1 шт.). Двухкоординатный джойстик (1 шт.). Исходный код и прочие электронные ресурсы Исходный код, видеоуроки и прочие электронные ресурсы для этой главы можно загрузить с веб-страницы https://www.exploringarduino. com/content2/ch8. Исходный код для проектов этой главы можно также загрузить на вкладке Downloads веб-страницы издательства Wiley для этой книги: https://www.wiley.com/go/exploringarduino2e. ЧТО ВЫ УЗНАЕТЕ ИЗ ЭТОЙ ГЛАВЫ В главе 7 мы экспериментировали с последовательной передачей данных USB/RS-232 между компьютером и платой Arduino. Для этого мы под- ключали компьютер к плате Arduino через последовательный интерфейс, что позволяло любой программе, способной взаимодействовать с последова- тельным портом, «общаться» с платой Arduino. Такой метод вполне пригоден для обычного обмена данными, но он весьма далек от использования всех возможностей собственно USB-интерфейса. Эмуляция USB-устройств Глава 8. Эмуляция USB-устройств 216 Интерфейс USB является фактическим международным стандартом для подключения компьютерных периферийных устройств. Возможности этого интерфейса постоянно расширяются в результате добавления новых функ- ций. Например, стандарт USB SuperSpeed и разъем USB-C позволяют пере- давать данные, видео высокого разрешения, обеспечивают напряжение, до- статочное для зарядки аккумуляторной батареи подключенных устройств, и многое другое. Компьютер может определять разнообразные типы под- ключенных к нему USB-устройств. В этой главе мы рассмотрим, как платы Arduino, оснащенные встроенной поддержкой USB, могут действовать как устройства человеко-машинного интерфейса HID. Примечание Для упражнений в этой главе требуется плата Arduino со встроенной в основной микро- контроллер поддержкой USB-интерфейса, например, Arduino Leonardo. Платы Arduino, в которых поддержка USB-интерфейса обеспечивается дополнительной микросхемой, например, Arduino Uno или Adafruit METRO 328, для этих экспериментов не годятся. Как отмечалось в списке компонентов, клоны платы Arduino Leonardo предлагаются не- сколькими сторонними производителями. В частности, кроме платы Arduino Leonardo для упражнений в этой главе подойдет плата Seeeduino Lite (поставщик Adafruit) или A-Star 32U4 Prime LV (поставщик Pololu). Поставщики иногда могут испытывать трудно- сти с получением оригинальных плат Arduino и могут предлагать платы-клоны. Но если клоны предлагает поставщик с хорошей репутацией, например, Adafruit или Pololu, то качеству таких плат-клонов можно доверять. Если вы используете плату Seeeduino Lite , установите ее переключатель напряжения на 5 В. Для программирования плат-клонов в меню выбора платы среды Arduino IDE нужно указать плату Arduino Leonardo. Подобно другим платам Arduino, в которых поддержка USB встроена в главный микроконтроллер, плата Arduino Leonardo может эмулировать та- кие устройства, как клавиатура или мышь. В этой главе мы рассмотрим, как использовать плату Arduino Leonardo для эмуляции этих устройств. Совет При реализации примеров этой главы следует соблюдать осторожность, поскольку ино- гда могут возникнуть проблемы с перепрограммированием платы. Например, если за- груженный в плату скетч эмулирует мышь и безостановочно перемещает курсор мыши по экрану, это может создать трудности с нажатием кнопки Загрузить в среде Arduino IDE. В таких случаях, чтобы перепрограммировать плату, нажмите и отпустите на ней кнопку сброса, одновременно нажав кнопку загрузки скетча в среде Arduino IDE. Таким образом плата будет оставаться в режиме работы загрузчика, что позволит начать ее программирование. Драйверы для платы Arduino (или эквивалентной платы-клона) должны установиться автоматически при первом подключении платы к компьюте- ру. Но на некоторых компьютерах с ОС Windows с этим могут возникнуть проблемы. В таком случае следуйте инструкциям по ручной установке драй- веров, предоставляемой на веб-сайте Arduino по адресу blum.fyi/installing- 9 Сдвиговые регистры Список деталей и оборудования для проектов этой главы Плата Arduino Uno или Adafruit METRO 328. USB-кабель (тип A на B для Arduino Uno, тип A на Micro-B для METRO 328). Беспаечная макетная плата половинного или полного размера. Набор проволочных перемычек. Резистор номиналом 220 Ом (8 шт.). Светодиод красный диаметром 5 мм (8 шт.). Светодиод зеленый диаметром 5 мм (4 шт.). Светодиод желтый диаметром 5 мм (3 шт.). ИК-дальномер GP2Y0A21YK0FIR компании Sharp в комплекте с JST- кабелем (1 шт.). Микросхема сдвигового регистра SN74HC595N (1 шт.). Исходный код и прочие электронные ресурсы Исходный код, видеоуроки и прочие электронные ресурсы для этой главы можно загрузить с веб-страницы https://www.exploringarduino. com/content2/ch9. Исходный код для проектов этой главы можно также загрузить на вкладке Downloads веб-страницы издательства Wiley для этой книги: https://www.wiley.com/go/exploringarduino2e. ЧТО ВЫ УЗНАЕТЕ ИЗ ЭТОЙ ГЛАВЫ Н есомненно, что в процессе работы над проектами из этой книги вы уже мысленно составили себе список своих собственных будущих проектов. Вполне возможно, что некоторые из них вам пришлось удалить из списка, поскольку плата Arduino просто не обладает достаточным количеством кон- тактов для их реализации. Одно из самых распространенных применений платформы Arduino состоит в украшении светодиодными гирляндами всех более-менее подходящих для этого предметов. По гирлянде в каждый угол комнаты! Гирлянду на компьютер! По гирлянде на кота и собаку! Ну, на жи- вотных, наверное, не нужно. Глава 9. Сдвиговые регистры 230 Однако с реализацией этих проектов может получиться незадача. Как сде- лать гирлянду из, скажем, 50 мигающих светодиодов (или управлять большим количеством каких-либо других устройств), если плата, например, Arduino Uno, оснащена только 14 цифровыми контактами? Но эта кажущаяся труд- ность в действительности не представляет никакой проблемы, поскольку она с легкостью решается посредством использования сдвиговых регистров. Сдвиговые регистры позволяют расширить возможности ввода-вывода пла- ты Arduino без необходимости приобретения более дорогой платы с микро- контроллером с бóльшим количеством контактов ввода-вывода. В этой главе мы рассмотрим принципы работы сдвиговых регистров, а также реализуем как программы, так и схемы, необходимые для сопряжения платы Arduino со сдвиговыми регистрами с целью расширения ее возможностей цифрового вывода. После выполнения упражнений этой главы вы сможете самостоя- тельно применять сдвиговые регистры, а также будете обладать знаниями, необходимыми для принятия грамотных решений при разработке проектов с большим количеством цифровых выводов. ВЫБОР ПЛАТЫ ARDUINO ДЛЯ РЕШЕНИЯ ЗАДАЧ Как и в большинстве предыдущих глав, в этой главе в качестве платформы для разработки используется плата Arduino Uno (или эквивалентная плата Adafruit METRO 328). Для реализации упражнений в этой главе подойдет лю- бая другая плата Arduino, но будет полезно рассмотреть факторы, вследствие которых предпочтительней выбрать для определенного проекта одну пла- ту Arduino, а не другую. Например, вы, наверное, уже задаетесь вопросом, почему бы просто не взять плату Arduino с большим количеством контактов ввода-вывода, например, Mega 2560 или Due. Конечно же, такой подход был бы вполне логичным для реализации проектов, требующих большего коли- чества контактов ввода-вывода. Но как инженер при разработке проекта вы всегда должны думать о других аспектах. Например, вычислительных мощ- ностей платы Uno может быть вполне достаточно для проекта, но ее контак- тов ввода-вывода не хватает. В таком случае значительно дешевле добавить несколько сдвиговых регистров, чем задействовать плату более высоко- го уровня. Такая конструкция будет более компактной. Но за это придется расплатиться усложнением программы и, возможно, более длительной ее отладкой. ЧТО ТАКОЕ СДВИГОВЫЙ РЕГИСТР Сдвиговый регистр представляет собой устройство, которое принима- ет поток последовательных битов и одновременно выводит значения этих битов на параллельные выходные контакты. Сдвиговые регистры часто III Глава 10. Шина I 2 C Глава 11. Шина SPI и библиотеки сторонних разработчиков Глава 12. Взаимодействие с жидкокристаллическими дисплеями Интерфейсы для обмена данными 10 Список деталей и оборудования для проектов этой главы Плата Arduino Uno или Adafruit METRO 328. USB-кабель (тип A на B для Arduino Uno, тип A на Micro-B для METRO 328). Беспаечная макетная плата половинного или полного размера. Набор проволочных перемычек. Резистор номиналом 220 Ом (8 шт.). Резистор номиналом 4,7 кОм (2 шт.). Светодиод красный диаметром 5 мм (1 шт.). Светодиод зеленый диаметром 5 мм (4 шт.). Светодиод желтый диаметром 5 мм (3 шт.). Микросхема сдвигового регистра SN74HC595N (1 шт.). Датчик температуры TC74A0-5.0VAT (1 шт.). Исходный код и прочие электронные ресурсы Исходный код, видеоуроки и прочие электронные ресурсы для этой главы можно загрузить с веб-страницы https://www.exploringarduino. com/content2/ch10. Исходный код для проектов этой главы можно также загрузить на вкладке Downloads веб-страницы издательства Wiley для этой книги: https://www.wiley.com/go/exploringarduino2e. ЧТО ВЫ УЗНАЕТЕ ИЗ ЭТОЙ ГЛАВЫ М ы уже умеем выполнять сопряжение с платой Arduino аналоговых и цифровых входных и выходных сигналов, но как насчет подключения более сложных устройств? Возможности платы Arduino (и, собственно гово- ря, любого микроконтроллера) можно расширить, подключая к нему разные внешние компоненты. В частности, упростить связь между микроконтрол- лером и разнообразными модулями можно с помощью многих микросхем, реализующих стандартные протоколы цифровой связи. В этой главе мы рас- смотрим использование шины I 2 C. Шина I 2 C 248 Глава 10. Шина I 2 C Шина I 2 C позволяет реализовать надежную, высокоскоростную, двух- стороннюю связь между двумя устройствами при минимальном количестве контактов ввода-вывода, чтобы упростить этот процесс. В зависимости от используемых компонентов и особенностей системы, скорость обмена дан- ными по этой шине составляет от 100 килобит до нескольких мегабит в секун- ду. К шине I 2 C подключается одно ведущее устройство (обычно микрокон- троллер или микропроцессор), осуществляющее управление шиной, а также одно или больше ведомых устройств, которые получают данные от ведущего устройства. В этой главе мы рассмотрим протокол I 2 C, а затем реализуем его для взаимодействия с цифровым датчиком температуры, возвращающим по- казания в значениях температуры, а не в произвольных аналоговых значени- ях. В этом мы будем полагаться на наши знания, полученные в предыдущих главах, добавив сведения из этой главы, чтобы расширить возможности на- ших предыдущих проектов. Примечание На веб-странице электронных ресурсов книги для этой главы (https://www.explorin- garduino.com/content2/ch10) можно просмотреть учебный видеофильм о шине I 2 C. ИСТОРИЯ СОЗДАНИЯ ПРОТОКОЛА I 2 C Работу коммуникационного протокола намного легче понять, если знать, как он эволюционировал с течением времени. Протокол I 2 C был разработан компанией Philips Semiconductors в начале 80-х годов прошлого столетия для обеспечения сравнительно низкоскоростной связи между разными микро- схемами. К 90-м годам прошлого столетия протокол был стандартизирован, и другие компании начали использовать его, выпуская совместимые с ним микросхемы. Этот протокол часто называют двухпроводным протоколом, поскольку для обмена данными в нем предусмотрено всего лишь два прово- да: для данных и для сигнала тактирования. Хотя не все устройства законно используют для связи двухпроводный протокол ( поскольку их производи- тели не уплатили за это), обычно их все равно называют I 2 C-устройствами. Можно провести аналогию с копировальными аппаратами, которые назы- ваются ксероксами, хотя они не выпускаются компаний Xerox, которая была первой, создавшей копировальный аппарат электрографического типа с по- рошковым красящим элементом под этим торговым названием. Поэтому, если для устройства указывается, что оно использует двухпроводный прото- кол связи, то можно быть в большой степени уверенным, что этот протокол работает, как описано в этой главе. Вам, возможно, также встретятся устройства, применяющие другой двух- проводный протокол, называющийся SMBus (System Management Bus — 11 Шина SPI и библиотеки сторонних разработчиков Список деталей и оборудования для проектов этой главы Плата Arduino Uno или Adafruit METRO 328. USB-кабель (тип A на B для Arduino Uno, тип A на Micro-B для METRO 328). Беспаечная макетная плата половинного или полного размера. Набор проволочных перемычек. Резистор номиналом 220 Ом (4 шт.). Трехцветный светодиод с общим анодом диаметром 5 мм (1 шт.). Пьезоэлектрический зуммер (1 шт.). Микросхема LIS3DH на адаптерной плате компании Adafruit (1 шт.). Исходный код и прочие электронные ресурсы Исходный код, видеоуроки и прочие электронные ресурсы для этой главы можно загрузить с веб-страницы https://www.exploringarduino. com/content2/ch11. Исходный код для проектов этой главы можно также загрузить на вкладке Downloads веб-страницы издательства Wiley для этой книги: https://www.wiley.com/go/exploringarduino2e. ЧТО ВЫ УЗНАЕТЕ ИЗ ЭТОЙ ГЛАВЫ М ы уже познакомились с двумя основными методами цифровой переда- чи данных, поддерживаемыми платформой Arduino: шиной последова- тельного интерфейса УАПП (RS-232) и шиной I 2 C. В этой главе мы рассмо- трим третий метод цифровой связи, поддерживаемый Arduino: шиной SPI 1 В отличие от шины I 2 C, шина SPI имеет несколько линий для обмена данными, а также использует отдельную линию для выбора каждого ведо- мого устройства. Хотя это увеличивает число проводов, в результате так- же устраняется необходимость в уникальном адресе для каждого ведомого устройства. Обычно с шиной SPI легче работать, чем с шиной I 2 C; она также 1 Англ. Serial Peripheral Interface — последовательный синхронный периферийный интерфейс. — Прим. пер. |