Connexion
de l'interface :
L'interface est conçue pour s'interconnecter
directement à l'un de vos ports de communication USB
présents sur votre ordinateur
au moyen d'un cordon USB A mâle - USB B mâle.
 Cordon
USB A mâle - USB B mâle.
Combinaison
VID et PID :
Dans
le cadre de ce projet, nous utilisons
un driver de type
HID (Human
Interface Device) utilisé pour
tous les périphériques
de type souris
ou clavier
USB du commerce. L'avantage est sa simplicité
de mise en oeuvre car le périphérique
de type HID est
automatiquement reconnu par Windows
et
ne nécessite aucun driver exotique.
Tous
les périphériques USB
sont pourvus d'une combinaison unique
prenant la forme de deux
nombres.
Le premier nombre VID
identifie le
fabricant du produit,
ici Microchip et le second PID
représente l'identificateur
du produit.
Dans le cadre de ce projet nous avons
utilisé le VID
de Microchip librement disponible 1240
et comme PID
nous
avons pris arbitrairement la valeur
9.
N'oubliez pas que le PIC
et
le logiciel
sous Windows doivent
utiliser la même combinaison VID/PID.
Enumération :
Avant
que le PC ne puisse utiliser le périphérique
USB, il faut qu'il y ait eu ce que l'on
appelle une énumération.
La première étape de ce
processus se fait directement au coeur
du PIC18F4550. C'est par le biais de
résistances
de Pull-Up ou Pull-down
(internes au PIC) que le dit circuit signale
sa présence sur le bus USB.
En réaction à ce changement
d'état de la ligne de donnée,
le PC essaie par le biais d'un protocole
définit, de découvrir
quel périphérique a été
connecté au port USB. Au
delà des données classiques
telles que le VID et PID, le PIC18F4550
indique sa "classe", avec
le numéro de version, un nom,
etc... Le
PIC18F4550 se voit alors attribuer une
adresse USB,
ce qui permet au PC de le différentier
des autres appareils USB. Sur la base
des données obtenues, le PC
détermine le bon pilote
qu'il lui faut pour activer
et dialoguer avec
l'interface équipée du
PIC18F4550.
Interface
en mode de communication USB :
Hors
tension, retirez le cavalier SW2 de
manière à ne pas court-circuiter
les deux picots. Le mode de communication
USB est ainsi initialisé dès
la mise sous tension de la platine.

Connexion pour la
première fois de l'interface USB au PC :
La détection
du périphérique USB
s'effectue dès la toute première
connexion
de l'interface à votre PC.

