Parallel Breakout - une première carte DIY pour redécouvrir le port parallèle en Python

Bonjour à tous,

Dans la foulée de la récupération et réutilisation du Dell Optiplex GX260 (sous Puppy Linux), je voulais m'attarder sur l'utilisation du port parallèle pour faire de hacking électronique sous MicroPython. 

Quelques constats

Constat 1:
Souder une volée de fils sur un connecteur DB25 est une approche idéal pour favoriser un accident inopiné (mauvais raccordement, injection, court-circuit.

Constat 2:
Le port parallèle (DB25) est difficile d'accès puisqu'il est à l'arrière du PC. C'est très bien pour brancher une imprimante mais nettement moins pratique pour faire de l'électronique!

Le manque d'accessibilité n'est pas seulement un frein mais impose de se lever, lecture à l'envers, vérification fastidieuse... donc tout ce qui peut faciliter un raccordement accidentel.

Constat 3:
Le port parallèle ne transporte pas d'alimentation. Toute électronique externe devra donc disposer de sa propre alimentation.

Conception d'un carte breakout

Pour limiter les risques d'incidents, j'ai préparé une carte breakout permettant:

  1. D'exposer la connectique DB25 sur un connecteur IDC 2x20, permettant ainsi d'employer un câble/ruban GPIO Raspberry-Pi pour déporter la connectique vers une carte fille.
  2. De recevoir une tension de 5V via un port MicroUSB
  3. De créer une tension de 3.3V (800mA max)
  4. D'exposer les tensions de 5V et 3.3V sur le connecteur IDC (donc transporter vers la carte fille).
    Les points GND, 5V, 3V3 sont positionnés aux les mêmes que pour un Pi.
  5. Rail d'alimentation 5V et Rail 3V3
  6. Sérigraphie détaillées au dessus et en dessous de la carte!
 


Les libellés détaillés permettent de faire du prototypage directement avec la carte. Rien n'oblige d'utiliser un connecteur IDC et un ruban GPIO... il est possible de prototyper directement sur la carte mais cela n'est pas recommander.

Des idées de cartes filles

  • Carte T-Cobbler pour prototyper (style Raspberry-Pi mais pour le port parallèle)
  • Carte Parallèle vers I2C (qwiic et StemmaQT compatible)
  • Carte 8 bit OUTPUT + 8 bit INPUT
  • Carte 4 Relais
  • Carte ADC capture analogique
  • Carte 1Wire 
 Il y a franchement moyen de s'amuser et surtout sous Python 3.

Documentation du port parallèle

C'est aussi l'occasion de revenir sur la documentation du port parallèle.

Brochage Connecteur Parallèle sur PC (vue de Face)
Source: ???

Broches de données

Les broches de données D0..D7 sont en sorties uniquement

Elles permettent d'envoyer des données vers l'imprimante. L'ordinateur présente les données sur le bus puis pulse la broche Strobe (C0, pulse HIGH) pour indiquer à l'imprimante qu'elle peut capturer les données. 

Broches de statut

Les broches de statut sont des broches en entrée uniquement

Pin# BitName ShortName Description
15 S3 ERROR Printer signal an Error (set to LOW)
13 S4 SELECT-IN Select IN. Daisy chain Select signal.
12 S5 PAPER-OUT Paper Error/Paper Out. Inform that page is out or no more paper.
10 S6 ACK Acknowledge. The printer inform computer that data have been
acquired and processed. Then it printed will reset Busy line to LOW.
11 S7 BUSY The printer set this line LOW when it is ready to receive data.
When the printer acquire the data on the bus (following a strobe), it
set this line HIGH to indicates data processing, then set ACK
when finished, finally set Busy back to LOW

Broches d'entrée/sortie

Certaines broches peuvent être configurées en entrée ou en sortie.
Ces broches sont configurées en sorties par défaut. Il faut donc les reconfigure et être très prudent sur l'électronique employée (afin de ne pas mettre à la masse une broche configurée en sortie).

Pin# BitName ShortName Description
1 /C0 STROBE IN/OUT. Pulse HIGH to inform the printer to fetch the data
placed on the bus.
14 /C1
LINE-FEED IN/OUT. Auto LineFeed. When LOW it does a LineFeed after
each Carriage-Return. When HIGH it only do Carriage-Return.
16
/C2 RESET
IN/OUT. Also named Initialize. Set LOW for 50ms to reset the
printer and clear entry buffer.
17 /C3
SEL-PRN
IN/OUT. Select IN. Host set this line LOW to select the device.
Printer can be put online/offline from the computer.

8 bits en entrées?

S'il est évident que le port parallèle dispose de sorties 8 bits (en sortie uniquement), comment faire pour disposer de 8 bits en entrées?

Il y a deux options:

Option 1: 8 broches en entrées

Utiliser les 4 broches de Statut + 4 broches d'entrée/sortie .
 
L'intérêt de cette approche est de pouvoir créer un câble de transfert de données 8 bits offrant le transfert le plus performant (8 bits en entrée + 8 bits en sortie).
 
Voici une proposition de raccordement de 8 bits en entrées trouvée sur internet.
Source: ???

Option 2: 4 broches en entrées (Nibble)

Pour éviter de reconfigurer les broches Cx en entrée, il est tout à fait envisageable de diviser les 8 bits d'entrées en deux Nibbles de 4 bits. Les Nibbles seront alors lu consécutivement en deux opérations sur les bits de statut (Sx) qui sont déjàa préconfigurés en entrées.
Source: ???
Dans l'exemple ci-dessus, le signal Strobe (C0) est utilisé pour passer d'un Nibble à l'autre.
 
Lorsque le signal Strobe est au niveau bas, les 4 bits de poids faibles (D0..D3) sont présentés sur la sortie Y (donc disponibles sur les bits de statut (S4..S7). 
Lorsque le signal Strobe est au niveau haut, ce sont les 4 bits de poids forts (D4..D7) qui sont présentés sur le sortie Y.

Inconvénient: 
  • lecture/acquisition plus lente puisqu'il faut deux opérations pour lire un octet.
Avantages:
Les avantages sont multiples.
  • Pas de reconfiguration des sorties Cx en entré. Limite les risques
  • Encore une broche de statut disponible (S3: Error). Entrée pouvant être réutilisée.
  • Encore 3 broches C1..C3 disponibles. Etant configurées en sorties par défaut, elles peuvent servir à créer une logique de contrôle.

suggestion:

  • Utiliser C1 pour générer un signal d'horloge (synchronisation)
  • Utiliser C2 & C3 pour créer un sélecteur 4 bits (00,01,11,10)


Aucun commentaire