Autour du PC

Chevaux de Troie

Electronique

Trucs et astuces

Sécurité

 

CSS Valide !

Site optimisé en 1024x768



 

Réalisation d'une interface parallèle

 composan.jpg (19190 octets)

 Nous allons dans ce chapitre nous interesser au port parallèle de façon plus concrète, utile, voir amusante.La réalisation décrite ci-dessous met en evidence la simplicité de la création et de la programmation d'une carte electronique pilotée par le PC. C'est plus ou moins le principe des automates dans l'industrie, permettant d'automatiser le mouvement d'outils pour la fabrication.
Presentation : Dans un premier temps, la carte permettra la visualisation des signaux écris sur le port parallèle par l'intermediaire de lignes de commande appellées programme.L'interface sera composé de huit sorties programmables.

Schéma de principe :
Ce montage a été publié sur le fabuleux mais regretté journal "Generation Electronique". Mais comme beaucoup de revues interressantes celle-ci à disparue des étalages.

carte.jpg (52036 octets) Le montage utilise les signaux DO à D7.L'ètat des données de sortie est visualisé grâce aux huit LEDs.
CI 1 joue le rôle d'octuple bascule afin de vérouillé les sorties au moment du passage à zero du STROBE, le transistor T permet sa mise à zero.
CI 2 pemet l'isolation et la connection des signaux. Il est equipé d'un commutateur permettant lors de l'ecriture d'un programme de verifier le fonctionnement de celui-ci sur les LEDs sans pour autant ecrire les données sur le port.
Les lignes Busy, Ack, Paper et Select forment les quatres entrées de l'interface.
L'alimentation du montage se fait via une alimenation de 5V stabilisée.

Le typon est à l'echelle 1 et au format JPG il peut être télécharger  ICI .

Allons, allons, certains n'ose pas franchir le pas concernant la conception de circuits imprimés, c'est pourtant simple et peu couteux. Les méthodes sont nombreuse, j'en ai experimenté pas mal de la plus basique à celle qui me convient le mieux tout en gardant un oeil sur le portefeuille.Je consacrerai une pages pour la réalisation de circuits imprimés plus tard.

implan1.jpg (59401 octets) Liste des composants :
R1 à R8 : résistances 820 ohms
R9 à R11 : résistances 12Ko
D1 à D8 : Leds rouges
T : Transistor 2N2222A
CI 1 : Circuit Intégré 74HCT573
CI 2 : Circuit Intégré 74LS245

C1 Connecteur à souder DB25 mâle coudé
C2 Voir text ci-dessous
C3 Borne à vis à souder

1 inverseur coudé à souder

