Electronique > Réalisations > Interfaces > Interface USB 007 - Pro 

Dernière mise à jour : 07/05/2023

Présentation

Cette interface USB permet d'envoyer des commandes "clavier" à un logiciel informatique par le biais de boutons-poussoirs au pied (footswitches), tel que le ferait un clavier informatique USB standard avec nos petits doigts de mains.

interface_usb_007_pcb_3d_front  interface_usb_007b_pcb_3d_front  interface_usb_007c_pcb_3d_front  

L'interface dispose de six entrées de commande (pour un maximum de six interrupteurs au pied) et un ensemble de configurations prédéfinies (presets) que l'on peut rappeler à tout instant. Elle permet par exemple, tout en gardant les mains libres, de "simuler" l'appui sur les touches "Page précédente" ou "Page suivante" en utilisant deux des six interrupteurs au pied, pour passer d'une page à l'autre dans un lecteur PDF. Trois circuits ont été développés :
- schéma 007 : circuit basé sur un PIC 18F4550, avec afficheur LCD ou OLED
- schéma 007b : circuit basé sur un PIC 18F47J53, avec afficheur LCD ou OLED
- schéma 007c : circuit basé sur un PIC 18F2550, sans afficheur

   

Schémas 007 (avec PIC 18F4550) et 007b (avec PIC 18F47J53)

Le coeur du montage est un PIC 18F4550, qui comporte un module USB chargé du difficile travail de gestion des données du bus.

interface_usb_005
   

Les interrupteurs notés SW1 à SW8 peuvent être de classiques interrupteurs mécaniques ou des commutateurs magnétiques ou optiques.

Si dans la poursuite de cette étude (notamment pour l'ajout de la gestion d'un écran OLED) je me rend compte que le code se trouve trop à l'étroit dans le PIC 18F4550 (schéma 007), j'utiliserai un PIC 18F47J53 possédant davantage de ressources (schéma 007b).


interface_usb_007b
   
Fonctionnement général
Le logiciel du PIC analyse en permanence l'état de ses huit entrées de commande Cde_0 à Cde_5 et Pr_Dec et Pr_Inc. Les deux lignes de commande Pr_Dec et Pr_Inc permettent de changer le preset en cours, alors que les six entrées de commande Cde_0 à Cde_5 permettent d'envoyer des codes de touches qui correspondent à une commande clavier donnée. En fonction du bouton-poussoir Cde_0 à Cde_5 pressé, la sortie USB envoie le code d'une touche unique (scancode). Par exemple avec le preset #1, la pression du bouton-poussoir SW4 relié sur la ligne Cde_3 a pour effet d'envoyer le code correspondant à la touche [Flèche droite].

Presets actuellement implémentés
Actuellement, 4 presets de 6 touches sont implémentés.
   
interface_usb_007_lcd_preset-01 interface_usb_007_lcd_preset-02interface_usb_007_lcd_preset-03interface_usb_007_lcd_preset-04
   
Preset Cde5 Cde4 Cde3 Cde2 Cde1 Cde0 Action Code(s) touche(s) (scancodes) Hex-Dec
#1 0 0 0 0 0 1 PageDown $4E - 78d
#1 0 0 0 0 1 0 PageUp $4B - 75d
#1 0 0 0 1 0 0 ArrowDown $51 - 81d
#1 0 0 1 0 0 0 ArrowUp $52 - 82d
#1 0 1 0 0 0 0 ArrowLeft $50 - 80d
#1 1 0 0 0 0 0 ArrowRight $4F - 79d
#2 0 0 0 0 0 1 Enter $28 - 40d
#2 0 0 0 0 1 0 Echap $29 - 41d
#2 0 0 0 1 0 0 KP-Plus $56 - 86d
#2 0 0 1 0 0 0 KP-Minus $57 - 87d
#2 0 1 0 0 0 0 Home $4A - 74d
#2 1 0 0 0 0 0 End $4D - 77d
#3 0 0 0 0 0 1 F1 $3A - 58d
#3 0 0 0 0 1 0 F2 $3B - 59d
#3 0 0 0 1 0 0 F3 $3C - 60d
#3 0 0 1 0 0 0 F4 $3D - 61d
#3 0 1 0 0 0 0 F5 $3E - 62d
#3 1 0 0 0 0 0 F6 $3F - 63d
#4 0 0 0 0 0 1 F7 $40 - 64d
#4 0 0 0 0 1 0 F8 $41 - 65d
#4 0 0 0 1 0 0 F9 $42 - 66d
#4 0 0 1 0 0 0 F10 $43 - 67d
#4 0 1 0 0 0 0 F11 $44 - 68d
#4 1 0 0 0 0 0 F12 $45 - 69d

   

Horloge PIC et liaison USB

Le quartz externe utilisé ici est impératif, il conditionne la stabilité des horloges internes, notamment de celle requise par le module USB qui tourne à 48 MHz. La valeur de ce quartz externe est de 8 MHz, cette fréquence est divisée par 2 avant d'attaquer le module PLL (boucle à verrouillage de phase) intégré au PIC qui délivre une horloge de 96 MHz, horloge de 96 MHz qui elle-même est ensuite divisée par deux pour délivrer un 48 MHz conforme à la norme. Le module USB travaille en effet à une fréquence de 48 MHz pour satisfaire le mode full-speed.

