Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2959 connectés 

  FORUM HardWare.fr
  Programmation
  C++

   [Vc++] capteur sur port parallele XP/2000

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Vc++] capteur sur port parallele XP/2000

n°839431
_ky_
Posté le 02-09-2004 à 09:42:11  profilanswer
 

Salut à tous
Je vous expose mon problème:
 
Je voudrais faire un prog (c/c++) qui regarde si un contact est fait entre 2 fils (et la masse) qui sont branchés sur le port parallele d'un pc tournant sur XP et 2000.
 
J'utilise inpout32.dll qui me permet de lire et d'écrire sur mon port parallele.
 
j'ai branché un fil sur une des broches de data (0x378) un autre sur une des broches de status (0x379) et un autre sur la masse. (je suis pas sur que ce soit les bon branchements)
 
___________
 
voila grosso modo mon prog:
 
 
#define DONNEE 0x378
 
int main(int argc, char* argv[])
{
     int nb;
     
     Out32(DONNEE, 255); //j'envoie sur toute les broches
     if (nb = Inp32(DONNEE  + 1) != 0)
 puts("le courant passe" );
     else
 puts("il n'y a pas eu de contact" );
     return (0);
}
 
 
donc si vous avez des idées, répondez moi :)

mood
Publicité
Posté le 02-09-2004 à 09:42:11  profilanswer
 

n°839464
glaurung
Posté le 02-09-2004 à 10:03:13  profilanswer
 

Je ne comprends pas trop comment tu branches tes 3 fils, mais il ne faut surtout pas mettre data à 1 si tu as une connexion électrique entre data et la masse. Pour lire une donnée sur le port //, il faut t'y prendre de la manière suivante :
 
Tu prends un pin que tu peux facilement mettre à par exemple strobe ou un data, et tu le mets à un (attention strobe est inversé si je me souviens bien.) ensuite, tu connectes ton pin à un par le biais d'une résistance judicieusement dimmensionnée (respecter le courant maximal que le port peut fournir) à une pin de lecture (un bit du registre status par exemple. Ensuite tu branche ton interrupteur entre la masse et l'entrée de ce bit de lecture.
Si ton interrupteur est ouvert, la tension fournie par le pin stobe ou data se retrouve sur le pin d'entrée et tu lis 1
Si ton interrupteur est fermé, le pin d'entrée est connecté à la masse et tu lis 0. le pin de sortie est connecté à la masse A TRAVERS LA RESISTANCE, et ton port ne grillera pas si la résistance est correctement dimensionnée. C'est la configuration pull down.
 
Mais c'est quand même dangereux pour le port, une fausse manip est vite arrivée. Je te conseille chaleureusement de passer par une séparation galvanique entre PC et capteur --> optocoupleur, mais ça c'est de l'électronique...

n°839518
_ky_
Posté le 02-09-2004 à 10:42:12  profilanswer
 

je te remercie de tes conseils, je vais essayer tout ça

n°839540
_ky_
Posté le 02-09-2004 à 11:00:23  profilanswer
 

Je n'y connais pas grand chose en elec, j'aurait plusieures questions:
 
- Quel type de resistance je doit mettre
- si je ne connecte pas de fil à la masse, qu'est ce que ça change?
 
Merci

n°839763
glaurung
Posté le 02-09-2004 à 13:41:42  profilanswer
 

_ky_ a écrit :

Je n'y connais pas grand chose en elec, j'aurait plusieures questions:
 
- Quel type de resistance je doit mettre
- si je ne connecte pas de fil à la masse, qu'est ce que ça change?
 
Merci


 
Bon, c'est pas un forum d'élecronique :p mais bon.
 
Pour ce qui est de la résistance, il faut faut connaître la tension fournie au niveau 1 par ton pin que tu forces à 1 tension que l'on appellera Vcc et qui est égale à 5 ou 12 V, je ne me souviens plus, mais tu n'as qu'à la mesurer avec un voltmètre. Ensuite il faut connaître le courant maximal I que peut fournir le port parallèle. Tu devrais trouver ça sur Internet ou dans la doc de ton ordi. La valeur de la résistance à choisir sera R>(Vcc/I), avec [R]=Ohm, [Vcc]=Volt [I]=Ampère
Donc par exemple si Vcc=12V et Imax=50 microampères alors R>240 kOhm. Pour le wattage, des resistances de 1/2 watts sont amplement suffisante, là tu peux vraiment prendre ce qui te tombe sous la main, tant que la valeur est correcte.
 