Après
l'installation du pilote, l'interface
est
immédiatement fonctionnelle et vous pouvez désormais
utiliser le logiciel sous Windows pour
piloter votre interface.
Protocole
utilisé pour dialoguer avec l'interface
en mode USB :
Afin de piloter sélectivement
les entrées et sorties de l'interface, différentes commandes simples
d'utilisation ont été définies.
Dès
sa mise sous tension, l'interface
transmet au PC les données correspondantes
aux différents états logiques
présents sur les 16 entrées J1 et J2. L'interface
envoie également les données
issues du convertisseur analogique -
numérique 12 bits (CAN) des entrées
J5 et J6. A
titre indicatif, si le convertisseur 12 bits
n'a pas été placé
sur sont support de circuit intégré, les valeurs reçues
par le PC sont systématiquement 4096.
La
communication étant bidirectionnelle
entre l'interface et la PC, nous devons
considérer deux cas de figures
:
pour une communication de l'interface
(PIC) vers le PC, l'instruction
est
affectée aux cases mémoires
FBufferIn[1],
FBufferIn[2]
et
FBufferIn[3].
pour
une communication du PC vers l'interface
(PIC), l'instruction est affectée
aux cases mémoires FBufferOut[1],
FBufferOut[2]......
FBufferOut[21].
Nous
allons expliciter ci-dessous l'ensemble
de ces commandes...
Transfert
de données de l'interface (PIC)
vers le PC (transfert toutes les 5ms) :
8
entrées numériques J1
:
Le
PC reçoit deux octets : -
FBufferIn[1]
=
1
indique
que l'on a reçu l'octet présent
sur les 8 entrées de J1. - FBufferIn[2]
contient
l'octet (compris entre 0 et 255) présent
sur les 8 entrées de J1.
8
entrées numériques J2
:
Le
PC reçoit deux octets : -
FBufferIn[1]
=
2 indique
que l'on a reçu l'octet présent
sur les 8 entrées de J2. - FBufferIn[2]
contient
l'octet (compris entre 0 et 255) présent
sur les 8 entrées de J2.
Entrée
analogique J5 codée sur
12 bits :
Le
PC reçoit trois octets :
-
FBufferIn[1]
=
3 indique
que l'on a reçu deux octets du
convertisseur depuis l'entrée
J5. - FBufferIn[2]
contient
le LSB de la valeur numérisée
par le CAN sur l'entrée J5. - FBufferIn[3]
contient
le MSB de la valeur numérisée
par le CAN sur l'entrée J5. Pour
reconstituer la valeur numérisée
sur 12 bits,
il suffit d'appliquer la relation :
Valeur
sur 12 bits de J5 = (256 x FBufferIn[3]
)
+ FBufferIn[2]
Entrée
analogique J6 codée sur
12 bits :
Le
PC reçoit trois octets :
-
FBufferIn[1]
=
4 indique
que l'on a reçu deux octets du
convertisseur depuis l'entrée
J6. - FBufferIn[2]
contient
le LSB de la valeur numérisée
par le CAN sur l'entrée J6. - FBufferIn[3]
contient
le MSB de la valeur numérisée
par le CAN sur l'entrée J6. Pour
reconstituer la valeur numérisée
sur 12 bits,
il suffit d'appliquer la relation :
Valeur
sur 12 bits de J6 = (256 x FBufferIn[3]
)
+ FBufferIn[2]
Transfert
de données du PC vers l'interface
(PIC) :
Afficheur
LCD :
1ère
ligne du LCD :
On
affecte la valeur 1
à la case mémoire
FBufferOut[1]
=
1.
L'ensemble
des
N
caractères à afficher
sur le LCD sont placés dans
les différentes cases mémoires
de FBufferOut[2]
à
FBufferOut[N+1].
Avec N compris entre 1 et 20.
2ème
ligne du LCD :
On
affecte la valeur
2 à
la case mémoire
FBufferOut[1]
=
2.
L'ensemble
des
N
caractères à afficher
sur le LCD sont placés dans
les différentes cases mémoires
de FBufferOut[2]
à
FBufferOut[N+1].
Avec N compris entre 1 et 20.
3ème
ligne du LCD :
On
affecte la valeur
3 à
la case mémoire
FBufferOut[1]
=
3.
L'ensemble
des
N
caractères à afficher
sur le LCD sont placés dans
les différentes cases mémoires
de FBufferOut[2]
à
FBufferOut[N+1].
Avec N compris entre 1 et 20.
4ème
ligne du LCD :
On
affecte la valeur
4 à
la case mémoire
FBufferOut[1]
=
4.
L'ensemble
des
N
caractères à afficher
sur le LCD sont placés dans
les différentes cases mémoires
de FBufferOut[2]
à
FBufferOut[N+1].
Avec N compris entre 1 et 20.
Effacement
du LCD :
On
affecte la valeur
5 à
la case mémoire
FBufferOut[1]
=
5.
L'écran
du LCD est aussitôt effacé.
Sorties
PWM sur J7 :
On
affecte la valeur
6 à
la case mémoire
FBufferOut[1]
=
6.
La
valeur du rapport cyclique doit être
contenue dans la case mémoire
FBufferOut[2].
Exemples
: FBufferOut[2]
= 0
pour un rapport cyclique de 0% sur la
sortie J7.
FBufferOut[2]
= 255
pour un rapport cyclique de 100% sur
la sortie J7.
Sorties
PWM sur J8 :
On
affecte la valeur
7 à
la case mémoire
FBufferOut[1]
=
7.
La
valeur du rapport cyclique doit être
contenue dans la case mémoire
FBufferOut[2].
Exemples
: FBufferOut[2]
= 0
pour un rapport cyclique de 0% sur la
sortie J8.
FBufferOut[2]
= 255
pour un rapport cyclique de 100% sur
la sortie J8.
Sortie
numérique J3 :
On
affecte la valeur
8 à
la case mémoire
FBufferOut[1]
=
8. La
valeur de l'octet à appliquer sur les 8 sorties
de J3 est contenue dans la case
mémoire
FBufferOut[2].
Exemples
: FBufferOut[2]
= 0
les 8 sorties de J3 sont à l'état
bas. FBufferOut[2]
= 255
les 8 sorties de J3 sont à l'état
haut.
Sortie
numérique J4 :
On
affecte la valeur
9 à
la case mémoire
FBufferOut[1]
=
9. La
valeur de l'octet à appliquer sur les 8 sorties
de J4 est contenue dans la case
mémoire
FBufferOut[2].
Exemples
: FBufferOut[2]
= 0
les 8 sorties de J4 sont à l'état
bas. FBufferOut[2]
= 255
les 8 sorties de J4 sont à l'état
haut.
Sortie
numérique J9 :
On
affecte la valeur
10 à
la case mémoire
FBufferOut[1]
=
10. La
valeur de l'octet à appliquer sur les 8 sorties
de J9 est contenue dans la case
mémoire
FBufferOut[2].
Exemples
: FBufferOut[2]
= 0
les 8 sorties de J9 sont à l'état
bas. FBufferOut[2]
= 255
les 8 sorties de J9 sont à l'état
haut.
Sortie
numérique J10 :
On
affecte la valeur
11 à
la case mémoire
FBufferOut[1]
=
11. La
valeur de l'octet à appliquer sur les 8 sorties
de J10 est contenue dans la case
mémoire
FBufferOut[2].
Exemples
: FBufferOut[2]
= 0
les 8 sorties de J10 sont à l'état
bas. FBufferOut[2]
= 255
les 8 sorties de J10 sont à l'état
haut.
Sortie
numérique J11 :
On
affecte la valeur
12 à
la case mémoire
FBufferOut[1]
=
12. La
valeur de l'octet à appliquer sur les 8 sorties
de J11 est contenue dans la case
mémoire
FBufferOut[2].
Exemples
: FBufferOut[2]
= 0
les 8 sorties de J11 sont à l'état
bas. FBufferOut[2]
= 255
les 8 sorties de J11 sont à l'état
haut.
Sorties
numériques optionnelles complémentaires :
Le
connecteur
K4
de l'interface permet d'ajouter trois
autres PCF8574P
supplémentaires à l'interface.
Pour ce faire, vous devrez réaliser
une carte fille vous permettant l'ajout
de ces 3 nouveaux composants. Vous n'aurez
aucune difficulté à câbler
ces 3 nouveaux circuits en vous aidant
du schéma électrique de
l'interface. Le
câblage des entrées A0,
A1 et A2 des PCF8574P et la commande
de ces 3 nouveaux circuits s'effectuent en
utilisant les informations ci-après.

