Electronique > Réalisations > Interfaces > Interface USB 005 [Pro]

Dernière mise à jour : 28/02/2016

Présentation

Cette interface USB a été conçue pour adapter une interface 128 voies obsolète initialement raccordée sur un port LPT (imprimante), en vue d'utilisation avec un logiciel spécifique pilotant des lumières sur un char (pour défilés). 

interface_usb_005b_pcb_3d_a

L'interface dispose d'un bus de données d'une largeur de 8 bit (Q0 à Q7) et de trois lignes de commande (Init, AutoFeed et Strobe). Les données USB sont décortiquées par cette interface et restituées sous forme parallèle avec délivrance alternée des valeurs d'adresses et de données. Deux schémas sont proposés, qui présentent les mêmes caractéristiques :
- Schéma 005 : à base de PIC 18F2550
- Schéma 005b : à base de PIC 18F4550
Remarque : cette interface n'est pas un adaptateur USB/LPT !

Schéma 005 - avec PIC 18F2550

Le coeur du montage est un PIC 18F2550, qui fait tout le travail.

interface_usb_005

Fonctionnement général
Le PIC 18F2550 reçoit les données qui proviennent d'un logiciel spécifique, via une liaison USB et sous la forme d'un paquet de 64 octets. Ici, seuls les 32 premiers octets sont traités, par paire : un octet pour la valeur d'adresse et un octet pour la valeur des données. Chacune de ces paires de deux octets est présentée sur les sorties Q0 à Q7 de façon alternée, en même temps que des signaux de commande (de validation) émis sur les sorties Init, AutoFeed et Strobe. 

interface_usb_005b_graph_001a
(données simulées - pour données réelles, voir paragraphe Prototypes)

Cette interface est en effet couplée à une autre interface qui se charge de transformer les données "série/parallèle" (16 octets de données traités séquentiellement) en données purement parallèle (128 bits de commande séparés). Le temps mis pour délivrer l'ensemble des signaux requis par l'interface LPT d'origine (pour l'activation des 128 sorties indépendantes) est voisin de 900 us.

Horloge PIC et liaison USB
Le quartz externe utilisé ici est impératif, il conditionne la stabilité des horloges internes, surtout celle requise par le module USB qui tourne à 48 MHz. La valeur de ce quartz externe est de 20 MHz, cette fréquence est divisée par 5 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 bien propre. Le module USB travaille à une fréquence de 48 MHz pour satisfaire le mode full-speed. En résumé : horloge (quartz) 20 MHz divisée par 5 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 14) permet à l'hôte (ici un ordinateur PC) de reconnaître le périphérique (notre interface) en mode full-speed.

Alimentation
Le PIC est alimenté par une alim externe de 5 V, mais on peut aussi utiliser la tension mise à disposition sur le bus USB, la consommation du circuit étant bien inférieure au courant maximal de 500 mA.

Schéma 005b - avec PIC 18F4550

A peu de choses près, le circuit est similaire au précédent et offre sur ses sorties, les mêmes signaux de données et de commande. 

interface_usb_005b

La différence avec le circuit à base de PIC 18F2550 réside dans les points suivants :
- bloc de données Q0-Q7 dédié sur un port "entier" (PORTD) : mise à jour plus rapide des sorties Q0-Q7, et de façon plus "simultanée";
- plus de broches (40 au lieu de 28), utile pour d'éventuelles extensions.
- la broche RB3 du PIC délivre un niveau haut pendant la durée de délivrance des signaux traités sur les sorties Data.
- les données reçues sur le bus USB sont renvoyées à l'hôte (PC) si la broche RC0 (libellé Echo) est à l'état haut.
Le temps mis pour délivrer l'ensemble des signaux requis par l'interface LPT d'origine est ici voisin de 640 us, avec un délai d'au moins 5 us entre chaque "étape de commande" (prise en compte de la vitesse des CI CMOS et de la longueur des câbles qui suivent).

Simulation

Avant de travailler sur les transferts réels avec un bus USB physique, j'ai simulé le tout sous Proteus, avec l'assistance de mon logiciel USB-HID-TEST-256 pour l'envoi des ordres. Ci-après, quelques copies d'écran des ordres envoyés (à gauche) et copies d'écran des données délivrées par le PIC (à droite).
Remarques concernant les copies d'écran de gauche :
- les numéros de boutons 0 à 255 correspondent aux bits d'une trame de 32 octets (32 x 8 = 256 bits). Par exemple le bouton #8 correspond au bit #0 de l'octet #1, et le bouton #51 correspond au bit #3 de l'octet #7.
- le premier octet de la trame USB (boutons 0 à 7) n'est pas exploité.
Remarques concernant les copies d'écran de droite :
- les captures des signaux logiques délivrés par le PIC ont été réalisées avec l'outil "Analyseur logique" de Proteus.
- les lignes A0 à A7 correspondent aux données Q0 à Q7, A8 = Init, A9 = Autofeed et A10 = Strobe.

interface_usb_005b_graph_001aa interface_usb_005b_graph_001ab
Envoi des adresses avec données forcées à 0

interface_usb_005b_graph_001ba interface_usb_005b_graph_001bb
Envoi des données avec adresses forcées à 0

interface_usb_005b_graph_001ca interface_usb_005b_graph_001cb
Envoi des adresses et des données "normales"

Prototypes

Deux prototypes ont été réalisés, un avec un PIC 18F2550 et l'autre avec un PIC 18F4550. Les captures d'écran des signaux logiques délivrés par le PIC ont été réalisées par mon oscilloscope Picoscope 3204 MSO qui dispose de 16 entrées logiques. Le logiciel utilisé pour envoyer les ordres USB est toujours mon logiciel USB-HID-TEST-256.

Prototype avec PIC 18F2550
Utilisation d'un module "StartUSB" de MikroElektronika vendu précâblé et avec bootloader préchargé dans le PIC (programme chargé dans le PIC via la liaison USB elle-même, pas eu besoin d'utiliser la connexion ICSP).

interface_usb_005_proto_001a interface_usb_005_proto_001b interface_usb_005b_proto_001_graph_001cb

Les données capturées avec l'analyseur logique de l'oscilloscope numérique Picoscope (graphe ci-avant) sont conformes à celles attendues.

Prototype avec PIC 18F4550
Utilisation d'une plaque sans soudure, programmation du 18F4550 avec mon programmateur PICkit2. Le PIC est ici alimenté par le bus USB (pas d'alimentation externe, et donc contraire à ce que j'indique sur mon schéma) comme quoi c'est faisable. Bien sûr, qui donc en doutait ? 

interface_usb_005b_proto_001a  interface_usb_005b_proto_001_graph_001cb

Là encore, les données capturées sont conformes à celles attendues. Si la broche RC0 (libellé Echo sur le schéma) est à l'état haut, les 64 octets reçus sur le bus USB sont renvoyées tels quels à l'hôte (PC dans notre cas).

Circuit de Pierre C.
Montage mis en boîte dans un vieil adaptateur TV par câble...

interface_usb_005_proto_pc_001a

... et fin prêt pour le prochain défilé de chars !

Logiciel du PIC

Système réalisé sur demande pro, code non disponible.

Circuit imprimé

Non réalisé par mes soins.

Historique

28/02/2016
- Ajout détails simulation USB et prototypes (avec 18F2550 et 18F4550).
07/02/2016
- Première mise à disposition.