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).
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.
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.
(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.
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.
Envoi des adresses
avec données forcées à 0
Envoi des données avec adresses forcées à 0
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).
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
Deux prototypes à base de 18F4550
ont été assemblés sur une plaque sans soudure. PIC programmés avec
mon 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.
Contrôle des données délivrées par le PIC et comparaison avec les valeurs simulées :
Les données capturées sur mon oscilloscope numérique sont conformes à celles attendues (simulées).
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'ordinateur hôte.
Circuit de Pierre C.
Montage mis en boîte dans un vieil adaptateur TV par câble...
... et fin prêt pour le prochain défilé de chars !
Logiciel du PIC
Pro - 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.