Lecture du port parallèle sous XP par interruption externe

Résolu
Utilisateur anonyme - 25 août 2009 à 13:50
cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 - 4 sept. 2009 à 14:01
Bonjour,
Je réalise un système de commande domotique à l'aide d'un micro PC portable (tournant sous Windows XP) ne possèdant pas de port série RS232, mais un port parallèle que j'envisage d'utiliser avec Borland C++ Builder5 pour communiquer avec un automate.
Mon souci est de trouver une librairie (dll, composant, ...) me permettant de déclencher une lecture du port parallèle à la réception d'une interruption provoquée par un signal de l'automate sur une des lignes du port parallèle.
Est-ce qu'une telle possibilité existe?
Si oui, je serai ravi d'avoir les références du code correspondant.

Par avance, merci.

4 réponses

jibob Messages postés 59 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 4 juillet 2013
2 sept. 2009 à 18:30
Bonjour,

Au niveau du port parallèle PC, pas de souci la ligne ACK* (broche 10) permet de réaliser cela, car relié au contrôleur d'interruption PIC 8259, généralement par la ligne IRQ7.
Sous Linux, il existe des sources d'exemples toutes prêtes à recompiler.

Pour ce qui est de la manipulation des I/O du port parallèle sous XP (lire l'intégralité de l'article, sinon la fonction donnée en exemple ne fonctionnera pas)
http://support.microsoft.com/kb/823179/fr

Pour accéder au routine d'interruption sous XP, il est nécessaire de passer par un driver (*.sys) puis une DLL qui sert d'intermédiaire.
Pour gérer le signal IRQn, il faut détourner la routine d'interruption (ISR) vers sa propre fonction mais également autoriser la ligne IRQ, puis acquitter l'interruption dans la fonction ISR (voir le DDK).

Une solution de repli existe néanmoins avec une légère adaptation matérielle qui consiste à mémoriser le front d'interruption par un niveau et procéder à un polling toutes les 50 ms.
Voir également
http://www.cppfrance.com/codes/PORT-PARALLELE-BUS-I2C-AVEC-PCF8574A-24C32-PCF8591_37144.aspx

http://paulfjujo.free.fr/PULSE/pulse_reccorder.htm

Pour mémoriser le changement d'état, utiliser une bascule d'un 74HCT74 (DATA relié au + 5 V) reliant la ligne d'interruption de l'automate à l'entrée CLOCK (front montant) et relier sa sortie à une des entrées du port (exemple: ERROR)
Créer un thread pour tester cette entrée ERROR toutes les 50 millisecondes puis l'effacer après lecture (avec signal STROBE* passant de +5V/0V/+5V relié à l'entrée CLEAR* de la bascule 74HCT74)

Cordialement.
3
cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 8
4 sept. 2009 à 09:25
3
Utilisateur anonyme
4 sept. 2009 à 11:56
Ces liens sont intéressants, mais ne traitent pas de la gestion d'interruptions externes par la patte 10 du port.

Merci pour ta réponse.
0
cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 8
4 sept. 2009 à 14:01
cherche sr le même site avec comme mot-clé "parallel port".
http://www.codeproject.com/KB/vb/PortAccess.aspx#HowdoestheSurveillancesystemandSampleApplicationRuns8

louis14
0