Multiuse PCB-X : Un petit circuit polyvalent avec micro-contrôleur USB

Description

Ce circuit spécialisé pour USB est inspiré de mes projets précédents Multiuse Tiny 1 et Multiuse PCB2. Cette fois, comme un micro-contrôleur supportant USB nativement est utilisé, il est possible de communiquer en mode pleine vitesse (Full speed) 12 Mbit/s alors qu'avant, puisqu'un stack logiciel (V-USB) était utilisé, la vitesse était limitée à 1.5Mbit/s (Low speed).

Outre la vitesse de transfert plus élevée, il est également possible de faire en sorte que l'hôte (le PC) interroge l'adaptateur à des intervalles plus rapprochés, ce qui est d'une aide irremplaçable pour réduire les délais (latency).

Finalement, puisque le logiciel n'a plus à s'occuper de la communication USB en temps réel, certaines contraintes tombent. Par exemple, l'impossibilité déactiver les interruptions lors d'opérations dont le timing est critique, un obstacle majeur dans certains cas, n'est plus.

Caractéristiques:
  • Micro-contrôleur Atmel atmega32u2 cadencé à 16MHz.
  • Connecteur mini USB
  • 8 pads d'entrée/sortie
  • Pads 3.3v, 5v et GND disponibles sur la face supérieure.
  • Régulateur 3.3v LM1117-3.3 (800mA LDO) à bord
  • Dimensions: 1.825" x 0.619" x 0.217" (46.36mm x 15.73mm x 5.5mm)
  • Pré-programmé avec le bootloader DFU d'atmel. Programmez votre propre firmware par USB sans outils spéciaux!
  • Compatible avec la librairie LUFA par Dean Camera
Note: Ce circuit n'est pas compatible arduino.







Signaux

Un connecteur mini-USB est soudé directement sur le circuit, alors pour USB il suffit simplement de brancher le câble. Pour les autres signaux, des PADs sont disponibles sur l'une ou l'autre des faces.

Signal Face Étiquette
PD0 (INT0/AIN0) Supérieure 0
PD1 (INT1/AIN1) Supérieure 2
PD2 (INT2/AIN2/RXD1) Supérieure 1
PD3 (INT3/TXD1) Supérieure 3
PB1 (SCLK) Inférieure SCK
PB2 (MOSI) Inférieure MOSI
PB3 (MISO) Inférieure MISO
PD7 (HWB) Inférieure HWB
Face supérieure

Face supérieure

Face inférieure

Face inférieure


Oui, les étiquettes 2 et 1 sont inversées.



Schéma

Rien de bien compliqué ici, mais voici tout de même quelques précisions:
  • Les résistances « pull up » R5 à R8 peuvent être alimentés soit à 3.3v (configuration par défaut) ou à 5 volt (option). C'est l'installation de R15 plutôt que R13 qui permet de faire le choix.
  • Les résistance séries R9 à R12 aident à protéger les entrées/sorties du micro-contrôleur. Comme elles ne sont que de 22Ω (valeur plutôt basse) elle ne nuisent pas au fonctionnement.
  • Les composantes identifiées « DNP » ne sont pas installées par défaut. (Note: DNP = Do Not Place [ne pas installer])





Programmation

Option 1 : Bootloader DFU

L'IC Atmega32u2 sur lequel est basé ce circuit est programmé à l'usine d'Atmel avec un bootloader USB DFU (Device Firmware Update). Il est donc possible d'y installer un firmware sans équipement supplémentaire en utilisant un logiciel prévu à cette fin du côté PC.

Pour pouvoir installer un firmware, il faut cependant d'abord entrer dans le bootloader. Il y a différentes manières d'y arriver:
  1. Lorsque le chip est neuf, il suffit de brancher le câble USB car le bootloader ne fait rien lorsqu'aucun firmware n'est installé.
  2. Si le chip a déjà été programmé, il faut soit:
    1. Utiliser une commande spécifique au firmware pour sauter vers le bootloader.
    2. Effectuer un reset via le PAD reset tout en maintenant signal HWB à zéro (gnd)
Un logiciel côté PC fonctionnant bien pour programmer: dfu-programmer. C'est ce que j'utilise.
# Programmation d'un firmware avec dfu-programmer:
$ dfu-programmer atmega32u2 erase                   # Étape 1: Efface le firmware courant
$ dfu-programmer atmega32u2 flash ppusbcomm.hex     # Étape 2: Programme le nouveau firmware
$ dfu-programmer atmega32u2 start                   # Étape 3: Démarrage du nouveau firmware


Option 2 : AVR-ISP

Ceci est la méthode traditionnelle de programmation des micro-contrôleurs AVR effectuée avec un outil spécial. Cette méthode n'est pas normalement nécessaire mais peut parfois servir:
  • Pour installer un bootloader différent
  • Pour utiliser l'espace flash au complet
  • Pour modifier les « fuse bytes »
Les signaux nécessaires sont exposés via les PADs sur la face inférieure du circuit. Il suffit de souder les 6 fils à un connecteur 2x3 correspondant au programmeur. Pour plus d'informations sur l'équipement requis, voir ma page sur la programmation d'AVR.



Développement

LUFA

Je recommande d'utiliser LUFA (http://www.fourwalledcubicle.com/LUFA.php) comme infra-structure USB. La popularité du projet LUFA fait qu'il y a des tonnes d'exemples pour toutes sortes de périphériques USB et un bon mailing list si jamais il vous faut de l'aide.

Voici un exemple simple utilisant LUFA: MouseShaker.tar.gz. Ce firmware, dérivé de l'exemple Demos/Devices/ClassDriver/Mouse fourni avec LUFA implémente une souris dont le pointeur tourne en rond. Presque utile pour empêcher l'écran de veille de s'activer.

Alternatives à LUFA

La documentation de LUFA mentionne quelques alternatives. Je n'ai essayé aucunes d'entre elles.
Alternative USB AVR Stacks

Tout faire sois-même

Il est bien sûr possible de développer son propre code USB en programmant les registres du micro-contrôleur directement (c'est ce que j'ai fait pour le projet PPUSBComm). C'est très bien pour apprendre et bien comprendre ce qui se passe, et aussi pour avoir les droits d'auteur afin de pouvoir être complètement libre quant à la manière de l'utiliser. Par contre, il faut être prêt à y passer beaucoup de temps.



Projets

Projets raphnet

ProjetDescription
Adaptateur manette Gamecube/N64 à USBLa troisième génération de mon adaptateur de manette N64/Gamecube à USB.
PPUSBCOMMPPUSBComm est un outil permettant de copier des fichiers depuis un système Linux doté d'un port USB vers un système tournant sous DOS via son port parallèle.

Projets usagers

Si vous avez publié un projet que vous avez réalisé sur ce PCB, faites moi en part!


FAQ

Si vous avez des questions, n'hésitez pas à m'écrire.

En attendant, voici quelques entrées anticipés:
  • Q: Où puis-je me procurer ce circuit?
  • R: Il est offert en version pré-assemblé, incluant un câble USB et une gaîne thermorétractable dans mon magasin en ligne.

  • Q: Pourquoi avoir fait un nouveau circuit alors que des options similaires (Teensy par exemple) existent déjà à bas prix?
  • R: Pour avoir exactement et tout ce que je voulais:
    1. Dimensions adéquates pour fabriquer mes adaptateurs (ex: Pour pouvoir protéger le circuit avec une gaine thermorétractable, les fils doivent sortir aux extrémités)
    2. Pour avoir un régulateur 3.3v capable d'alimenter plusieurs manettes Gamecube et N64
    3. Pour avoir des pull-up externes vers 3.3v alors que le micro-contrôleur est alimenté à 5volt
    4. Pour les faire fabriquer en grande quantité et avoir le meilleur prix (ce qui se traduit par des adaptateurs finis à un prix plus compétitif).




Avertissement

Je ne saurais être tenu responsable pour les dommages que l'utilisation des informations ou la mise en œuvre des instructions présentées sur cette page pourrait causer à votre équipement, à vous-même ou à autrui. Aussi, je ne donne aucune garantie quant à l'exactitude des informations et à leur fonctionnement.