Le port parallèle

Introduction

Cet article est paru dans le magazine PC Team numéro 63, décembre 2000, au sein de la rubrique “Team pratik” sous rubrique “Électronique”.

pcteam_63

Article

Nous commençons ce mois-ci une série d’articles consacrés aux ports du PC. Avant d’attaquer quelques montages pratiques, voyons comment mettre en œuvre ce bon vieux port parallèle encore bien utile.

Le port parallèle est basé sur une architecture assez ancienne mais très simple à utiliser, ce qui en fait l’interface de prédilection de tout électronicien amateur. Comme son nom l’indique, il fournit, entres autres, 8 broches de données directement utilisables et ne nécessitant pas de circuits d’interfaces supplémentaires pour réaliser des taches simples. De plus, comme nous le verrons plus loin, la programmation de ce port est très aisée et ce, à partir de nombreux langages.

Brochage et performances

Le port parallèle se présente sous la forme d’un connecteur DB femelle à 25 broches. Seules 17 broches sont utilisables, les 8 broches restantes sont interconnectées à la masse du PC. Le schéma ci contre montre le brochage de ce port.

pcteam_63

Le brochage du port parallèle

Nous remarquons que le nom de certaines broches nous est assez familier ; en fait ce port a été conçu à l’origine pour y brancher des imprimantes. Le débit fourni par ce port est de l’ordre de 150ko/s, ce qui limite fortement les possibilités d’y connecter d’autres périphériques. C’est pourquoi les grands noms de l’informatique ont créé 5 standards regroupés dans la norme IEEE 1284 (dans l’ordre croissant de performance) : Compatibility Mode, Nibble Mode, Byte Mode, EPP Mode (Enhanced Parallel Port) et ECP Mode (Extended Capabilities Port).

Ces standards ont une compatibilité descendante et les PC actuels sont capables de travailler dans n’importe lequel de ces modes, sous réserve que le port a été configuré convenablement (voir l’encadré). Dans sa version la plus simple (Compatibility Mode), les données ne peuvent servir qu’en sortie. Il existe cependant une méthode pour accéder à une lecture de données en utilisant d’autres broches du port et procédé électronique appelé multiplexage. Ce que nous retiendrons est que les modes les plus récents (EPP et ECP) rendent possible la lecture par l’intermédiaire du bus de données. Le débit a été ainsi augmenté à 2 Mo/s, ce qui a permis de connecter sur le port parallèle des périphériques plus rapides tels que scanners, lecteurs cd CD-ROM etc.

Au point de vue des performances électriques, chaque broche du port est capable de fournir un courant maximal de 12 mA environ. Il faut donc faire attention à la charge que l’on applique et de placer les résistances adéquates. Une solution pour éviter tout problème de consommation est de placer un buffer juste à la sortie du port. Les niveaux de tension sont compatibles TTL : cela signifie qu’un bit mis à 1 provoquera une mise à +5V sur la broche correspondante, et un 0 logique mettra la broche à 0V (la masse du PC).

Pour la lecture de données, il faut faire un peu plus attention car cela dépend de la technologie utilisée. En effet, certains ports possèdent une résistance interne dite de “pull-up” (tirage au +5V) sur leurs broches tandis que d’autres ont leurs sorties dites en “collecteur ouvert”. Pour tester dans quel cas se situe de port parallèle d’un PC, on peut se servir du programme Input.exe fournit sur le CD Pro. Si le résultat est 255 cela signifie que les broches du bus de données possèdent une résistance de tirage. Le schéma ci contre montre comment réaliser une interface qui sera compatible avec toutes les technologies. Il est préférable de prendre une résistance de l’ordre de 4,7 KOhm de façon a rester au maximum compatible.

pcteam_63

Une interface d’entrée idéale

Les registres

Toute la gestion du port parallèle se réalise par l’intermédiaire de trois registres de 8 bits. Le premier correspond à l’adresse de base du port : c’est le registre de données (0x378 par exemple). Les lignes D0 à D7 de la prise prennent le niveau correspondant à la donnée inscrite dans ce registre et si la fonction bidirectionnelle a été configurée on peut y lire l’état des broches. L’octet suivant (0x379) est le registre d’État accessible en lecture uniquement.

Enfin, on trouve le registre de Contrôle (0x37A) accessible en lecture et en écriture. Une attention particulière doit être portée sur le bit 5 (BID CTRL) qui permet, lorsqu’il est à 1, de configurer le bus de données en lecture. Le tableau ci-dessous nous permettra de configurer facilement ces registres.

