Мы не выдаем Китай за Италию. Платы от российского производителя по сниженным ценам.

Новинки: Power DC Shield, Светодиодная лента, Freeduino Mini, модули USB Host, Relay. Радикальное снижение цен: Mega 2560, Ethernet.

Назначение

Модуль предназначен для подключения к платам Arduino/Freeduino различной USB-периферии, является аналогом модуля от Circuits@Home и отличается только более удобным конфигурированием выводов SS/INT, а также совместимостью с платами формата Nano.

Модуль поставляется в двух вариантах монтажа - для плат стандартного формата Arduino, и для плат формата Nano. Немонтируемые в той или иной версии разъемы высылаются вместе с платой для возможного последующего монтажа.

USB Host Shield 1100 р. 900 р. В корзину
USB Host Shield Nano 1100 р. 900 р. В корзину

В настоящее время библиотека USB Host Library, разработанная для подобных модулей, поддерживает ряд функционала следующих устройств:

  • HID устройства, такие как клавиатуры, мыши, джойстики и др.
  • Игровые контроллеры - Sony PS3, Nintendo Wii, Xbox360
  • Последовательные порты - FTDI, PL-2303, ACM, а также некоторых сотовых телефонов и GPS приемников.
  • ADK-Android телефоны и планшеты
  • Цифровые фотоаппараты - Canon EOS, Powershot, Nikon
  • Ряд устройств хранения данных, такие как USB флэш накопители, внешние жесткие диски
  • Ряд Bluetooth адаптеров

Принципиальная схема по лицензии Creative Commons Attribution-ShareAlike 2.5

Подключение модуля

USB Host Shield основан на микросхеме программно-управляемого USB-контроллера Max3421E.

Обмен данными между микросхемой Max3421E (в составе USB Host Shield v.3) и микропроцессором Atmega (в составе Arduino/Freeduino) осуществляется по SPI интерфейсу. Для обмена данными задействуются пять выводов платы Arduino/Freeduino: SCK, MISO, MOSI, SS для организации SPI интерфейса, и вывод INT для организации прерываний. Сигналы SCK, MISO, MOSI подключены к выводам 13, 12, 11 платы Arduino/Freeduino. Для совместимости со сторонними платами Mega возможно подключение этих сигналов через разъем ICSP.

Для аппаратной совместимости с другими модулями и версиями плат сигналы SS и INT могут быть переключены на любой из пинов 10, 9 или 8 платы Arduino/Freeduino при помощи группы перемычек JSS и JINT. По умолчанию в библиотеке USB Host Library принято, что сигнал SS подключен к пину 10, а сигнал INT к пину 9.

Схема питания

Схема питания USB Host Shield v.3. осуществляет подачу 3.3В на микросхему Max3421E и согласование сигнальных уровней напряжений 5В микросхемы Atmega на плате Arduino/Freeduino и 3.3В микросхемы Max3421E модуля USB Host Shield v.3.

Схема стабилизированного питания 3.3В собрана на линейном стабилизаторе напряжения MC33269D-3.3. Питание 5В на вход стабилизатора MC33269D-3.3 подается с платы Arduino/Freeduino.

Согласование уровней напряжения 3.3В и 5В реализовано на двух микросхемах:
74AHC125 – преобразователь уровней с 5В до 3.3В для сигналов SCK, MOSI, SS, RESET.
74HCТ125 – преобразователь уровней с 3.3В до 5В для сигналов MISO, INT, GPX. Дополнительный сигнал GPX может быть при необходимости задействован в Ваших разработках самостоятельно.

Возможен выбор источника питания 3.3В от стабилизатора MC33269D-3.3 USB Host Shield или от встроенного в плату Arduino/Freeduino с помощью перемычки SJPWR.

Кроме того, возможна работа с платами Arduino/Freeduino с напряжением питания ATmega 3.3В. В таком случае отпадает необходимость в преобразовании уровней напряжения, т.к. сигналы платы Arduino/Freeduino также имеют уровень 3.3В. Для передачи сигналов 3.3В без их преобразования предусмотрено семь джамперов: SJ4 (MISO), SJ5 (INT), SJ6 (GPX), SJ7 (SCK), SJ9 (SS), SJ8 (Reset), SJ10 (MOSI). Замыкание джамперов шунтирует входы/выходы микросхемы 74AHC125 и 74HCТ125 и сигналы 3.3В передаются напрямую. Микросхемы 74AHC125 и 74HCТ125 могут быть выпаяны.

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

Библиотека USB Host Library

Библиотека USB Host Library доступна на страничке разработчика, в том числе, в виде архива, а также у нас.

Она совместима с ПО Arduino версии 1.0.5 (также предполагается совместимость и с более поздними версиями).

Более подробно установка библиотек описана в разделе подключение библиотек. Структура каталогов папки libraries после установки должна стать такой:

/libraries/USB_Host_Shield_20
/libraries/USB_Host_Shield_20/examples
/libraries/USB_Host_Shield_20/...

Библиотека достаточно "объемна", поскольку поддерживает большое количество различной периферии, и кроме того, может компилироваться не только для Arduino-совместимых устройств. В силу этого, для решения многих задач, связанных с обменом данными по USB может потребоваться глубокое понимание стандартов USB и навыки программирования C/C++ на уровне выше начального.

К библиотеке прилагаются примеры, поясняющие работу с ней.

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

#include <usbhub.h>
#include <hidboot.h>

class MouseRptParser : public MouseReportParser
{
protected:
  virtual void OnMouseMove(MOUSEINFO *mi);
  virtual void OnLeftButtonUp(MOUSEINFO *mi);
  virtual void OnLeftButtonDown(MOUSEINFO *mi);
  virtual void OnRightButtonUp(MOUSEINFO *mi);
  virtual void OnRightButtonDown(MOUSEINFO *mi);
  virtual void OnMiddleButtonUp(MOUSEINFO *mi);
  virtual void OnMiddleButtonDown(MOUSEINFO *mi);
};
void MouseRptParser::OnMouseMove(MOUSEINFO *mi)  
{
  Serial.print("dx=");
  Serial.print(mi->dX, DEC);
  Serial.print(" dy=");
  Serial.println(mi->dY, DEC);
}
void MouseRptParser::OnLeftButtonUp(MOUSEINFO *mi)  
{
  Serial.println("L Butt Up");
}
void MouseRptParser::OnLeftButtonDown(MOUSEINFO *mi)
{
  Serial.println("L Butt Dn");
}
void MouseRptParser::OnRightButtonUp(MOUSEINFO *mi)
{
  Serial.println("R Butt Up");
}
void MouseRptParser::OnRightButtonDown(MOUSEINFO *mi)
{
  Serial.println("R Butt Dn");
}
void MouseRptParser::OnMiddleButtonUp(MOUSEINFO *mi)
{
  Serial.println("M Butt Up");
}
void MouseRptParser::OnMiddleButtonDown(MOUSEINFO *mi)
{
  Serial.println("M Butt Dn");
}

USB Usb;
USBHub Hub(&Usb);
HIDBoot<HID_PROTOCOL_MOUSE> Mouse(&Usb);

MouseRptParser Prs;

void setup()
{
  Serial.begin( 115200 );
  Serial.println("Start");
  if (Usb.Init() == -1)
    Serial.println("OSC did not start.");
  delay( 200 );
  Mouse.SetReportParser(0,(HIDReportParser*)&Prs);
}

void loop()
{
  Usb.Task();
}