La masse est nécessaire pour la circulation du courant.
 
http://www.chez.com/samr/image.JPG
 
Voilà un petit schéma qui t'explique le montage. Interrupteur ouvert -> pas de courant tu lis Vcc sur le pin de lecture. Interrupteur fermé -> le courant circule dans (et est limité par) R, tu lis 0V sur le pin de lecture.
 
edit : l'image ne s'affiche pas. copie le lien dans la barre d'adresse...


Message édité par glaurung le 02-09-2004 à 13:44:20
n°839801
_ky_
Posté le 02-09-2004 à 14:02:12  profilanswer
 

Merci de tes infos  :jap:  
jvais chercher les infos necessaire et essayer de faire ce petit montage :)

n°840018
_ky_
Posté le 02-09-2004 à 14:54:47  profilanswer
 

:fou:  :kaola:  :o  
 
Quand je lis sur une des broches de status, j'obtient toujours une valeur fausse:
 
en fait je fait  
 
nb = Inp32(0x379);
printf("valeur: %d\n", nb);
 
 
et j'obtient 121.
 
nb est égal au nombre rentré en paramétre, sauf si le nombre en paramétre est supérieur à 255, auquel cas on retourne à 0.  
(si je rentre 260 comme paramétre, nb == 5)
 j'obtient ces résultat que même lorsque le port parallele est vide.
 
 
Donc si quelqu'un vois d'ou ça peut venir, merci de m'aider, parceque la, jvois pas du tout  :pfff:  
 

n°840196
_ky_
Posté le 02-09-2004 à 16:46:10  profilanswer
 

Aprés quelques recherches, j'ai fini par trouver:
 
La dll que j'utilise (inpout32.dll) ne fonctionne qu'en mode administrateur sous windows 2000.
 
 :D  :lol:  :pt1cable:  :)  :wahoo:  :sol:  
 
voila , je suis content.
 
Merci glaurung tu m'as beaucoup aidé

n°840199
glaurung
Posté le 02-09-2004 à 16:47:10  profilanswer
 

je ne comprends pas ce que tu veux dire, 0x379, c'est le registre de status, donc tu ne peux que le lire. Par exemple connecte une imprimante sur le port parallèle. Lis 0x379 quand l'imprimante est éteinte, puis allume la et relis. Tu auras autre chose (si tu n'as pas grillé ton port parallèle entre temps... assure toi qu'il marche bien d'abord, et faits bien attention. Il n'y a pas de fusibles!) Je te conseilles chaleureusement de faire une bonne interface hardware avant de bricoler pour éviter les courts-circuit.
 

n°840217
HelloWorld
Salut tout le monde!
Posté le 02-09-2004 à 16:58:37  profilanswer
 

Le truc c'est que tu n'as pas le droit d'accéder aux ports physique. Il faut passer par un driver (inpout32.dll ou autre) et alors viennent les problemes d'installation / droits utilisateurs. La solution préconisée c'est de passer par l'interface mise à disposition par l'OS (CreateFile( "LPT1", ...)
http://msdn.microsoft.com/library/ [...] ources.asp
Je ne sais pas à quel niveau, mais il me semble que l'accès au port parallele est restreint, contrairement au port série (je crois que par le port parallele ça passe par le driver ce qui peut être gênant, mais je ne sais pas dans quelle mesure).


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
mood
Publicité
Posté le 02-09-2004 à 16:58:37  profilanswer
 

n°840226
_ky_
Posté le 02-09-2004 à 17:08:04  profilanswer
 

Glaurung, je lis le registre 0x379 et j'écrit sur 0x378, sinon, mon port parallele fonctionne toujours :)
 
Sinon, je vais me pencher sur ton lien HelloWorld, merci
 

n°840461
glaurung
Posté le 02-09-2004 à 21:17:58  profilanswer
 

En tout cas, j'avais utilisé inpout32.dll sans problème avec winXP, mais j'avais des droits d'administrateur...

