On utilise tout simplement des portes "oui" pouvant délivrer un courant relativement important (buffers). Chaque bit du port imprimante est donc relié à l'entrée de l'une de ces fameuses portes.
Vous vous demandez sûrement à quoi peuvent donc bien servir R1 et R2.
J'ai réalisé le montage et en le testant, j'ai constaté qu'il réagissait n'importe comment. R2 sert à consommer un petit courant, moins de 0.1mA (ce que supporte très bien le port imprimante) pour éliminer ces effets indésirables. J'ai consulté le schéma d'une imprimante et j'ai constaté que la même méthode était utilisée.
Quand au rôle de R1, c'est une sécurité pour le port; en effet, j'ai constaté que lorsque le circuit intégrè n'était plus alimenté, ses entrées consommaient plus de courant (quelques mA) sur le port ! J'ai donc mis en place R1 pour limiter lecourant tiré sur le port parrallèle à un tout petit peu plus de 1mA, ce que supporte sans broncher le port imprimante (je me sert souvent de mon interface et je n'ai jamais eu de problémes à ce niveau; certaines personnes disent même que le port peut débiter 5mA).
La sortie de la porte est relié à une led par l'intermédiaire de R3 (pour limiter le courant dans la DEL à 10mA), ce qui permet de visualiser l'état des sorties.
Ces sorties serviront à connecter d'éventuelles extensions; elles sont dites "sécurisées", car, grâce à R4, si les sorties sont court-circuitées, cela ne détruit pas IC1, mais occasionne juste pour lui un petit surcourant. Bien sûr le port imprimante "ne voit rien", le court-circuit mentionné plus haut n'a aucune influence sur lui; c'est le but recherché.
Schema électronique
Ci dessus je vous donne le shéma réel complet, avec les valeurs et les références des composants.
Pour les 8 portes oui (buffer) j'ai choisi le classique 74 HC 541. Les deux entrées de validations (broche 1 et 19) sont reliées à la masse, car l'interface doit suivre constament l'état du port imprimante. Comme tout circuit logique, le 74 HC 541 réclame une alimentation 5V stable; le régulateur 7805 convient parfaitement ici;il vous suffira alors de connecter une source continue, stabilisée ou non, de tension comprise entre 6 et 15 volts à l'entrée de ce régulateur pour alimenter l'interfac.
Le condensateur C1 sert à découpler l'alimentation du régulateur.
N'utilisez pas le +5V disponible sur le port imprimante, cette source ne peut débiter un courant suffisant. (8 leds allumées = 80mA + le courant réclamé par les sorties "sécurisées"...).
Pour connecter l'interface au port imprimante, j'ai opté pour une embase de type Centronics, Femelle, 36 broches, ce qui vous permettera d'utiliser exactement le même cable pour relier l'interface au PC que ceux utilisés pour y brancher les imprimantes.
A ce propos, si vous utilisez souvent l'interface et souvent votre tandem imprimante scanner, je vous conseille d'acquerir un commutateur MECANIQUE. Pourquoi mécanique ? Cela coute moins cher et soutout ça fonctionne (en effet, les models automatiques essayent de comprendre ce qui ce passe, et étant donné que l'interface n'utilise pas les signaux de contrôles (strobe & cie), vous risquez d'avoir des surprises...).
Quand au connecteur 'extension', à vous de choisir ce qui vous convient le mieux; mais il est évident qu'il faut un connecteur disposant auminimum de 9 broches (ou 10 broches si vous voulez profiter du +5V de l'alimentation de l'interface) :-).
Schéma de réalisation sur veroboard
Tout a été dit précédement, je me contenterais donc de faire quelques remarques.
Le montage est simple et ne necessite aucun réglage, mais comporte de nombreuses soudures très rapprochées; aussi il est préférable de se munir d'un fer à souder munit d'une pointe très fine.
Bien sûr, on commencera par enlever le cuivre sur les pastilles colorées en vert, à l'aide d'un foret d'environ 5mm de diamétre, que l'on tournera à la main.
Ensuite, on procédera par la mise en place des 5 straps (fils), puis du support sur lequel sera monté IC1. Il vaut mieux utiliser un support pour de nombreuses raisons : cela évite à IC1 à avoir à supporter la chaleur du fer à souder, et permet un remplacement ou une récupération aisée de IC1. On terminera par les résistances, C1 et le régulateur. Quand à la position de ce dernier, la semelle en métal est représentée ci-dessus par une bande bleue.
Les Dels seront fixées soit directement sur la face avant, soit sur une petite bande de véroboard à part.
En ce qui concerne l'embase Centronics, son brochage est ci-dessus; on remarquera que les numéros des pattes 1, 18, 19 et 36 de cette embase sont sérigraphiés sur elle, ainsi il ne peut y avoir aucune ambiguité par rapport à son brochage.
Je n'ai rien dis à propos de l'alimentation qui doit être comprise entre 6V et 15V ?
Eh bien, voyez le titre de la prochaine partie... :-)
Alimentation de l'interface
Le régulateur utilisé nous simplifie bien la vie !En effet, il nous sufit juste de trouver une source dont la tension peut varier de 6V à 15V sans problémes pour un courant réclamé allant de 0 à 200 mA dans le pire des cas.
A propos du régulateur, il vaut mieux lui adjoindre un petit radiateur, par exemple une plaque en aluminium de dimensions 30mm*20mm, épaisseur 3mm ou 5mm. Si vous tenez à 'tirer du +5V' depuis le connecteur extension, sachez que le 7805 ne peut débiter plus de 1A, qu'il n'apprécie pas spécialement les court-circuits, et je vous conseille vivement de mettre un radiateur plus gros. Si vous n'êtes pas convaincu de l'utilitédu radiateur, calculez la puissance dissipée par le régulateur :
P = (Ualim - 5) * Idébité
Ensuite, prenez une résistance de 100 Ohms et appliquez lui une tension telle qu'elle dissipe la même puissance que ce que vous venez de calculer pour le régulateur. Attendez 2 minutes et touchez la résistance (si elle n'est pas encorela proie des flammes...).
Je le redis, c'est important, on ne peut pas utiliser les +5V disponibles sur le port Imprimante.
On peut envisager une alimentation avec des piles, c'est d'ailleurs ce que nous ferons lors des premiers test.Mais là, je vous conseille de ne pas utiliser de pile 9V (autonomie trop faible, coût élevé) mais plutôt 2 piles plates de 4,5V mises en série.
Une solution plus élégante consite à alimenter le montage avec un bloc secteur style prise de courant, ou mieux, par une petite alim classique (transpho + pont de diodes + condensateur) intégrée dans le boîtier de l'interface. Je vous en donne le schéma :
Le DOUBLE interrupteur apporte une sécurité supplémentaire puisque à l'arrêt, le montage est totalement coupé du secteur.
On choisira un fusible de type "rapide".
Bien sûr, avec l'alimentation secteur, le montage pert son autonomie, mais en général, là ou il y a un ordinateur, il y a une prise de courant :->).
On pourra aussi penser à rajouter une DEL pour montrer que le montage est sous tension. On alimentera la DEL à partir des 5V disponibles sur le régulateur pour éviter que sa luminosité baisse en fonction du courant réclamépar le reste du montage (à cause de l'indésirable résistance interne de l'alimentation). Si vous aimez la frime, prennez une DEL clignotante ou bien de couleur bleue. Il faudra prendre cette DEL supplémentaire d'une couleur différente de celle utilisée pour les 8 autres DELs, afin de ne pas s'embrouiller pour peu que l'interface soit éloignée.
Si vous utilisez une alimentation maison (transpho + pont de diodes + condensateur), pour des raisons de sécurité, ne réalisez pas votre montage dans un boîtier en métal.
Dérnière remarque: si vous utilisez des piles ou un 'bloc secteur' pour alimenter l'interface, une diode de protection contre les inversions de polarités est la bienvenue. Voici un petit schéma pour vous indiquer où placer cette diode de protection :
La procédure de test
On va d'abord tester l'interface avec des piles; donc si vous avez opté pour une alimentation secteur, ne la connectez pas tout de suite.Puisqu'on en parle, je vous indique maintenant comment tester votre alimentation secteur :
* Après avoir scrupuleusement vérifié vos branchements, reliez votre alim au secteur. Le transpho peut émettre un léger ronflement grave, du à la vibration de ses tôles à la fréquence du secteur.
* Mesurez alors la tension de sortie de votre alim à vide, c'est à dire lorsqu'elle ne débite aucun courant.Cette tension doit être inférieure ou égale à 15V (c'est pour cela que je vous recommande de ne pas employer un transpho dont la tension indiquée pour le secondaire dépasse 12V; en effet, à vide, cette alim "surgonfle" sa tension de sortie).
* Maintenant il faut mesurer la tension à "plein régime"; pour cela, on charge l'alimentation de manière à ce qu'elle débite à peu près 200 mA. On y arrive en connectant une résistance à la sortie; en mesurant le courant on vérifie la présence d'à peu près 200mA, sinon, on modifie la résistance. ATTENTION! La résistance chauffe! Il faut prendre un model 10W ou à défault, ne pas laisser le courant passer dedans trop longtemps. Mesurez alors la tension de sortie de votre alim, elle doit être supérieure ou égale à 6V.
On peut procéder de même pour vérifier si un bloc secteur acheté dans le commerce convient.
Voici comment tester votre interface.
* 1er test:
Ce test a pour but de vérifier les soudures et si le "jus" arrive correctement à IC1. CE TEST SE FERA AVEC IC1 RETIRE DE SON SUPPORT.
Il faut alors alimenter l'interface privée de IC1, mais pas avec votre alim si vous en avez fait une, ni avec un bloc secteur acheté dans le commerce.
Il faut réaliser le petit circuit ci contre:
La résistance de 10 Ohms sert à limiter le courant en cas de cours-jus. Si vous n'avez pas 3 piles de 4,5 V sousla main, utilisez en une de 9 V. J'ai dit TROIS piles de 4,5 V ? En effet, dans les prochains tests nous allons avoir besoin d'une autre pile de 4,5V pour simuler le port imprimante.
Voici la procédure de test proprement dite:
Remarque: aucune des 8 DELs n'est sencée s'illuminer, même faiblement.Pour faire les mesures de tensions, reliez l'entrée "-" de votre voltmetre au "-" de l'alimentation.
Mesurez les tensions, sur le support de IC1, correspondant aux pattes 1, 10 et 19; il doit y avoir 0 V.
Puis mesurez la tension sur la patte 20; il doit y avoir à peu de choses près 5 V.
Mesurez les tensions sur les pattes 2, 3, ..., 9; il doit y avoir aussi 0 V.
Mesurez enfin les tensions sur les pattes 11, 12, ..., 18; il doit y avoir encore 0 V.
Si à un moment il y a une erreur, vérifiez vos soudures à la loupe, vérifiez aussi si vous n'avez pas coupé le veroboard au mauvais endroits ou si vous n'avez pas mal positionné des composants.
Ne faites pas le test suivant avant que celui-ci n'ai réussi.
* 2éme test:
Maintenant, vous pouvez mettre IC1 sur son support, APRES AVOIR DECONNECTE L'ALIMENTATION. On se sert toujours de l'alimentation précedente avec les piles et la résistance de 10 Ohms pour ce 2éme test.
Là, on va avoir besoin de la 3éme pile de 4,5 V dont j'ai parlé plus haut. Elle va servir à simuler le port imprimante et sera utilisée conjointement avec un milli-Ampéremetre pour vérifier que le montage ne "tire" pas de courant exessif sur le port.
Voici (encore) un petit circuit à réaliser:
Voici la procédure de test :
Si ce n'est pas déjà fait, mettrez IC1 sur son support, APRES AVOIR DECONNECTE L'ALIMENTATION.
Reconnectez l'alimentation. Aucune des 8 DELs ne doit s'allumer.
Connectez la borne "-" de la pile du "simulateur de port Imprimante" au "-" de l'alimentation.
Avec la "pointe de touche", touchez successivement chacune des 8 broches de l'embase Centronics correspondants aux bits D0...D7. La DEL correspondante doit s'allumer; le courant qu'affiche le milli-ampéremétre doit être compris entre 0.05 mA et 0.5 mA.
Maintenant, coupez l'alimentation, et connectez la borne "-" de la pile du "simulateur de port Imprimante" au "-" prévu pour brancher l'alimentation.
Recommencez le test avec la pointe de touche; evidement, les DELs ne doivent pas s'allumer; le courant affiché par le milli-ampéremétre ne doit pas dépasser 1.5 mA.
Enfin, regardez à la loupe votre connecteur Centronics afin de vérifier si une projection de soudure ne court-circuite pas des broches non utilisées.
Là aussi, si à un moment il y a une erreur, vérifiez vos soudures à la loupe, vérifiez aussi si vous n'avez pas coupé le veroboard au mauvais endroits ou si vous n'avez pas mal positionné des composants.
Ne faites pas le test suivant avant que celui-ci n'ai réussi.
* 3éme test:
Reliez maintenant votre alimentation (après l'avoir testé), votre bloc secteur ou vos piles à l'interface.
Mettez le montage sous tension, et refaites rapidement le 2éme test pour vérifier que tout se passe bien.
Si c'est le cas, vous pouvez relier votre interface à l'ordinateur. Si vous avez encore des doutes, même si ils ont toutes les chances d'êtres infondés, utilisez un vieux PC.
Vous êtes maintenant impatient de la voir fonctionner, votre interface ?
La prochaine partie va vous combler !
Commande de l'interface avec l'ordinateur
Je vous indique comment commander votre interface, avec les langages les plus courants.Si vous ne savez pas programmer, c'est l'occasion de vous y mettre (vous trouverez ça passionnant !); je vous conseille de commencer avec QBasic, livré gratos avec le DOS et Win95.
HEY! JE RIGOLE ! Je ne vous force pas à devenir programmeur ! Si vous n'avez pas envie de programmer, vous pouvez télécharger plusieurs logiciels pour commander l'interface.
Ce logiciel vous permet de commander directement l'interface ou de programmer des séquences d'octet à envoyer : wininter2.zip.
Remarque : pour utiliser les logiciels sous windows, consulter la procédure d'installation. Vous aurez peut-être à télécharger un pack de dll. La "procédure d'installation" est très simple.
Remarque : les programmes pour DOS et pour Windows que je vous ai précédement proposé de télécharger fonctionnent pour les P.C. dont le port est adressé en &H378. C'est le cas de l'écrasante majorité des P.C. actuels. Aussi, si ce n'est pas le cas, voici comment modifier le programme DOS :
Il vous faut modifier la constante Port%; pour cela, regardez les messages affichés au démarrage de votre P.C. ou bien exécutez MSD.EXE (logiciel DOS) pour connaître l'adresse du port parallèle sur lequel vous désirez connecter l'interface.
Si cette adresse est différente de &H378, vous devez modifier le programme. Ouvrez-le avec QBasic; alors remplacez la ligne :
CONST Port% = &H378
par la ligne :
CONST Port% = &Hxxx
ou 'xxx' est l'adresse du port parallèle utilisé.
Ce qui va suivre concerne les personnes qui veulent programmer pour commander leur interface.
J'enchaîne par une remarque: l'interface n'utilise pas les signaux de contrôles (strobe & cie...); donc IL NE FAUT PAS utiliser des instructions prévues pour commander des imprimantes, a moins que vous soyezsado maso et que vous trouvez que Win95 ne plante pas assez souvent :-).
Avant de commencer à taper la moindre ligne de code, définissez une constante ADRSPORT% et donnez-lui la valeur de l'adresse du port sur lequel sera branché l'interface.
Pour connaître l'adresse de ce port, executez l'utilitaire DOS "MSD.EXE".
La valeur à envoyer sur le port est un entier dont la valeur est comprise entre 0 et 255, vous le savez, c'estun octet. Voici quelques exemples:
En Basic, tapez "OUT(ADRSPORT%), Valeur"
En QuickBasic, tapez "OUT ADRSPORT%,Valeur"
En Borland C++, tapez "OUTPORT(ADRSPORT%,Valeur)"
En Turbo Pascal, tapez "PORT(ADRSPORT%):=Valeur)"
Et pour le Visual Basic, :
On arrive à ce but tant désiré par les éléctro-informaticiens en ayant recours à des DLL, qui contiennent un certain nombre de fonctions. Il fautdéclarer ces fonctions dans la partie "général" (là ou on déclare les variables globales) du code du module où l'on désire utiliser le port parallèle.
Normalement, la solution exposée ici permet de créer des logiciels qui ne fonctionneront que sous windows 3.11, 95 et 98.Mais une solution existe pour les utilisateurs de windows NT, 2000 et XP. Il s'agit du logiciel PORTTALK. Cliquez sur le lien pour télécharger cet utilitaire avec les explications en français. Page officielle de porttalk :
http://www.beyondlogic.org/porttalk/porttalk.htm
Les DLL que j'utilise ne sont pas livrées avec Windows.Elle ont étè écrites par quelqu'un qui a décidé de distrubuer ces DLL gratuitement (DLL freewares !).D'ailleurs, c'est pour cela que l'on trouve ces DLL sur les disquettes et CD-ROM de la revueElectronique Pratique.
Voici un code source qui montre comment utiliser les différentes broches du port parrallèle : (utilisez le copier/coller !)
'CODE A METTRE DANS LA PARTIE DECLARATION
Dim ADR_C As Integer 'Registre de contrôle (sorties)
Dim ADR_D As Integer 'Registre de données (sorties)
Dim ADR_E As Integer 'Registre d'état (entrées)
'!!! LAISSEZ LES DEUX INSTRUCTIONS SUIVANTES UNIQUEMENT SI VOUS UTILISEZ Visual Basic 3.0 :
Declare Function INP Lib "inpout16.Dll" Alias "Inp16" (ByVal PortAddress As Integer) As Integer
Declare Sub OUT Lib "inpout16.Dll" Alias "Out16" (ByVal PortAddress As Integer, ByVal Value As Integer)
'!!! LAISSEZ LES DEUX INSTRUCTIONS SUIVANTES UNIQUEMENT SI VOUS UTILISEZ Visual Basic 4.0 ou supérieur :
Private Declare Function INP Lib "inpout32.Dll" Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Private Declare Sub OUT Lib "inpout32.Dll" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)
'CODE A METTRE DANS FORM_LOAD :
Dim AdresseDuPort As String
'Mettez ici l'adresse du port utilisé (indiquée par le BIOS) :
AdresseDuPort = "&H378"
Select Case AdresseDuPort
Case "&H3BC"
ADR_C = 958
ADR_D = 956
ADR_E = 957
Case "&H378"
ADR_C = 890
ADR_D = 888
ADR_E = 889
Case "&H278"
ADR_C = 634
ADR_D = 632
ADR_E = 633
End select
'EXEMPLE D'UTILISATION; CODE A PLACER OU VOUS VOULEZ (PAR EXEMPLE DANS LA PROCEDURE "CLICK" D'UN BOUTON)
Dim octet As Integer
Dim C_Strobe As Integer
Dim C_Auto As Integer
Dim C_Init As Integer
Dim C_SelectIn As Integer
Dim E_Error As Integer
Dim E_Select As Integer
Dim E_Pout As Integer
Dim E_Ack As Integer
Dim E_Busy As Integer
Dim Message As String
'Ecriture d'un octet vers le registre de données : octet doit être compris entre 0 (inclus) et 255 (inclus)
octet = 177
OUT ADR_D, octet
'Dans ce qui suit, "Logique inversée" signifie que 1 équivaut à 0V et 0 équivaut à +5V.
'Ecriture vers le registre de contrôle (1 ou 0 pour chaque bit) :
C_Strobe = 1 'Logique inversée
C_Auto = 1 'Logique inversée
C_Init = 0
C_SelectIn = 1 'Logique inversée
OUT ADR_C, C_Strobe + 2 * C_Auto + 4 * C_Init + 8 * C_SelectIn
'Lecture du registre d'état :
octet = INP(ADR_E)
E_Error = 0
E_Select = 0
E_Pout = 0
E_Ack = 0
E_Busy = 0
If (octet And 8) > 0 Then E_Error = 1
If (octet And 16) > 0 Then E_Select = 1
If (octet And 32) > 0 Then E_Pout = 1
If (octet And 64) > 0 Then E_Ack = 1
If (octet And 128) > 0 Then E_Busy = 1
Message = "ETAT DES ENTREES :" + chr$(13)
Message = Message + "ERROR : " + Format$(E_Error) + chr$(13)
Message = Message + "SELECT : " + Format$(E_Select) + chr$(13)
Message = Message + "PAPER OUT : " + Format$(E_Pout) + chr$(13)
Message = Message + "ACKNOWLEDGE : " + Format$(E_Ack) + chr$(13)
Message = Message + "BUSY (Logique inversée) : " + Format$(E_Busy)
Msgbox Message
Si vous utilisez cette instruction pour commanderl'allumage de 8 leds, vous aimeriez sûrement savoir quellevaleur doit avoir "octet" pour allumer la diode n�2 et la n�5 par exemple.
Je vais vous expliquer.
D'abord, "octet" est un octet, c'est à dire un nombreallant de 0 à 255, codé à l'aide de 8 bits. Un bit est un nombre qui ne peut prendre que 2 valeurs :0 ou 1. Dans votre P.C., tout est exprimé en bits. Les bits égaux à 1 correspondent à du +5V, et les bits nulscorrespondent à du 0V (sauf dans le cas de la logique inversée, où c'est ... l'inverse !).
Alors, voici comment on code la valeur d'un octetavec 8 bits :
Soit B1, B2, ..., B8 les huits bits utilisés.
On dit alors que la valeur de l'octet =B1 + B2*2 + B3*4 + B4*8 + B5*16 + B6*32 + B7*64 + B8*128
En supposant que pour chaque bit B1, B2, ... B8corresponds une diode D1, D2, ... D8, si vous voulez allumer les diodes D2 et D5, il faut que les bits B2 et B5 soientégaux à 1 et que les autres bits soient nuls ; donc il faut envoyer comme valeurde octet = 0 + 1*2 + 0*4 + 0*8 + 1*16 + 0*32 + 0*64 + 0*128 = 1*2 + 1*16 = 18
Pour allumer la diode n�2 et la diode n�5, il faut doncremplacer la valeur 117 de l'exemple par 18.
'CODE A METTRE DANS LA PARTIE DECLARATION
Dim ADR_C As Integer 'Registre de contrôle (sorties)
Dim ADR_D As Integer 'Registre de données (sorties)
Dim ADR_E As Integer 'Registre d'état (entrées)
'!!! LAISSEZ LES DEUX INSTRUCTIONS SUIVANTES UNIQUEMENT SI VOUS UTILISEZ Visual Basic 3.0 :
Declare Function INP Lib "inpout16.Dll" Alias "Inp16" (ByVal PortAddress As Integer) As Integer
Declare Sub OUT Lib "inpout16.Dll" Alias "Out16" (ByVal PortAddress As Integer, ByVal Value As Integer)
'!!! LAISSEZ LES DEUX INSTRUCTIONS SUIVANTES UNIQUEMENT SI VOUS UTILISEZ Visual Basic 4.0 ou supérieur :
Private Declare Function INP Lib "inpout32.Dll" Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Private Declare Sub OUT Lib "inpout32.Dll" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)
'CODE A METTRE DANS FORM_LOAD :
Dim AdresseDuPort As String
'Mettez ici l'adresse du port utilisé (indiquée par le BIOS) :
AdresseDuPort = "&H378"
Select Case AdresseDuPort
Case "&H3BC"
ADR_C = 958
ADR_D = 956
ADR_E = 957
Case "&H378"
ADR_C = 890
ADR_D = 888
ADR_E = 889
Case "&H278"
ADR_C = 634
ADR_D = 632
ADR_E = 633
End select
'EXEMPLE D'UTILISATION; CODE A PLACER OU VOUS VOULEZ (PAR EXEMPLE DANS LA PROCEDURE "CLICK" D'UN BOUTON)
Dim octet As Integer
Dim C_Strobe As Integer
Dim C_Auto As Integer
Dim C_Init As Integer
Dim C_SelectIn As Integer
Dim E_Error As Integer
Dim E_Select As Integer
Dim E_Pout As Integer
Dim E_Ack As Integer
Dim E_Busy As Integer
Dim Message As String
'Ecriture d'un octet vers le registre de données : octet doit être compris entre 0 (inclus) et 255 (inclus)
octet = 177
OUT ADR_D, octet
'Dans ce qui suit, "Logique inversée" signifie que 1 équivaut à 0V et 0 équivaut à +5V.
'Ecriture vers le registre de contrôle (1 ou 0 pour chaque bit) :
C_Strobe = 1 'Logique inversée
C_Auto = 1 'Logique inversée
C_Init = 0
C_SelectIn = 1 'Logique inversée
OUT ADR_C, C_Strobe + 2 * C_Auto + 4 * C_Init + 8 * C_SelectIn
'Lecture du registre d'état :
octet = INP(ADR_E)
E_Error = 0
E_Select = 0
E_Pout = 0
E_Ack = 0
E_Busy = 0
If (octet And 8) > 0 Then E_Error = 1
If (octet And 16) > 0 Then E_Select = 1
If (octet And 32) > 0 Then E_Pout = 1
If (octet And 64) > 0 Then E_Ack = 1
If (octet And 128) > 0 Then E_Busy = 1
Message = "ETAT DES ENTREES :" + chr$(13)
Message = Message + "ERROR : " + Format$(E_Error) + chr$(13)
Message = Message + "SELECT : " + Format$(E_Select) + chr$(13)
Message = Message + "PAPER OUT : " + Format$(E_Pout) + chr$(13)
Message = Message + "ACKNOWLEDGE : " + Format$(E_Ack) + chr$(13)
Message = Message + "BUSY (Logique inversée) : " + Format$(E_Busy)
Msgbox Message
Si vous utilisez cette instruction pour commanderl'allumage de 8 leds, vous aimeriez sûrement savoir quellevaleur doit avoir "octet" pour allumer la diode n�2 et la n�5 par exemple.
Je vais vous expliquer.
D'abord, "octet" est un octet, c'est à dire un nombreallant de 0 à 255, codé à l'aide de 8 bits. Un bit est un nombre qui ne peut prendre que 2 valeurs :0 ou 1. Dans votre P.C., tout est exprimé en bits. Les bits égaux à 1 correspondent à du +5V, et les bits nulscorrespondent à du 0V (sauf dans le cas de la logique inversée, où c'est ... l'inverse !).
Alors, voici comment on code la valeur d'un octetavec 8 bits :
Soit B1, B2, ..., B8 les huits bits utilisés.
On dit alors que la valeur de l'octet =B1 + B2*2 + B3*4 + B4*8 + B5*16 + B6*32 + B7*64 + B8*128
En supposant que pour chaque bit B1, B2, ... B8corresponds une diode D1, D2, ... D8, si vous voulez allumer les diodes D2 et D5, il faut que les bits B2 et B5 soientégaux à 1 et que les autres bits soient nuls ; donc il faut envoyer comme valeurde octet = 0 + 1*2 + 0*4 + 0*8 + 1*16 + 0*32 + 0*64 + 0*128 = 1*2 + 1*16 = 18
Pour allumer la diode n�2 et la diode n�5, il faut doncremplacer la valeur 117 de l'exemple par 18.
Maintenant, vous avez de quoi vous amuser un peu plus avec votre micro!
Au bout d'un moment, vous allez vous demander "A quoi d'intelligent peut donc bien servir ce truc que Rémym'a fait fabriquer ?"
Réponse: à rien.
Mais non! rassurez vous; dans la prochaine et dernière partie je vous explique comment faire pour utiliser votre interface.
Extensions envisageables
L'interface dispose d'un connecteur extension, et je vais vous donner des idées pour vous en servir.1ére solution :
Vous êtes électronicien, amateur ou pro, et vous affectionner particulièrement les montages utilisant des circuits logiques ? Et bien, servez-vous de l'interface pour piloter et tester vos montages; en effet, étant alimenté en +5V, les sorties du connecteur extension de l'interface sont compatibles TTL et CMOS; maisleur sortances, du fait de la présence des résistances R4, est un peu réduite (mais ce n'est pas une bonne raison pour supprimer ces résistances, qui limitent les conséquences d'un court-circuit).
2éme solution :
Les relais. A condition de ne pas avoir besoin d'une fréquence de commutation élevée, c'est la solution idéale.
En effet, avec les relais, vous pouvez commander tout ce que vous voulez; par exemple des moteur, votre machine à laver, des rayons lasers braqués sur des ovnis ou votre voisin, commuter les entrées son de votre chaîne HiFi... Bref, laissez libre court à votre imagination pour employer les 8 relais disponibles.
Je vous donne le petit schéma pour commander des relais avec votre interface:
La diode "de roue libre" 1N4001 est indispensable pour ne pas détruire le transistor.
Pour l'alimentation des relais, vous pouvez utiliser le +5 V disponible sur le connecteur extension; mais le courant total consommé par les 8 relais ne devra pas excéder 500 mA, et vous devrez munir le régulateur d'un radiateur conséquent, et choisir une alim capable de débiter 200 mA + le courant total demandé par les relais.
Là, il vaut mieux abandonner les piles...
Vous pouvez aussi utiliser un réseau darlignton sous forme de CI à la place des 2N2222, et certains comme le célèbre ULN 2803 sont déjà munis de diodes de roue libre. Je vous donne le brochage du ULN 2803 :
3éme solution :
L'utilisation de triacs (ou de transistors de puissance), pour la commande rapide de lampes notament.
C'est une solution interessante; en effet, avec l'avénement du MP3, on peut imaginer un programme qui lit des sons MP3 et qui allume en conséquence des spots reliés à l'interface, un genre de "PC disco fever" :-). Là, un impératif: isolation optique.
En effet, IL NE DOIT Y AVOIR AUCUN CONTACT ÉLECTRIQUE entre l'interface et le circuit de puissance. Je n'ai pas encore réalisé de montages employant des triacs, donc je ne vous donne pas de schéma.
4éme solution :
Le CNA. Pour commander très précisement une tension allant de 0 à 5V avec l'interface.
Si vous utilisez un CNA à résistances, tenez compte des résistances R4!
Mais le mieux, c'est d'employer un circuit intégré réalisant la fonction CNA; la précision sera au rendez-vous.
Je ne vous donne pas de schéma ici non plus, car il y a de nombreux CI qui font CNA, et le schéma est différent pour chaque. Expliquez votre cas au revendeur et demandez-lui la notice technique du CI ou bienconsultez un "Mémothec électronique".
5éme solution :
Une combinaison des autres!
Par exemple, 3 sorties à relais, et un CNA à 5 bits...
Laissez libre cours à votre imagination... sans oublier les précautions à prendre.
6éme solution :
Utiliser l'interface comme périphérique visuel pour compléter votre moniteur.
Par exemple, pour peu que les 8 DELs soient alignées, utiliser l'interface comme un baragraphe indiquant l'espace de libre sur une disquette; ou bien avertir qu'une tâche de fonds est finie...
On peut aussi imaginer un programme qui espione une adresse mémoire et recopie à intervales réguliers sont contenu sur le port imprimante.
Enfin, pour un cours, expliquer de manière visuelle ce qu'est un octet aux élèves.
Bien sûr, cette solution n'emploie pas le connecteur extension, mais peut rendre des services.
Aucun commentaire:
Enregistrer un commentaire