pcteam_63

Les trois registres de configuration

Configurer le port parallèle

Tout d’abord, il faut connaître l’adresse de base du port parallèle. Cela peut se faire très facilement sous Windows par l’intermédiaire du panneau “Propriétés système” et dans l’onglet “Gestionnaire de périphériques”. Cliquer sur “Ports”, “Port imprimante (LTP1)”, “Propriétés” puis “Ressources”. La grande majorité des ordinateurs ont une adresse de 0x378 (en hexadécimal). Cette adresse est appelée adresse de base, et correspond au registre de données.

Le mode de fonctionnement du port se modifie quant à lui dans le BIOS ; redémarrer l’ordinateur, aller dans la section “Peripherial Setup” et changer l’option “Parallel Port Mode” selon la configuration désirée.

Programmation du port

Le port parallèle est extrêmement simple à programmer. Plusieurs langages possèdent les fonctions pour accéder au contrôle des registres. Ainsi, il est possible de programmer en Basic à l’aide de INP et OUT ou dans des langages plus évolués comme le C. Nous nous intéresserons plus particulièrement à ce dernier langage mais également au Visual Basic qui nous permettra d’avoir une interface logicielle plus agréable.

Dans le cas du C, il existe deux fonctions pour écrire et lire dans un registre. Elles sont accessibles dans les bibliothèques standards, à savoir dos.h, bios.h ou pc.h suivant les compilateurs. Les prototypes des fonctions sont les suivantes :

1
2
void outportb(unsigned short ADRESSE, unsigned char  VALEUR);
unsigned char inportb(unsigned short ADRESSE);

Réalisons sans plus attendre notre première application. Un moyen très pratique pour comprendre et vérifier le fonctionnement du port parallèle est de réaliser le schéma présenté ci après. Connecté sur le bus de données, on peut visualiser directement le contenu du registre grâce aux LED. Les résistances servent à limiter le courant traversant les diodes. Dès lors, il suffit d’une simple ligne en C pour allumer les LED désirées. Il est possible également d’utiliser le programme Output.exe contenu sur le CD qui permet d’écrire une donnée sur le port parallèle.

1
2
3
4
5
6
7
8
#include <pc.h>

void main(void)
{
	unsigned char Valeur;
	outportb(0x378,0xFF); /* On allume toutes les LED */
	Valeur = inportb(0x378); /* On lit le registre de données
}

pcteam_63

Un montage simple pour visualiser les données

Une remarque peut être apportée au listing précédent. En effet, nous n’avons pas configuré le bus de données en entrée, donc ce que nous lisons est juste la valeur du registre, soit Valeur=255 ici. Le registre de données ne devient l’image des broches que si le bit 5 du registre de contrôle est à 1.

Le cas de Visual Basic est un peu plus délicat. En effet, aucune fonction n’existe en standard. Pour cela, nous avons recours aux célèbres DLL qui permettent d’étendre les possibilités du langage. Nous allons utiliser Inpout.dll (comprendre Inp-out, en rapport avec les fonctions du même nom en Basic) qui contient deux fonctions permettant de lire et d’écrire dans un des trois registres. Les prototypes des fonctions sont les suivantes :

1
2
Out ADRESSE, VALEUR
VALEUR = Inp(ADRESSE)

Tout projet nécessitant l’utilisation de cette DLL doit contenir un module servant à déclarer ces nouvelles fonctions que Visual Basic ne connaît pas. Il faut aller dans le menu “Projet” puis cliquer sur “Ajouter un module”. Inscrire alors dans ce module le code suivant :

1
2
3
4
Public Declare Function Inp Lib "inpout32.dll" _
Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Public Declare Sub Out Lib "inpout32.dll" _
Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)

Et voilà ce n’est pas plus difficile que ça. Ceux n’ayant pas Visual Basic peuvent utiliser le programme TestParallèle.exe situé sur le CD Pro. Il est capable d’écrire dans tous les registres et montre en permanence leur valeur. Tous les programmes sont accompagnés de leurs sources avec des commentaires. Il n’y a aucune difficulté de programmation. Cette introduction un peu théorique au port parallèle nous a donné les bases pour développer des applications plus complètes, ce que nous verrons durant les prochains mois.

pcteam_63

Notre programme Visual Basic pour tester le port