Certains diront que ce montage est compliqué et qu'il existe plus simple.Certes, mais je me suis amusé à le réaliser, le fonctionnement à été immediat et il est toujours operationnel.
Personnelement, je n'ai pas utilisé le connecteur C2 qui en fait servira au raccordement de la platine "relais", j'ai fait une connection avec un morceau de câble en nappe soudé sur le circuit. Le resultat reste d'un aspect baclé (tout comme l'ensemble du montage d'ailleurs), mais à l'epoque tout ceci etait pour moi experimental et   provisoir, c'est du "juste pour voir si ca marche", et je crois que le provisoir dur encore.
Je conseil d'utiliser des support pour les deux circuits intégrés, en cas de problèmes, il est delicat de dessouder un CI.
Bon...Voici la bestiole (c'est un peu le chantier, faudrai que ce soit fignolé, mais bon ca marche).
Cliquer pour agrandir les photos.

automini.jpg (27027 octets) J'ai utilisé comme boitier une caisse de moniteur de surveillance video.En facade, trois inters:un pour l'alimentation générale,un autre pour l'alimentation des platines et le troisieme pour passer de "local" à "externe".J'ai choisi de cablé les leds en façade ainsi qu'un voyant de mise sous tension.
Pour toute connectique externe j'ai pris ce qui me tombait sous la main en utilisant un gros connecteur multipoint car le nombre de fils à cabler est important.
topmini.jpg (31044 octets) openmini.jpg (30853 octets) On enleve le capot...Oups !! (le depannage se fera au coupe-coupe).
On peut distinguer en haut de la photo la platine de relais.Y'en a huit, leur contact respectif est cablé sur le gros connecteur de facade, sans alimentation.
Il est conseillé d'utilisé une alimentation pouvant subvenir à l'alimentation des platines aux repos, puis l'allumage de 16 Leds (8 locales, 8 externes), et surtout des 8 relais qui dans certains cas pourront etre alimentés ensembles.J'ai utiliser une vieille alim de commodor 64 delivrant 2,5A sous 5V.
plugmini.jpg (28369 octets) borniermini.jpg (27702 octets) Pour automatiser des organes externes, j'utilise un bornier classique de tableau electrique.
Tout est disponible dessus, le contacts des relais, deux sources d'alimentation 5 et 12 V et la gestion de 4 entrées logiques en acquisition sur une petite carte à l'interieur du boitier.
Le bornier est branché au boitier via un connecteur trés discret .

Code de programmation :
Aprés la présentation du materiel il convient de pouvoir piloter ce montage et de le faire travailler comme bon nous semble.
J'ai choisi là encore, du code issue du logiciel de developpement Delphi.
Pour programmer cette carte en sortie, on agit directement sur le registre Lignes de sorties .De part le fonctionnement du 74HCT573 il convient de solicité le STROBE au niveau haut puis au niveau bas.Il convient aussi de bien verifier et de notifier l'adresse du port connecté sur la carte.Pour ce faire, soit on utilise le tableau des adresses ou bien aller dans le Gestionnaire de périphériques de Windows pour verifier cette adresse.
Il existait sous la version 1 de Delphi, une commande bien pratique (valable aussi en Turbo Pascal) :
PORT[adresse_port] := valeur . Depuis la version 2 la commande à été retirée, nous devons donc utiliser une routine en assembleur pour palier à ce problème.
Voici le programme de base commenté (pour une carte connecté sur LPT1):
Routine d'écriture sur la carte:

procedure activation (sortie:smallint);
begin
 asm


 mov dx,0378h // adresse du registre lignes de sorties sur LPT1
 mov ax,sortie  // variable de la valeur à ecrire
 out dx,al  // écriture sur le registre

  mov dx,037Ah  // adresse du registre de contrôle
  mov ax,1     // niveau haut sur le premier bit (STROBE)
  out dx,al  // écriture

 mov dx,037Ah
 mov ax,0  // niveau bas sur le premier bit (STROBE)
 out dx,al  // écriture
end;

end;

Appel de la procedure 'activation' avec un bouton:

procedure TForm1.Button1Click(Sender: TObject);
var s:smallint;    // déclaration de la variable s de type entier
begin
  
s:=0;                 // mise à zero sur l'ensemble du registre

activation(s);  // appel de la procedure 'activation' avec s=0 comme paramètre

s:=1;   // mise à 1 de la premiere sortie (D0)

activation(s);  // appel de la procedure 'activation' avec s=1 comme paramètre, en clair, allumage de la premiere led
  
end;

Activation sulmutanée ou indépendante de l'ensemble des huit sorties:
Il n'y a rien de plus simple, le registre lignes de sorties est adressé sur huit bits donc le poids faible se situe sur D0 (voir tableau du registre).En observant les exemples ci-dessous, tout parait plus clair.

Bits D7 D6 D5 D4 D3 D2 D1 D0
Valeur binaire 0 0 0 0 0 0 0 1
Valeur décimale 128 64 32 16 8 4 2 1
Resultat 0 0 0 0 0 0 0 1

00000001 en binaire vaut bien 1 en decimal.
Exemple 1: Nous desirons activer les sorties 2 et 5, la valeur en binaire sera 00010010, en decimal elle sera égale à 18 (16+2), nous pouvons verifier au passage que 100010 est bien égale a 18.
Programme:

var s:smallint; 
procedure TForm1.Button1Click(Sender: TObject);
   begin
   s:=0;
   activation(s);
   s:=18;
   activation(s);
   end;

Exemple 2: Nous desirons activer les sorties 2, 5 et 8, valeur binaire :10010010, en decimal 146 (128+16+2)
Programme:

var s:smallint; 
procedure TForm1.Button1Click(Sender: TObject);
   begin
   s:=0;
   activation(s);
   s:=146;
   activation(s);
   end;

Remarque: Il n'est pas necessaire de faire une RAZ de l'ensempble des sortie par un S=0, car lors du changement de l'ecriture d'une nouvelle valeur sur le port, celle-ci est prise de suite en compte.Par contre au debut du programme il est conseiller voir obligatoire dans certain de proceder a cette RAZ dans le but d'avoir la certitude que TOUTES les sorties sont à 0.
A vous de soliciter ces sorties en combinant via des routines de programmation, des temporisations, des boucles ou des facteurs conditionels.