Le
premier PCF8574P est
câblé avec
les broches A2 = +5V et A1 = A0 = GND.
Le
contrôle de ce dernier par la
liaison USB s'effectue comme précédemment
mais en affectant la valeur
13 à
la case mémoire
FBufferOut[1]
=
13.
Le
second PCF8574P est câblé avec les broches A2 = +5V,
A1= GND et A0 = +5V. Le
contrôle de ce dernier par la
liaison USB s'effectue en affectant la
valeur
14 à
la case mémoire
FBufferOut[1]
=
14.
Le
troisième PCF8574P est câblé avec les broches A2 = +5V,
A1= GND et A0 = +5V. Le
contrôle de ce dernier par la
liaison USB s'effectue en affectant la
valeur
15 à
la case mémoire
FBufferOut[1]
=
15.
Désormais
l'interface universelle permet de gérer
un total de
64 sorties numériques
au lieu des 40 proposées par
défaut.
Logiciel et
son code source dédié
à la gestion de l'interface en
mode USB :
Afin
de piloter simplement l'interface USB via votre PC,
un petit programme
écrit sous Borland
Delphi (compatible
avec la version 5, 6 et 7 de Delphi)
est disponible en
libre
téléchargement. Ce dernier génère automatiquement
les
différentes instructions
présentées
ci-dessus.
Les
SE compatibles avec ce programme sont
: 8,
Seven,
Vista
et
XP. ll
n'a pas été testé
sous 2000, Me et 98SE.

Téléchargement du
soft compilé EXE : 484ko
L'ensemble
du code source de
ce programme est
librement téléchargeable
ci-après. Le code source est
commenté et vous n'aurez aucun
mal à l'adapter selon vos besoins.
Téléchargement de
l'ensemble des fichiers sources au format
Borland Delphi : 126ko
Téléchargement du code
source au format TEXTE : 22
ko
Les commandes sont extrêmement
simples à maitriser grâce
à l'usage d'une DLL
(Dynamic
Link Library)
spécifiquement dédiée
à la communication USB (mcHID.dll). N'oubliez
pas de placer cette DLL dans
le même répertoire que
votre programme exécutable.
Le fichier mcHID.dll est
disponible en téléchargement
avec le fichier exécutable (EXE)
depuis le lien précédent : "Téléchargement du soft compilé EXE". Sachez
pas ailleurs que cette DLL peut-être
utilisée avec d'autres logiciels
de développement, tels que Borland
C++, Visual Basic, Visual C++ et bien
d'autres encore...
|