Se connecter / S'enregistrer
Votre question

contrôler des relais via le port parallèle

Tags :
  • Visual basic
  • Programmation
Dernière réponse : dans Programmation
18 Septembre 2006 08:09:27

Salut à tous !
Je me suis lancé dans un petit projet permettant de controler l'allumage et l'extinction de relais via le port parallele j'ai trouvé de l'aide sur google et j'ai réussi à programmer une petite interface en visual basic mais le problème c'est que pour l'instant je ne réussi qu'a allumer les 8 entrées en même temps, ou toutes les eteindre en même temps, j'utilise la dll inpout32 et la syntaxe est la suivante :

Out (adresse_port, valeur) dc on mettant en valeur "255" tout s'allume, et avec "0" tout s'eteint .
Ce que je souhaiterai ce serait d'avoir l'adresse ou la valeur à appliquer sur chaque port (D0 à D7) pour permettre son controle independemment des autres....

parce que j'ai bien une solution pour activer celle que je souhaite: sur la calculatrice windows, en mode scientifique, en binaire, comme c'est en 8 bits et qu'il y a 8 sorties (comme par hasard !) par exemple si je veux que la sortie D0 et la D7 s'allument j'écris : 1000001 et je le converti en hexadecimal, cela me donne un chiffre que je rentre dans la case "valeur" et ça roule ! mais bon ce serait plus simple de savoir controler chaque port pour le mettre à 1 ou à 0 sans se soucier des autres....

merci pour votre aide

Autres pages sur : controler relais via port parallele

a b L Programmation
18 Septembre 2006 13:20:47

Ce out, est apparemment le même qu'en assembleur.

Sinon, je te suggère d'utiliser les masques OR pour construire ta valeurs, et les masques AND pour analyser une réponse.
Les valeurs avec un seul bit sont 1,2,4,8,16,32,64 et 128.
Il te suffit d'utiliser 8 variables (une par sorties): sortie1, ..., sortie8, que tu mets à 0 ou 1 selon l'activation.
donc:
  1. valeur = sortie1 or (sortie2 * 2) or (sortie3 * 4) or (sortie4 * 8) or (sortie5 * 16) or (sortie6 * 32) or (sortie7 * 64) or (sortie8 * 128)

si on prend par exemple sortie2 à 1 et sortie8 à 1, le reste à 0, tu auras:
valeur = 1*2 or 1*128 = (00000010)b OR (10000000)b = (10000010)b
Pour résumer, OR c'est un masque qui allume des bits sur une valeur

Ensuite, pour lire, si tu veux savoir si la sortie 5 est allumée, il te suffit de faire le test suivant:
  1. ((valeur and 16) == 16)

par exemple si valeur = (10111011)b, alors
valeur and 16 = (10111011)b AND (00010000)b = (00010000)b
Pour résumer, AND c'est le masque qui n'allume que les bits en communs.

19 Septembre 2006 13:09:39

merci, mais en fait moi ce que j'aimerais c'est dans l'interface, avoir les 8 sorties et un bouton on/off en face de chacunes d'elles donc est-il possible par exemple d'aller lire, sur le port la valeur en cours par exemple on veut allumer D2 et D1 est deja activé le programme vas lire sur le port 1000000 et sur le bouton de D2 on met une condition si D2 n'est pas actif on l'allume et si elle l'est, on l'eteint.
Donc en appuyant sur ce bouton la valeur se transformerait en 11000000 pour l'activer, et inversement pour l'eteindre...
Parce que suand je veux aller lire sur le port je n'obtient pas un chiffre binaire mais un chiffre allant de 0 à 255, alors quelle valeur dois ajouter à ce chiffre pour allumer D2 ?
Est ce que je dois ajouter la valeur "2" à la valeur en cours ou si je veux allumer D7 par exemple dois-je ajouter la valeur "64" ?
Si non, quelle est la méthode à utiliser ?
Contenus similaires
a b L Programmation
19 Septembre 2006 19:21:49

En gros, sur l'action de ton bouton D2:
- Tu lis le port, qui par exemple te retourne val=128 (ce qui correspond à 10000000b, soit D1 activé)
- Tu es sur l'action du D2, donc tu veux tester le bit 01000000b ce qui correspond à 64.
Pour savoir si D2 est activé, tu enlèves tous les autres bits, c'est-à-dire que tu applique un masque ET avec ta valeur. Tous les nombre étant codés derrière en binaire même si tu les vois et manipules en décimal, donc tu peux faire des opérations binaires sur tous les nombres (même si tu ne les vois qu'en décimal)
Donc tu fais "val and 64" qui retourne
* soit 0 (00000000b) qui signifie que ton bit est à 0
* soit 64 (01000000b) qui signifie que ton bit est à 1
Donc, quand tu reçoit la valeur, il te suffit de faire le test:
  1. if (val and 64) = 64 ...

- Supposons que le bit soit à 0, tu veux, je suppose, allumer ce bit, en conservant les autres. Pour cela, il te suffit de faire un masque OU sur les bits:
  1. val = (val or 64)

Dans l'exemple précédent, on a récupéré 128 auquel on fait un OU binaire avec 64, ce qui donne 192.

Donc, je répète, même si tu as un nombre décimal, en informatique tout est binaire, donc on peut y appliquer les opérations binaires ET (AND) et OU (OR).
Et il vaut mieux utiliser OR que fait une addition, car si un même bit des 2 valeurs sont à 1, 01b + 01b = 10b, alors que 01b OR 01b = 01b

Je rappelle ces opérations binaires:
0 OR 0 = 0
0 OR 1 = 1
1 OR 0 = 1
1 OR 1 = 1
(il suffit qu'un bit soit à 1 pour que le résultat soit à 1)

0 AND 0 = 0
0 AND 1 = 0
1 AND 0 = 0
1 AND 1 = 1
(il suffit qu'un bit soit à 0, pour que le résultat soit 0).
19 Septembre 2006 20:42:08

excelent ! moi qui est un gros newb dans ce domaine, tu m'es d'une trés grand aide c'est super !
tu m'as super bien expliqué et je vais essayé de m'y mettre dès que j'aurais le temps nécessaire... merci bcp ;) 
6 Juillet 2007 21:06:23

bonjour,

j'ai le même projet en tête mais le problème c'est que j'y connais rien en programmation pour ce genre de chose, j'aimerais donc savoir si quelqu'un d'entre vous pourrais me créer ce genre de logiciel? vous me direz tous que je peux en trouver sur google mais j'aimerais que ce logiciel est une pointe personelle! si quelqu'un est ok faites moi signe et on prendra contact par msn

je vous remercie par avance ;-)
a b L Programmation
6 Juillet 2007 21:41:39

Pour qu'il ait une "pointe personnelle", fait le toi-même.
Tu n'as qu'à chercher les docs qui vont biens.
9 Juillet 2007 14:39:32

oui c'est sur que tu n'as pas tord, lol, mais quand je dis personelle, je veux juste dire par là que ça sois fait "main" pour avoir des choses que les logiciels tout fait n'ont pas forcément, je serais bien partant pour faire ce logiciel moi même mais il me faudrait beaucoup d'aide car j'y connais rien du tout en programmation!!! que faut il comme logiciel pour faire ce genre de logiciel? hardsnap3 et CRicky (ou même d'autres!! lol) seriez vous partant pour m'aider par msn quand j'en aurai besoin? si oui pouvez m'envoyer vos adresse msn en message pv si ça vous dérange pas? je vous remerci a+

9 Juillet 2007 15:21:48

ben moi je t'avoue que depuis ce " petit programme" je n'ai rien fait d'autres, je n'accroche pas vraiment a la programmation. Donc à part faire ce que j'ai fait je ne sais pas faire grand chose dans ce domaine ^^
CRicky serait plus apte a t'aider car avec moi ce qu'il m'a dit m'a été d'une tres grande aide, la saeule dailleur, c'est grace a ses conseils que j'ai réussi, avant je n' avaisjamais touché à tout ça donc le mieux c'est que tu dl Microsoft visual basic, que tu relises la conversation que Cricky et moi avons eu plus haut et que tu mettes les maisn dans le camboui ;)  ...c'est pas tres sorcier tu verras
9 Juillet 2007 20:05:52

ok, merci tu me rassure un peu alors, lol, je testerais ça
a+
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS