Changement de bit sur le port parallèle "detection du front montant ou descendan
cs_Jacky7
Messages postés63Date d'inscriptionmardi 13 mai 2008StatutMembreDernière intervention22 juin 2011
-
11 juin 2008 à 18:29
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 2014
-
17 juin 2008 à 13:38
Bonsoir à tous,
J'ai realisé un programme qui permet de lire et de convertir la valeur du port de décimal en binaire (bit de donnés de DO à D7) toutes les 500ms.
J'effectue une première lecture et j'enregistre sa valeur (en binaire) puis 500ms plus tard je relis la valeur du port que j'enregistre également puis je fais une comparaison entre ces deux valeurs (et réalise une tâche en fonction du changement de bits) et ainsi de suite.
Mon problème est que j'aimerais savoir s'il serait possible de "detecter" seulement un passage de 0 à 1 et de laisser de côté le passage de 1 à 0 ou inversement ? (car mon prog compte deux changement de bits et realisé les actions en double)
J'espère que ce que je raconte est compréhensible
Est ce que tu aurais une idée sur la façon dont je peut m'y prendre ?
Merci.
A voir également:
Changement de bit sur le port parallèle "detection du front montant ou descendan
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 11 juin 2008 à 19:32
Puisque tu compare 2 valeurs (la précédente et l'actuelle), que t es capable de détecter quel bit à changer d'état, tu dois donc pouvoir dire quel état il avait avant, et quel état il a maintenant. Et donc par conséquent s'il est passé de 0 à 1 ou de 1 à 0
D'ailleurs, si on part du principe que lorsque tu détecte qu'un bit change bien d'état, c'est qu'il a réellement changé d'état, que un bit ne peut avoir que 2 état, 0 ou 1, si on raisonne comme un simplet, on va dire que si le bit est à 1, c'est qu'il était à0 et que s'il est à 0 c'est qu'il était à 1.
Chose aisément vérifiable, puisque tu as mémorisé la valeur précédente
cs_Jacky7
Messages postés63Date d'inscriptionmardi 13 mai 2008StatutMembreDernière intervention22 juin 20113 12 juin 2008 à 00:01
Salut Casy,
Effectivement je compare les deux valeurs avec ce morceau de code :
Dim sSource As String
Dim iboucle As Integer
sSource = PortBin1
sCompare = Text5
For iboucle = 1 To 8 Step 1
' test compare
If Mid$(sSource, iboucle, 1) <> Mid$(sCompare, iboucle, 1) Then
MsgBox "Changement de valeur à la position : " & iboucle
Select Case iboucle
Mon problème est que je modifie cette valeur à l'aide d'un bouton poussoir, lorsque que j'appuie il y a 1 changement de bit (par ex bit 1 passe de 1 à 0) et lorsque je relache il y a un deuxième changement (le passage du même bit de 1 à 0), mais je voudrais que mon prog ne voit qu'un seul changement et non deux.
Par exemple :
00000001 -> 00000000 Msgbox "le bit DO à été modifié" mais lorsque
00000000 -> 00000001 rien ne se passe
Le but serait en fait de detecter seulement les fronts montant ou descendant du changement de bit.
Est ce que tu aurais une idée sur la façon dont je peut m'y prendre ?
Merci.
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 12 juin 2008 à 13:57
Si je comprend bien, lorsque tu clique sur ton bouton, ton bit passe de 1 à 0 puis revient à 1.
Lorsque tu relache le bouton, il passe à nouveau de 1 à 0 puis revient à 1.
Dans ce cas, il te faut mémoriser l'état de ton bit avec un flag par exemple (variable globale, ou variable statique).
Au premier changement, tu passe ton flag à 1 et, puisque le flag est à1, tu execute ta procedure.
Au second changement, tu passe ton flag à 0 et donc, puisque ton flag est à 0 , tu ne fais rien d'autre.
cs_Jacky7
Messages postés63Date d'inscriptionmardi 13 mai 2008StatutMembreDernière intervention22 juin 20113 12 juin 2008 à 15:16
Salut Casy,
Desolé j'ai fait une petite erreur dans mon explication :
Mon problème est que je modifie cette valeur à l'aide d'un bouton poussoir, lorsque que j'appuie sur le bouton il y a 1 changement de bit (par ex bit n°1 passe de 1 à 0 et reste a zéro tant que je reste appuyé) et lorsque je relache il y a un deuxième changement (le passage du même bit de 0 à 1 revient à son état initial), mais je voudrais que mon prog ne voit qu'un seul changement et non deux.
Jacky.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 12 juin 2008 à 17:35
Ben alors tout était dit dans ma première réponse !!!!!
Si ton bit est à 1, c'est qu'il vient de passer de 0 à 1. S'il est à 0 c'est qu'il vient de passer de 1 à 0.
Il te suffit donc de tester son état actuel pour connaitre le sens du changement, et par conséquent, en fonction de son état actuel, appeler ou non ta procédure.
cs_Jacky7
Messages postés63Date d'inscriptionmardi 13 mai 2008StatutMembreDernière intervention22 juin 20113 17 juin 2008 à 13:31
Salut Casy,
Effectivement la solution que tu me proposes parait l'idéale, seulement dans mon programme je sais déterminer quel bit a changé par rapport à sa position mais je n'arrive décidement pas à tester la valeur du bit pour définir son changement d'état ( de 0 à 1 ou 1 à 0, mon prog me dit seulement changement de valeur à la position 1 par exemple mais je ne sais absolument la valeur qu'il a au moment venu).
J'aimerais pouvoir tester la valeur du bit mais je ne vois pas comment m'y prendre.