Les Sorties du Port Parallele - Carte de Commande 8 Sorties

 

Je vais parler du port parallele du PC car je commence à m'y interesser. En effet, je dois realiser pour cette fin d'année 2000 un projet informatique, la note comptant pour le bac (je suis en terminale S). J'ai donc voulu faire une petite carte de commande par le port parallele, laquelle se bornant pour l'instant à 8 LEDs, mais pouvant être amplement améliorée.

1) La carte électronique

Il s'agit d'une simple carte amplifiant les signaux de l'ordinateur. Elle est composée tout d'abord d'une petite alim (diode + regulateur 7805 + condensateurs), prenant source dans un bloc d'alim simple. Elle alimente (tiens donc !) un octuple amplificateur de voie 74LS541. Lequel fournit assez de courant pour des LEDs. On relies sur ses 8 entrées les lignes D0 à D7 du port parallele. Et voilà, c'est aussi con que ça. Un signal à l'etat haut sur une ou plusieurs lignes du port se traduira par un signal à l'etat haut sur les sorties de l'ampli, aux lignes correspondantes (voies non inverseuses donc). Mais ce montage ne sufira pas si vous voulez par exemple commander des relais (dont la consommation excede souvent 100 mA, ce qui ne conviendrait pas au 74LS541). Dans ce dernier cas, vous devrez ajouter un etage d'amplification du signal, cette fois en utilisant octuple buffer, le ULN2803A (le ULN2003 possede 7 voies), composé de 8 transistors darlington. Ceux ci peuvent donc commander des charges de plus grande importance. Vous connecterez donc les sorties du 74LS541 aux entrées du ULN2803A. Attention, celui-ci devra être alimenté en +12V (et +5V pour le LS541), pour commander des relais de 12V (logique !). Les voies de ce buffer sont inverseuses donc un signal à l'etat haut en sortie du LS541 (donc du port) se traduira par un etat bas aux sorties correspondantes du buffer. Pensez donc à bien connectez vos relais (le pôle moins de chaque relais relié à la sortie du ULN correspondante, sans oublier de resistance de limitation de courant, pour ne pas surchauffer le buffer, lequel pourra se doter d'un dissipateur).

Je mets en ligne le typon que j'utilise pour la carte à 8 LEDs : carte_lpt.zip (50 Ko) : typon et implantation au format BMP (à redimensionner à 12%) et LYT (AresLite).

Voici le schema de principe : lpt_schema.zip (20Ko) : schema au format GIF et SCH (Protel98)

 

2) La commande logicielle

Plusieurs langages s'offrent à vous, mais pour ma part j'utilise TurboPascal (c'est le seul langage que l'on ai developpé durant l'année). Vous pouvez télécharger la version 7 à www.crackstore.com. Mais voyons d'abord la logique du port parallele.

O ne va s'occuper ici juste du registre de données. Ce registre a plusieurs adresses selon votre PC : j'utilise 888 (avec LPT1), mais il existe aussi 3BC, 378, 956, 278, etc... Essayez pour trouver le bon ! Chaque voie D0 à D7 possede une valeur propre :

Nom Valeur
D0 1
D1 2
D2 4
D3 8
D4 16
D5 32
D6 64
D7 128

Ces valeurs ont pour conséquence que si l'on additionne plusieurs valeurs, on obtiendra une seule combinaison possible de sortie. Par exemple, si l'on envoie la valeur 39 sur le port parallele, les lignes D5, D2, D1 et D0 car 39 = 32+4+2+1. Donc la valeur envoyée est comprise entre 0 et 255 (variable byte sous pascal). Si vous envoyez la valeur 39 au port, les lignes concernées resteront activées jusqu'à nouvel envoi. L'initialisation du port se fait par l'envoi de la valeur 0. Toutes les lignes seront activées pour la valeur 255.

Les lignes de données sont juste des lignes de sortie, donc on ne s'occupera juste que de l'écriture sur un port :

Ainsi, sous TurboPascal, j'utilise port[888]:=valeur; Si l'on veut faire une animation, on peut aussi regler les temps pour l'activation des sorties par la commande delay(temps_en_ms). Pour allumer les sorties D0 et D7 pendant 2 sec., on fera :

port[888]:=129;
delay(2000) ;
port[888]:=0;

D'où l'utilité de créer une procédure automatique (avec parametres valeur et temps) telle que :

procedure send(valeur:byte ; temps:longint); {valeur compris entre 0 et 255, et temps entre 0 et 65536}
Begin
  port[888]:=valeur; {dans le cas où l'adresse du registre de données est 888}
  delay(temps); {temps en ms}
End;

Il suffira alors de taper send(129,2000); send(0,1); pour allumer D7 et D0 pendant 2 sec et d'initialiser le port ensuite. Vous pourrez ensuite faire vos propres jeux de lumieres (je mettrai mon programme en ligne quand il sera fini), par le biais de boucles For et d'opérations recurrentes sur les valeurs de sortie (suites).


Si vous interessez au port parallele et que vous voudriez avoir de plus amples renseignements, allez sur le forum, ou alors ecrivez moi, ou encore achetez les numeros de Interfaces pour PC, publiés par electronique pratique. J'ai tiré les infos pour mlon projet et cette page du numero 1.