Port paralléle forcé

cerf59
Messages postés
5
Date d'inscription
vendredi 16 février 2007
Statut
Membre
Dernière intervention
9 mai 2007
- 4 mai 2007 à 11:16
cs_casy
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
- 9 mai 2007 à 16:44
Bonjour,
Mon problème est le suivant :
J'ai créé le programme suivant pour recevoir des donner sur le port // mais d'abbord en le testant je me suis apérçu que le bit numéro 3 ( de poids 4) étais toujours actif c'est a dire que lorsque je met tout les port a 0 , j'obtient 4 ...
____________
Private Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)
Private Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Integer) As Integer




Private bytCode As Byte             ' Déclaration de la variable bytCode en octet
Private intAdressePort As Integer   ' Déclaration de la variable intAdressePort
Private intAiguille As Integer      ' Déclaration de la variable intAiguille
            
Dim arrTranscode(256, 7) As Integer ' Déclaration du tableau arrTranscode de 256 lignes et 7 colonnes
Private Sub Command1_Click()
           
    Text1.Text = Val(Inp(intAdressePort))


End Sub




Private Sub Form_Load()     ' sous prog Form de transformation code décimal

    intAdressePort = &H378      ' définition de l'adresse du port parallèle


End Sub
_______________

Y a - t - il une erreure dans mon programme ? sinon comment forcer tous les bits de port // a 0 ?

Merci d'avance pour votre aide .
@+

10 réponses

cs_casy
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
4 mai 2007 à 11:29
Ben tout dépend de l'état de la broche correspondante sur le port //

Tu parle du bit n°3, de poids 4, sur le port &h378, j'en déduit qu'il s'agit du signal D2 donc de la broche n°4 du connecteur SUBD25 du PC. Si cette broche est à 1, c'est normal que tu lise un. Si elle est en l'air (pas connectée), suivant les parasites qu'elle capte, elle peut très bien prendre un etat 1 (ce qui est généralement le cas d'ailleurs pour les broches qui restent non connectées).

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
cerf59
Messages postés
5
Date d'inscription
vendredi 16 février 2007
Statut
Membre
Dernière intervention
9 mai 2007

4 mai 2007 à 11:40
Le problème c'est que l'on teste avec un cicuit intégré avec des interrupteurs , et lorsqu'on les mets tous en position fermée s'affiche sur notre programme la valeur 4.
0
cs_casy
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
4 mai 2007 à 11:56
teste l'état sur la broche du connecteur, peut-etre as-tu un interrupteur ou le circuit intégré défaillant
Rappel : Pour le port parallèle, Etat 0 0 Volts, Etat 1 5 Volts
Attention aux manip, tu es en prise directe sur la carte mère

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
cs_casy
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
4 mai 2007 à 12:02
Autre point, as-tu pensé de basculer le port en entrée avant de lire la valeur.

Par défaut il est configuré en sortie et la valeur que tu lis doit etre la dernière valeur envoyer au port.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cerf59
Messages postés
5
Date d'inscription
vendredi 16 février 2007
Statut
Membre
Dernière intervention
9 mai 2007

9 mai 2007 à 11:18
    notre port et bel et bien configuré en entrée puisqu'on sait lire les valeurs que nous envoyons sur les autres bits que le d3... on arrive à tout mettre à "1" par exemple et donc à lire 255 via notre programme.
Le problème ne viens pas non plus de notre plaque de test car nous avons dejà changé de plaque et d'interrupteur et ça ne change rien du tout.

Serait il alors possible de faire un reset du port (en écrivant 0 sur tous les bits) puis de remettre les ports en entrées afin de lire les valeurs acquise sur le port ?
0
cs_casy
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
9 mai 2007 à 13:51
"...de faire un reset du port..."
Si je comprend bien ce que tu veux dire, non. A ma connaissance ce n'est pas prevu. Je ne pense pas qu'il soit prévu dans la puce de gestion du port //, une quelconque mémorisation de configuration. Cela ne correspond à rien , à ma connaisance, dans la norme régissant le port //. Le "reset" du port est effectuer normalement à la mise sous tension de la machine.

"...en écrivant 0 sur tous les bits..."
Avec le port en Entrée : cela ne devrait avoir aucun effet, mais ça peut etre testé éventuellement
Avec le port en sortie : attention à ne pas faire de court circuit derrière sur tu as un inter actif. Tu vas reseter le tampom de sortie mais normalement dès que le port sera remis en entrée, les valeurs lues devraient etre celle présentes sur le port. En prennant des précautions concernant les cour-cuircuits, tu peux essayer de faire le test.

Si tu as exclus la carte interface et la configuration du port, je ne vois plus guère qu'un problème matériel ou un problème dans ton logiciel.

Pour le problème logiciel, tu peux essayer de faire le test avec un bout de code totalement indépendant de ton logiciel qui aurait pour fonction de configurer le port puis de lire en boucle, le tout de façon la plus rudimentaire et simpliste qu'il soit. Eventuellement pour t'affranchir d'une "certaine façon" de coder, tu peux prendre pour ce test, un code développé par une autre personne, par exemple une source de vbfrance pourquoi pas.
Il conviendra ici évidemment de confirmer le problème avec un logiciel tiers afin d'avoir une relative certitude que le problème ne vienne pas de ton logiciel.

Pour la piste matériel, reste le cable de liaison. Un court-circuit est toujours possible avec un petit filamment mal soudé qui se balade sur une autre broche à l'intérieur de la prise, pas toujours facile à voir. Les broches à proximité de D3 sont D2, D4, GND (c'est 3 peuvent etre exclues je pense) et SELECT OUT. Cette dernière doit, je crois bien etre à 1 lorsque le port est configuré en entrée. Cela pourrait etre une explication.

Autre piste matérielle, des dommages subits par le chipset. Dans ce cas,, pour confirmer, il faut essayer avec un autre ordinateur, ou éventuelllement une carte // additionnelle, mais dans tout les cas cela revient à essayer sur un autre port //.
Si c'est le cas, il y a pas de remèdes envisageables si ce n'est de passer par une carte additionnelle ou par un autre pc, ce port là étant définitivement inapte pour ce service là, à priori.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
cerf59
Messages postés
5
Date d'inscription
vendredi 16 février 2007
Statut
Membre
Dernière intervention
9 mai 2007

9 mai 2007 à 15:05
Nous avons vérifié le cablage de la nappe relié de la plaque au pc est il est correct.

Nous avons essayé un programme (que nous avons téléchargé sur ce site = "vbfrance_TESTEUR-POUR-PORT-PARALL-200_36552") et en faisant un RAZ nous arrivons à obtenir 0 sur tous les bits du ports. Et ensuite, lorsque nous changeons les valeurs des bits nous obtenons la valeur voulue (toujours grâce à notre plaque de test)

Aussi nous aimerions pouvoir intégrer un morceau de programme permettant de faire un RAZ (c'est à dire d'envoyer 0 sur tous les bits du port) au démarrage du programme. (on ne s'y connais que très peu en visual basic...)

Merci d'avance (et merci pour vos réponses)
0
cs_casy
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
9 mai 2007 à 15:44
Quel est le problème ?

La mise à zéro du port ou le moment pour le faire ?

Sinon tu peux regarder la sourec chargée, m^me si , j'en conviens, le code n'est écrit de manière très lisible. Il manque des commentaires et surtout l'identation qui facilitera énormmément la lecture

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
cerf59
Messages postés
5
Date d'inscription
vendredi 16 février 2007
Statut
Membre
Dernière intervention
9 mai 2007

9 mai 2007 à 16:03
le problème c'est qu'on arrive à coder ni la mise à zero ni le moment..
Le code du programme téléchargé prend apparemment tous les bits séparément alors que nous lisons sur le port entier (si j'ai bien compris), donc on ne sais pas trop comment l'adapter....

PS :  notre programme est un morceau d'un grand programme.. c'est pou cela que certaines variables ne servent à rien (on nous a donné une partie de programme existante)
On est des noobs....
0
cs_casy
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
9 mai 2007 à 16:44
Effectivement, je n'avais pas regarder le code en profondeur, il s'avère particulièrement confu en plus d'être pas facilement lisible.

Je te conseille de regarder cette source, peut-etr comprendras-tu plus de choses -->
http://www.vbfrance.com/codes/COMMANDER-PORT-PARALLELE-SOUS-WINXP-2000-NT_39805.aspx

Pour ce qui est d'écrire sur le port, tu écrit (et lit) toujours un octet. Avant de l'écrire, il te faut donc reconstruire l'octet à partir de l'état des bits (et donc à la lecture, l'opération inverse, le décodage de chaque bits). Bon, j'imagine que tu connais un peu la logique binaire, que tu sais que chaque bit possède un poids égal à 2^i (2 puissance i), i étant le n° du bit. L'octet en question étant la somme de chacun des poids correspondants à chacun des bits. Ce que tu retrouvera dans la fonction SetValue_Data, dans la source que je viens de te donner.

Pour tout mettre à 0, il suffit d'écrire 0, pour mettre D2 à 1, il faut écrire 4, pour D2, D1, et D0 à 1 il faut écrire 7 (4+2+1), etc ...

Pour le moment de le faire, soit tu peux le faire sur un bouton, donc le code sera dans l'évènement Click du bouton. Soit tu peux aussi le faire au chargement de la feuille (écran), dans ce cas là tu met le code dans l'évènement Form_Load de la feuille.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0