En résumé : horloge quartz 8 MHz divisée par 2 pour obtenir le 4 MHz nécessaire à la PLL du module USB. Les routines du logiciel qui ne sont pas liées au dialogue USB sont cadencées à 48 MHz. La résistance R2 de 1,5 kO câblée entre la ligne Data+ (D+) du bus USB et le +3,3V issu du régulateur de tension interne du PIC (sortie sur broche Vbus, pin 18) permet à l'hôte (ici un ordinateur PC) de reconnaître le périphérique (notre interface) en mode full-speed. En branchant cette interface à un ordinateur, elle sera vue comme un clavier externe par le système d'exploitation.

   
Identification officielle de l'interface (Microchip Sublicense agreement)

Numéro d'identification de vendeur VID (VENDOR_ID) = 0x04D8 (Microchip)
Numéro d'identification de produit PID (PRODUCT_ID) = 0xE68C (Remy MALLARD, interface USB 007)

interface_usb_007b_usb_win_vid-pid

   
Affichage LCD / OLED
Le circuit est prévu pour piloter soit un afficheur LCD de 4x20 caractères, soit un afficheur OLED de 128x64 pixels.
Pour l'heure, seul l'affichage LCD est supporté.

Commandes au pied

Plusieurs types de composants peuvent faire office d'interrupteur au pied pour les interrupteurs SW1 à SW8 : commutateur mécanique simple, magnétique ou optique. Le premier type est le plus simple à mettre en oeuvre et le moins coûteux (si on pioche dans les premiers prix), mais il est en revanche sujet à une usure plus rapide (un interrupteur de ce genre se change facilement, mais on n'est pas toujours enclain à ouvrir nos appareils). Les composants utilisés pour les interrupteurs magnétiques ou optiques sont quasiment inusables, mais il faut leur associer une "mécanique de mouvement" qui elle doit durer, sachant qu'il existe des pieds humains très "actifs".

En considérant que la partie électronique est fiable et conçue pour durer, on peut considérer dans le cas présent que la fiabilité générale du système est fortement dépendante de la partie mécanique.

Remarque : le schéma montre une connexion directe entre les interrupteurs au pied et les entrées du microcontrôleur. Cela est permis ici dans le cadre du prototypage. Dans le montage final, les entrées/sorties du microcontrôleur sont évidemment filtrées.

Alimentation
Le PIC est alimenté par le bus USB, la consommation du circuit étant bien inférieure au courant maximal de 500 mA fixé par la norme.

   

Configuration des commandes à envoyer
Pour l'instant, les presets sont figés et les commandes liées sont codées en dur. A terme, l'utilisateur pourra configurer chaque preset au moyen de commandes série (USB-RS232 ou MIDI) ou au moyen des interrupteurs de configuration DSW1 (lignes Cfg_0 à Cfg_7).

   

Schéma 007c (avec PIC 18F2550)

Réduction de place par remplacement du PIC 18F4550 par un 18F2550, suppression des poussoirs de test et suppression de l'écran.
   

interface_usb_007c 

   

Alternative avec clavier USB canibalisé ?

On peut obtenir les mêmes résultats avec un clavier USB du commerce démonté, sur lequel on soude des boutons-poussoirs à chaque endroit où une touche doit être activée. Ce n'est ni très compliqué ni très simple et ça fonctionne. Les deux choses qui m'ennuient avec cette solution, c'est d'une part la place occupée par l'ensemble, d'autre part une moindre flexibilité quand on veut activer plusieurs touches d'affilé (par exemple CAPSLOCK+A) ou en même temps (par exemple CTRL+RETURN).

   

Prototype

Réalisé pour la version 007 avec PIC 18F4550, selon implantation montrée plus loin.
   
interface_usb_007_proto_rm_001a interface_usb_007_proto_rm_001binterface_usb_007_proto_rm_001c interface_usb_007_proto_rm_001e
   

Le circuit n'a pas fonctionné du premier coup, la faute à l'utilisation d'une empreinte de connecteur USB erronnée (les broches 3 et 4 du connecteur USB étaient inversées). Après charcutage des pistes de cuivre et remise en ordre des connexions, tout est OK. Bien entendu, le circuit imprimé a été révisé avec une empreinte de connecteur USB un peu plus sérieuse...

Le plus drôle dans l'affaire est que le PIC a pu être programmé du premier coup (avant correction du câblage), alors que l'alimentation du circuit se faisait entre le +Vbus et la ligne D+ qui faisait alors office de masse !!!

Tests OK avec l'écran LCD utilisé pour la configuration de l'interface. Le curieux affichage sur la 3è photo n'est pas lié à un bug, mais à des tests d'affichage que j'avais oublié de désactiver. La 4è photo montre la conformité avec ce qui était attendu pour le Preset #1.

   

Logiciel du PIC

Pro - Système pro, logiciel complet non disponible en libre service.

Une version allégée et dotée du seul preset #1 sera prochainement mise ici en libre accès.

   

Circuits imprimés (PCB)

Réalisés en double face pour les trois versions 007 (avec PIC 18F4550), 007b (avec PIC 18F47J53) et 007c (avec PIC 18F2550).

interface_usb_007_pcb_components_top   interface_usb_007b_pcb_components_top
 
interface_usb_007c_pcb_components_top

  

Pour le circuit 007 avec 18F4550, le connecteur 4 points de l'écran OLED est situé côté "soudure" du PCB, à proximité du connecteur 14 points dédié à l'écran LCD. 

Les deux premières versions prennent plus de place, mais elles disposent de boutons-poussoirs soudés directement sur le PCB qui facilitent la mise au point - pas besoin de brancher les pédales au pied. Le circuit 007c quant à lui est plus un "amusement" qu'autre chose, je n'en avais pas vraiment besoin.

   

Historique

07/05/2023
- Ajout schéma 007c avec PIC18F2550 (version moins volumineuse).

23/04/2023
- Ajout photos prototype.

02/04/2023
- Première mise à disposition.