Controler le port parallèle avec C++ Builder 6

 

Petit rappel sur le port parallèle du PC :

Le port parallèle est une interface qui permet en général la communication avec une imprimante. Aujourd'hui, les imprimantes communiquent avec les pc via le port USB. Donc ce port, qui malgré son manque d'utilisation par les industrielles est très pratique est très simple d'utilisation. Le connecteur est un SUB D25.

Voici l'affectation des broches du port parallèle :

Nom

C++ Builder

Broche

Sens

/STROBE

LPTStrobe

Broche n°1

I/O

D0

Data 0

Broche n°2

I/O

D1

Data 1

Broche n°3

I/O

D2

Data 2

Broche n°4

I/O

D3

Data 3

Broche n°5

I/O

D4

Data 4

Broche n°6

I/O

D5

Data 5

Broche n°7

I/O

D6

Data 6

Broche n°8

I/O

D7

Data 7

Broche n°9

I/O

/ACK

LPTAckwl

Broche n°10

I

BUSY

LPTBusy

Broche n°11

I

PE

LPTPaperEnd

Broche n°12

I

SELECT

LPTSlct

Broche n°13

I

/AUTOFEED

LPTAutofd

Broche n°14

I/O

/ERROR

LPTError

Broche n°15

I

/INIT

LPTInit

Broche n°16

I/O

/SELECT IN

LPTSlctIn

Broche n°17

I/O

MASSE

--

Broche n°18

GND

MASSE

--

Broche n°19

GND

MASSE

--

Broche n°20

GND

MASSE

--

Broche n°21

GND

MASSE

--

Broche n°22

GND

MASSE

--

Broche n°23

GND

MASSE

--

Broche n°24

GND

MASSE

--

Broche n°25

GND

Et voici les adresses du port :

Adresse

Broches accessibles

0x378

8 bits de données pour l'emission ou la recéption avec le port bidirectionnel

0x379

Bit 3 : /ERROR
Bit 4 : SELECT
Bit 5 : PE
Bit 6 : /ACK
Bit 7 : BUSY

0x37A

Bit 0 : /STROBE
Bit 1 : /AUTOFEED
Bit 2 : /INIT
Bit 3 : /SELECT IN
Bit 4 : Autorisation d'interruption
Bit 5 : Mode I/O : mise à 1 = lecture, mise à 0 = écriture

L'adresse du port peut ne pas être 0x378. Si vous avez par exemple 2 ports parallèles, les adresses pourront être par exemple 0x278 pour le premier port et 0x378 pour le second. Mais dans la plupart des cas, c'est l'adresse 0x378 qui fait référence à votre port parallèle. Si vous voulez être sur de vous, ouvrez : "démarrer/programmes/accessoires/outils systèmes/informations système". "Cliquez sur Ressources matérielles", puis sur "E/S" et recherchez votre port imprimante LPT1.

Dans notre application, nous allons utiliser ce même port pour commander non pas 8 bits, mais 16 bits. Vous me direz, comment peux-t-on controler 16 bits alors que le bus de donnée du port parallèle n'en possède que 8. Et bien grâce à l'utilisation d'octuple bascule D. Et c'est bien les seul composant dont nous aurons besoins pour confirmer à un instant donnée que les informations présentes sur le bus de donnée sont valides. Pour cela, nous allons utiliser non pas 1 mais 2 octuples bascule D. Les fronts de validation des bascules vont être commandés par /STROBE, broche 1 du port et /SELECT IN, broche 17 du port. Les 2 octuples bascules D que j'ai utilisé sont de simple circuit 74HCT574.

Voici le datasheet de ce composant : 74HCT574

Voici le schéma électrique à réaslier :

Maintenant, sous windows XP, NT ou 2000, windows nous bloque l'accès au port parallèle. Pour contourner facilement cet obstacle, nous allons installer un composant appelé TDLPortIO. Celui-ci va simplement dire à windows de nous laisser agire sur le port.

 

1) Installer la version VCL (La version ActiveX ne sera pas utile) du composant TDLPortIO telechargeable ici : TDLPortIO (Toutes les instruction d'installation y sont détaillées)

 

2) Utilisation du composant TDLPortIO pour piloter le port parallèle du PC :

- Une fois l'installation du composant terminée, créé une nouvelle application :

- Puis placez un composant DLPortIO (Dans "DiskDude") sur la fenêtre principal.

- Placer enfin un Label que vous renomez par la propriété Caption "Valeur à envoyer sur le port :", 2 boutons ainsi qu'un Edit sur cette même fenêtre.

- La première chose à faire est de faire ouvrir et fermer le port parallèle pour nous autoriser à écrire dessus. Nous allons placer ces commandes respectivement à la création et à la destruction de la fenêtre.

- Lorsque l'on va appuyer sur le bouton "Commande bit 1 à 8", il faut que le programme récupère les données présentent sur l'Edit1, les transforment en entier, car nous allons récupérer une donnée sous forme textuel (string), puis les envoyer sur les broches D0 à D7 et enfin valider le premier circuit 74HCT574.

il faut déclarer au début du programme une variable "donnee" de type entier "int", dans laquel on va stocker la valeur de Edit1 :

Donc au debut du programme écrire : "int donnee;"

- De même, lorsque l'on va appuyer sur le bouton "Commande bit 9 à 16 ", il faut faire exactement la même chose, mais valider le second circuit 74HCT574. Donc seul la dernière instruction change pour valider non pas /STROBE, mais /SELECT IN.

 

Voici la carte réalisé :