[Troubleshooting] USB Host Shield

Forum dédié aux produits Sparkfun

[Troubleshooting] USB Host Shield

Message non lude Laetitia » Mer 3 Fév 2016 12:10

L'USB Host Shield de Sparkfun est un produit permettant de transformer votre Arduino en contrôleur USB : à vous les souris et manettes pour piloter vos robots, l'enregistrement de vos données sur clés USB, etc. Pratique, non ?

Mais en traitant un retour sur ce produit, je me suis aperçue de quelques petites erreurs de conception, qui peuvent ralentir le développement de vos projets. Je vais donc détailler ici les soucis rencontrés, ainsi que les solutions pour y remédier :)

    - Le périphérique USB ne s'initialise pas -

En testant avec une souris par exemple, celle-ci ne s'allume même pas : problème d'alimentation ? De communication avec le MAX3421 ?

L'USB Host Shield ainsi que sa librairie USB_Host_Shield_2.0 ont été développés à l'origine par Circuits@Home. Sur ce design le signal de RESET du MAX3421 est relié à celui de l'Arduino via un convertisseur de niveaux 5V/3.3V.

Sur la version de Sparkfun en revanche, ce même signal de RESET est sensé être délivré par la pin D7, mais la librairie n'est pas configurée pour...

Pour y remédier, il faut soit reproduire le schéma d'origine en reliant D7 à la broche de RESET de l'Arduino, soit utiliser une résistance de tirage qui produira la même effet (le signal de RESET, non actif, est à l'état haut).
Nous pouvons donc rajouter physiquement une résistance de 10kΩ entre D7 et +5V :

pullup_D7.png
pullup_D7.png (41.04 Kio) Vu 638 fois

Ou exploiter celles intégrées à l'ATmega en rajoutant une ligne de code dans le setup() :

Code: Tout sélectionner
pinMode(7, INPUT_PULLUP);

Cette modification est à faire pour tous vos projets : parfois ils "tomberont en marche" en captant des parasites sur les broches d'à côté (testé avec un fil "en l'air" qui faisait antenne), mais ça ne garantit pas la longévité de votre montage.

Ceci suffit normalement à faire fonctionner les souris, claviers et autres périphériques peu gourmands en énergie.

    - Le périphérique USB ne s'initialise toujours pas -

Les ports USB de votre ordinateur ne sont pas sensés pouvoir délivrer plus de 500mA chacun. Lorsque ce sont eux qui alimentent l'Arduino qui pilote votre shield, les périphériques qui consomment davantage de courant ne pourront pas fonctionner. C'est le cas par exemple d'une manette de Xbox.

Pour y remédier, il faut utiliser une alimentation capable de délivrer suffisamment de courant pour tout le monde (l'Arduino, le shield & le périphérique qui vous intéresse). 1A minimum pour pouvoir faire fonctionner une manette, si vous avez plus en stock, c'est tant mieux.

Attention cependant, le shield est alimenté via la pin Vin de l'Arduino, mais son régulateur a une tolérance inférieure à celle de l'Arduino : il grille au-delà de 15V ! Par sécurité il vaut mieux être légèrement en-dessous.

Récapitulons : lorsque vous utilisez un périphérique un peu gourmand en énergie, il faut alimenter l'Arduino via son connecteur jack, avec une alimentation 7 à 12V, 1 à 2A.

    - Je n'ai pas de retour sur la liaison série -

Suivant le modèle de votre Arduino, il peut être possible de laisser branchés à la fois le câble USB et l'alimentation via connecteur jack. Si vous utilisez un Arduino Uno par exemple, à compter de la révision 3 le circuit est conçu de manière à détecter l'alimentation sur le jack et à la privilégier par rapport à l'USB.

Mais le moniteur série de l'IDE Arduino est capricieux lorsque l'on se trouve dans une telle configuration, et pour ceux qui utilisent d'autres cartes n'ayant pas de protection vis-à-vis des alimentations, il faut trouver d'autres solutions.

Vous pouvez alors utiliser un câble FTDI avec les branchements suivants :
  • RTS - x
  • RXD - D1
  • TXD - D0
  • 5V - x (brancher à la broche 5V ou Vin de l'Arduino fait doublon avec l'alimentation via jack, choisissez l'un ou l'autre !)
  • CTS - x
  • GND - GND
Ensuite, ouvrez putty, dans la fenêtre d'accueil sélectionnez Connection type > Serial
Et configurez la liaison série :
  • Le port COM correspond à celui du câble FTDI et non celui de l'Arduino,
  • La vitesse de la liaison série doit être identique à celle définie dans votre sketch (Serial.begin(vitesse))
  • Il n'y a pas de contrôle de flux

parametres putty.png
parametres putty.png (51.25 Kio) Vu 638 fois

Vous devriez maintenant pouvoir faire remonter les données comme vous le feriez dans l'IDE Arduino !

Pour conclure ce post, un exemple de ce qu'on peut obtenir avec le sketch d'exemple XBOXUSB (avec le setup() modifié comme indiqué plus haut) :

putty_xbox.png
putty_xbox.png (12.74 Kio) Vu 638 fois

Oui, oui, on est un peu geek sur les bords... :mrgreen:
"If it's itchy, scratch it !" - "DIY or die"

RTFM (À lire avant de poster) - ANDb (Arduino Noob Database)
Avatar de l’utilisateur
Laetitia
 
Messages: 296
Inscription: Mar 7 Aoû 2012 15:07
Localisation: Toulouse

Retourner vers Sparkfun

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron