Dernière mise à jour :
20/01/2013
Présentation
Cette interface USB a été conçue pour être pilotée par mon logiciel freeware
ProgSeq,
pour étendre ses possibilités hardware qui comptaient déjà le port
parallèle (bien obsolète) et le port série (obsolète aussi mais
utilisable sans problème avec un convertisseur USB/RS232).
Cette
nouvelle interface s'articule autour d'un PIC
18F4550 ou 18F45K50 (microcontrôleur qui comporte un module USB
intégré) et deux expandeurs de ports (PCF8574 dotés de 8 ports chacun).
Elle
dispose en tout de 32 sorties logiques :
- 16 sorties en accès direct sur le PIC;
- 16 sorties supplémentaires via des expandeurs de ports PCF8574.
Si 16 sorties suffisent, les expandeurs de port peuvent être omis. Une version "allegée" (12
voir 16 sorties) et architecturée sur un PIC 18F2550 pourrait aussi voir le
jour, mais ce n'est pas dans mes priorités. Une version plus élaborée avec 256 sorties est décrite à la page
Interface USB 004.
Avertissements
Pour l'heure, et comme plusieurs broches du PIC 18F4550 ne servaient pas, j'ai
décidé de dupliquer certaines sorties "étendues" (normalement
accessibles via les expandeurs de ports) sur les broches libres. Ce qui nous donne ceci :
-
sorties directes 1 à 8 : ports A et B du PIC
-
sorties directes 9 à 16 : port D du PIC
-
sorties étendues 17 à 24 : via expandeur de port PCF 8574 N°1.
-
sorties étendues 25 à 32 : via expandeur de port PCF 8574 N°2.
-
copie sorties étendues 17 à 24 : ports C et E du PIC.
Il n'est pas exclu que dans une future version ces broches "libres"
des ports C et E servent à autre chose, aussi je conseille d'utiliser l'expandeur de
ports N°1 pour les sorties 17 à 24.
L'interface fonctionne bien dans le monde
réel, les 16 sorties directes et les 16 sorties étendues sont toutes
fonctionnelles. Il est possible de tester cette interface USB avec mes logiciels
ProgSeq et
UsbHidTest.
Pour ce qui est de la recopie des sorties 17 à 24 sur les broches
libres du PIC, seules 6 sur les 8 fonctionnent à ce jour (lignes RC6 et RC7 du
PIC pas encore fonctionnelles).
Schéma
Le coeur du montage est le PIC 18F4550, qui à lui seul permet de
piloter 16 sorties (ou 24 sorties, voir avertissement ci avant). Les deux expandeurs de port
PCF8574 ne servent que pour un usage 24 ou 32 sorties (un seul expandeur de port ajoute 8 sorties supplémentaires).
Fonctionnement général
Le
PIC 18F4550 reçoit les données provenant du logiciel
ProgSeq via une
liaison USB. Les données envoyées par ProgSeq correspondent aux 32 sorties logiques
à activer, regroupées en quatre paquets de 8 bits. Les 16 premières sorties logiques sont directement
accessibles sur les broches du PIC, alors que les 16 dernières sorties
le sont au travers d'expandeurs de port de type PCF8574. Cette approche
permet de s'équiper de 16 sorties et d'en augmenter le nombre seulement si le
besoin s'en fait sentir. Telle que l'interface est conçue, on pourrait
même sans difficulté porter le nombre de sorties à 64 voire 128 ou 256, par le
simple ajout d'expandeurs de ports supplémentaires. Exemple d'interface à 256 sorties à la page
Interface USB 004.
Sorties
Toutes
les sorties sont disponibles sous la même forme, à savoir 20 mA
max par sortie, ce qui permet d'attaquer directement des
LED, des
optocoupleurs ou des
optotriacs
(à travers une résistance de limitation de courant, ne l'oubliez pas).
Le PIC 18F4550 possède plein de broches il est vrai (40 si mon compte
est bon) et on pourrait penser qu'on peut disposer des 32 sorties d'un
simple claquement de doigts (je ne sais pas d'où vient cette
expression, c'est sûrement lié à une histoire de surtension, il
faudra que je pose la question à
Jean Echenoz). Sur
les 40 broches du PIC, certaines sont réservées pour l'application
en elle-même :
- 4 broches pour l'aimentation
- 3 broches pour la partie USB (VBUS, D- et D+)
- 3 broches pour le connecteur ICSP (MCLR/VPP, PGD et PGC)
- 2 broches pour "extension" SPI ou I2C
Bref,
vous voyez bien que c'est mal barré pour disposer de 32 sorties directes. De toute façon
c'est toujours pareil, plus on en a et plus on en veut. Je serais parti
d'un composant à 18 broches, j'aurais dit qu'il m'en fallait un à 40
broches. Et une fois ce dernier entre les mains, il m'en faudrait un de
144 broches. Restons sérieux. Sans aucun composant additionnel, on
dispose déjà de 16 sorties directes. déjà pas mal, non ? Les 16 sorties directes se partagent plusieurs ports du
microcontrôleur : 5 sorties sur le port A, 3 sur le port B et 8 sur le port D (en plus des 5 sur
le port C et des 3 sur le port E dont je parlais précédement : les sorties sur les
ports C et E sont des recopies de ce qu'on trouve en sortie du
premier expandeur de port - ça aurait tout aussi bien pu être une
copie des données fournies par le second expandeur). Pour
résumer, point besoin d'ajouter d'expandeur de port si 16 sorties
vous suffisent. Les PCF8574 peuvent dans ce cas rester chez votre
fournisseur de composants et les piecettes dans votre
porte-monnaie. Ceci dit, quoi commander avec tout ça ? Les LED c'est
bien mais de grosses lampes ou je ne sais quelle autre machinerie de
votre invention, ce serait mieux. Le problème est toujours le même avec
ces interfaces logiques qui débitent un petit 5 V sous quelques mA.
Impossible d'allumer un convecteur électrique ou une lampe de 300 W.
Heureusement que quelqu'un a inventé les relais, transistors de puissance et
les triacs, sinon je ne vous dis pas dans quelle galère on se
trouverait aujourd'hui.
- Commande en puissance et en très basse
tension (5 à 24 V): je vous suggère l'emploi de gros transistors,
bipolaires ou MOSFET, selon la valeur des courants à commuter et selon
votre humeur.
-
Commande en puissance et en 230 V : je vous suggère l'emploi de triacs
ou de relais (via transistors 2N2222 ou ULN2xxx).
Exemple pour 8 sorties.
Avertissement
: les sorties des PCF8574 sont de type "drain ouvert", ce qui signifie
qu'une sortie active présente un état bas (proche de 0 V). Utilisez les
sorties de ces expandeurs comme vous le feriez avec des ULN2803 (
exemple).
Bus I2C
Il
n'est mis en oeuvre que pour permettre l'utilisation des deux
expandeurs de port. On aurait pu s'en passer totalement si on
s'était limité à 16 sorties. Mais je tenais tellement à disposer de ces
32 voies qui me faisaient déjà rêver quand j'étais dans le ventre de ma
maman (ceci dit il s'agit d'un vague souvenir, je rêvais peut-être
à d'autres choses). Pour les accès I2C, j'ai utilisé une routine
maison pour me faire la main (il me fallait le faire une fois au moins), mais j'aurais bien sûr pu utiliser les
routines intégrées à MikroPascal.
Horloge PIC
Le
quartz externe utilisé ici
est impératif, il conditionne la stabilité des horloges internes,
surtout celle requise par le module USB (48 MHz) et qui doit être très
stable. La valeur de ce quartz externe est de 20 MHz mais si vous êtes
prêt à mettre les
mains dans le code logiciel (partie configuration PIC avec les
diviseurs et tout le tintouin), vous pourrez utiliser d'autres valeurs
(par exemple 4 MHz, 8 MHz, 12 MHz ou 16 MHz). Juste pour info, le
module USB travaille à une fréquence de 48 MHz pour satisfaire le mode
full-speed, grâce à un oscillateur interne de 96 MHz qui est couplé à
une PLL (boucle à verrouillage de phase) dont la fréquence d'entrée
attendue est de 4 MHz. Avec un quartz 20 MHz, il est donc
nécessaire d'utiliser un facteur de division par cinq au niveau du
module "PLL-prescaler".
Alimentation
L'interface
en elle-même (PIC et expandeurs de ports) ne consomme pas un
courant élevé, et je comprend que l'idée d'utiliser la tension de +5 V
ramenée par le bus USB (VBUS) vous chatouille les doigts. Mais
comme j'ai prévu de piloter des optocoupleurs, la consommation grimpe
vite. Il faut en effet compter 15 mA à 20 mA par optocoupleur ! Avec
huit optocoupleurs, les 100 mA du bus USB sont déjà insuffisants. On
pourrait bien sûr demander à l'ordinateur de fournir 500 mA au lieu de
100 mA, mais je ne trouve pas cette solution raisonnable. Le courant
que doit fournir votre alimentation dépend du nombre de sorties que
vous allez réellement utiliser de façon simultanée et du courant
fourni par chacune d'elle. Si comme moi vous prévoyez des optocoupleurs
qui réclament 20 mA, alors une simple multiplication vous dira ce qu'il
vous faut :
- 8 sorties sous 20 mA -> 160 mA
- 16 sorties sous 20 mA -> 320 mA
- 32 sorties sous 20 mA -> 640 mA
A cette valeur, ajouter 50 mA pour le reste. Bien entendu, si l'interface sert de déco avec des LED haute luminosité
qui se contentent de 1 mA chacune, alors dans ce cas il est possible de
se repiquer sur l'alim +5 V du bus USB.
Prototype
Deux prototypes ont été réalisés avec ma platine EasyPic7 et une petite plaque sans soudure :
- un premier pour tests rapides avec les deux expandeurs de port (16 LED câblées sur les 20 disponibles);
-
un second avec toutes les LED déportées sur la plaque sans soudure,
pour les besoins de la vidéo de démonstration avec ProgSeq en action.
Vidéo de démonstration
Vite faite, pour montrer l'interaction entre l'interface USB 003 et le séquenceur logiciel
ProgSeq.
Les
plus attentifs auront surement noté une curiosité sur la vidéo, au
niveau des quatre baregraphes à LED. Deux de ces baregraphes sont
inversés : deux sont "référencés" à la masse via les résistances de
limitation de courant, les deux autres le sont au +5 V. Normal, les
sorties du PIC sont actives en délivrant un +5 V alors que les sorties
des PCF8574 sont en drain ouvert.
Logiciel du PIC
Le
code binaire compilé (*.hex) est disponible dans l'archive suivante (pas de code source dispo pour ce projet).
Interface USB 003 - 18F4550 - (20/01/2013)
Si vous souhaitez recevoir par
la poste un PIC préprogrammé et prêt à
utiliser, merci de consulter la page
PIC - Sources.
Pour la programmation du PIC, deux choix possibles :
- soit sur platine de programmation avec support 40 broches (et bien sûr compatible 18F4550);
- soit en mode ICSP, programmation avec un PicKit2 ou autre du genre.
Pour ce mode, utiliser le connecteur ICSP (J2 sur le schéma), sans y
fournir d'alimentation (l'interface doit être alimentée par sa propre
alimentation de +5 V, aussi bien pour son utilisation courante que pour la phase de programmation).
Circuit imprimé
Non réalisé.
Historique
20/01/2013
- Première mise à disposition.