n°840892
HelloWorld
Salut tout le monde!
Posté le 03-09-2004 à 11:26:41  profilanswer
 

Et si tu lances en même temps 2 instances de ton programme il se passe koi ?


Message édité par HelloWorld le 03-09-2004 à 11:27:06

---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°841010
glaurung
Posté le 03-09-2004 à 13:31:30  profilanswer
 

Vu quelle en était l'application, ça n'avait pas de sens

n°841116
HelloWorld
Salut tout le monde!
Posté le 03-09-2004 à 14:32:17  profilanswer
 

Même sans erreur de l'utilisateur (minimisation et oublie, test volontaire, ...) sous XP plusieurs utilisateurs peuvent travailler sur la même machine. 2 instances de ton appli peuvent tourner.
Autre possibilité, une autre appli utilise elle aussi des accès directs au port, et entre en conflit avec la tienne.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°841294
glaurung
Posté le 03-09-2004 à 17:00:14  profilanswer
 

Je crois que tu n'as pas tout compris :pt1cable:  
 
Si tu utilises le port parallèle pour commander quelque chose ou pour acquérir des données, c'est du gros bricolage. Donc à gros bricolage hardware, gros bricolage software... Le programme n'était pas du tout destiné à être distribué, mais à tester la manip. Il peut bien être boiteux. La robustesse n'était pas visée.
Après, si on voit que ça marche, alors on peut voir pour une meilleure intégration avec une carte IO et alors là, on peut discuter pour une meilleure programmation aussi.
Dans un labo de recherche, on se fiche pas mal de la programmation, ce que l'on veut, c'est tester un produit. Si on arrive à la phase de développement, la partie programmation sera de toute façon confiée à des professionnels de la prog. Mais ce n'est pas mon domaine. Ca ne m'intéresse pas.  :D


Message édité par glaurung le 03-09-2004 à 17:01:12
n°841509
HelloWorld
Salut tout le monde!
Posté le 03-09-2004 à 20:44:34  profilanswer
 

Oui oui je suis bien conscient de ça. Je veux juste essayer de faire comprendre pourquoi c'est mieux de passer par la méthode recommandée par l'OS (qui lui peut contrôler l'accès aux ressources) que de le courcircuiter via un driver et des accès directs aux ports.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°981846
Le Troll O​ Silicium
Windaube...
Posté le 15-02-2005 à 09:21:53  profilanswer
 

Bonjour,
Juste une question...
Comment on fait pour se servir correctement de inpout32.dll?
(Je suis sous Win Xp en admin)

n°988780
mikamika
Posté le 21-02-2005 à 17:14:27  profilanswer
 

Copie la dll dans C:\WINDOWS\system32 puis utilise les sources présentes dans l'archive pour tester ton port.

n°989021
HelloWorld
Salut tout le monde!
Posté le 21-02-2005 à 20:02:18  profilanswer
 

Faut pas toucher à system32. Mets dans le path lors du développement, et dans le même répertoire que ton exe quand tu redistribues.
Cela dit ce genre de dll embarque un driver qu'elle extrait quelque part sur disque, voire même installe sur le système. C'est le cas de cette dll qui installe hwinterface.sys dans "%systemroot%\drivers". D'après la doc c'est même carément un service qui est installé.
J'aurais un préférence pour celui-là:
http://www.internals.com/utilities/winio.zip
censé être plus rapide et fonctionner même sans être admin (sauf que chez moi XP SP2 en user limité ça marche pas).


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

   [Vc++] capteur sur port parallele XP/2000

 

Sujets relatifs
Sous SQL 2000 Server : différence entre le majuscule et le minuscule?port https
Probléme Datatype image avec SQL server 2000Sql Server 2000 - Mot de passe
[SGBD] Des statistiques sous SQL Server 2000 ?passage access 97 / access 2000 ?
Lire et ecrire des informations sur le port USB[VB] Access 2000 selectionner la première valeur d une [RESOLU]
[SQL Server 2000] Connexion sécurisée ?[Qeustion] Access 2000 - Etats - Vba : récupéré un label ?
Plus de sujets relatifs à : [Vc++] capteur sur port parallele XP/2000


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR