Parallel Breakout: Tests d'entrée/sorties en Python

Bonjour à tous,

Après l'assemblage des cartes, ma première envie fût de contrôler des sorties et lire des entrées depuis Python.... et bien voila, c'est fait!
Ce sont des tests très basiques mais cela permet au moins de valider le concept et de s'assurer que l'on peut utiliser toutes les broches du breakout.

Dans cet article j'ai décidé de préserver les broches dans leur direction entrée ou sortie par défaut. Cela permettra d'éviter tout incident.

Installer PyParallel

Avant de pouvoir utiliser le port Parallel sous Python, il faut installer le paquet python PyParallel.

Ce point est décrit dans l'article "Installation Environnement de développement sur Dell Optiplex".

Le paquet installé sur BionicPuppy est:

python3-parallel (0.2.2-2) [universe] pyparallel - module encapsulating access for the parallel port

Brochage et fonction sur le port parallèle

Les broches du port parallèle (et leur fonction) sont déjà été décrites dans l'article "Parallel Breakout - une première carte DIY pour redécouvrir le port parallèle en Python".

Utiliser des sorties

Voici comment j'ai réaliser les branchements de sorties sur le port parallèle.

Exploiter une sortie, Résistances = 2.2 KOhms.

Les sorties de données utilisées pour envoyer les données vers l'imprimante sont en logique 5V.

Logique 3.3V ?!?!

Surprenant, les sorties C0/Strobe, C1, C2/Reset et C3:Select sont en logique 3.3V!
C'est étonnant car à la sortie du port parallèle, la logique standard était en 5V.

J'imagine que ces signaux proviennent directement de la carte mère qui elle, utilise du 3.3V.

Un signal HAUT à 3.3V est tout à fait compatible avec une logique 5V puisqu'un niveau est connu comme haut entre 2 et 5V).

LED et courant max

En parcourant des informations concernant  l'IEEE 1284 et le port parallèle, j'apprends que celui-ci peut fournir un courant (to source) de 2.5mA.

Pour tester les sorties, je décidé donc des LEDs en fixant le courant maximum à 1.5 mA. Les LEDs rouge ont une tension de directe Vf de 1.60V.

La résistance limitant le courant doit donc encaisser une chute de tension de 5.0 -1.6 = 3.4 Volts.
Sachant que courant est volontairement limité à 1.5 mA (0.0015 A), la résistance sera de R = U / I = 3.4 / 0.0015 = 2266 Ohms (soit 2.2KΩ).

Utiliser des entrées

Les montage standard d'une entrée est relativement simple. On utilise une résistance pull-up (10KOhms) pour ramener l'entrée à 5V par défaut.

Un bouton poussoir est alors utilisé pour forcer le niveau logique à la masse lorsqu'il est pressé. 

Exploité une broche d'entrée

Tester en Python

Je me suis amusé à tester toutes les broches d'entrée/sortie et repérer toutes les méthodes à utiliser. Une fois que l'on a compris, c'est simple comme bonjour.

>>> import parallel
>>> p = parallel.Parallel()  # open LPT1 or /dev/parport0

>>> # Setting OUTPUT DATA -------------------------------------
>>> # 0x55 = 0b01010101 
>>> # Binary encoding for bits from D7..D0
>>> # So bit 6,4,2,0 are HIGH the others are LOW
>>> p.setData(0x55)

>>> # Setting OUTPUT STATE ------------------------------------
>>> C0: Strobe
>>> p.setDataStrobe( True ) # High @ 3.3V
>>> p.setDataStrobe( True ) # LOW

>>> C1: LF
>>> p.setAutoFeed( True )  # High @ 3.3V
>>> p.setAutoFeed( False ) # Low

>>> C2: Rst
>>> p.setInitOut( True )   # High @ 3.3V
>>> p.setInitOut( False )  # Low

>>> C3: Select
>>> p.setSelect( True ) # High @ 3.3V
>>> p.setSelect( False ) # Low 

>>> # Getting INPUT STATE -------------------------------------
>>> # Use a pull-up 10K to +5V... a button to set to GND

>>> # S3: Error
>>> print( p.getInError() )  # Return False @ ground

>>> # S4: InSelected
>>> print( p.getInSelected() ) # Return False @ ground

>>> # S5: PaperOut
>>> print( p.getInPaperOut() ) # Return False @ ground

>>> # S6: Ack
>>> print( p.getAcknowledge() ) # Return False @ ground

>>> # S7: Busy
>>> print( p.getInBusy() ) # Return False @ ground

Ressources

La suite

Dans un premier temps, je vais faire en sorte de lire 8 bits par la lecture successive de deux Nibbles.

Ensuite, j'aimerais pouvoir dialoguer avec du matériel I2C.

Enfin, j'envisage de créer un bus de donnée 8 bits et un bus adresse sur 16 bits avec quelques signaux de contrôle.
Reste à voir si cela reste possible.

c

c

c

Aucun commentaire