Test de continuité

Bonjour tout le monde !
Je dispose d'une carte arduino mega 2560 sur laquelle j'ai branché 16 entrées/sorties numériques,
En ce qui concerne le schéma : je dispose de 4 démultiplexeurs et 4 multiplexeurs. Chacune des broches de mes 4 démultiplexeurs (16 sorties) sont branchés sur 64 connecteurs à l'avant d'un instrument à tester. De l'autre coté de cet instrument (à l'arriere), il y a les memes 64 connecteurs qui sont censés être reliés à ceux de l'avant => c'est ce que je dois vérifier. J'ai donc branché 4 multiplexeurs (16 entrées) à l'arriere de l'instrument sur chaque broches de ces 64 connecteurs.

Les 16 entrées/sorties numériques sur la carte sont :

  • 4 pour le bus d'adresse des demultiplexeurs ( les bits d'adresses A des 4 demux sont reliés entre eux, B également entre eux, C entre eux et D aussi)
  • 4 pour les 4 chip select des demux
  • 4 pour le bus d'adresse des mux, branchés entre eux de la meme manière que les demux
  • 4 pour récuperer les 4 signaux de sorties des mux
    petite précision :
  • la sortie correspondant a l'adresse 0 de mon demux n°1 est reliée a l'entrée correspondant a l'adresse 0 de mon mux n°1,
    la sortie correspondant a l'adresse 1 de mon demux n°1 est reliée a l'entrée correspondant a l'adresse 1 de mon mux n°1 etc...
  • les enable des mux sont reliés au 5V (ils doivent etre tout le temps actif pour pouvoir détecter des courts circuits eventuels)
  • un niveau haut est envoyé en sortie du demux selon l'adresse sélectionné lorsque son chip select est a l'etat bas
  • le mux inverse le signal de l'entrée active en sortie

J'aimerais améliorer le code ci dessous afin de pouvoir rajouter un test qui me permettrait de savoir si il y a des circuits ouvert, courts circuit entre broche ou si tout va bien, pour chacune des broches. Pour l'instant il ne fait que balayer toutes les connexions entre elles. J'ai d'abord pensé a faire un tableau de dimension 4096*4 pour ensuite tester chacune des connexions mais cela me parrait bien compliqué pour cette application.. J'espere avoir été clair.. Merci !

byte adresseDemux=0; // octect contenant le bus d'adresse des demultiplexeurs
byte adresseMux=0; // octect contenant le bus d'adresse des multiplexeurs
byte selectDemux=0x7F; // octect contenant les 4 chip select des 4 demultiplexeurs (0111 1111)
byte outMux=0; // octect contenant les 4 bits de sorties des multiplexeurs

void setup() 
{
 // Declaration des entrées/sorties numériques
   // Bus d'adresse des demultiplexeurs
    for (int i=0; i<4; i++)
    {
     pinMode(22+i, OUTPUT);
    }
   // Bus d'adresse des multiplexeurs
    for (int i=0; i<4; i++)
    {
     pinMode(36+i, OUTPUT);
    }
   // Bits chip select des 4 demultiplexeurs 
    for (int i=0; i<4; i++)
    {
     pinMode(31+i, OUTPUT);
    }    
   // Bits de sorties des 4 multiplexeurs 
    for (int i=0; i<4; i++)
    {
     pinMode(27+i, INPUT);
    }    
}


void loop()
{
  // Affectation du bus d'adresse des demultiplexeurs dans la variable adresseDemux  
     for (int i=0; i<4; i++)
     {
      digitalWrite(22+i,bitRead(adresseDemux,i));
     }
   // Affectation du bus d'adresse des multiplexeurs dans la variable adresseMux
     for (int i=0; i<4; i++)
     {
      digitalWrite(36+i,bitRead(adresseMux,i));
     }
   // Affectation des chip select des demultiplexeurs dans la variable selectDemux
     for (int i=0; i<4; i++)
     {
      digitalWrite(36+i,bitRead(selectDemux,i));
     }
   // Affectation des bits de sortie des multiplexeurs dans la variable outMux
     for (int i=0; i<4; i++)
     {
      digitalWrite(36+i,bitRead(outMux,i));
     }

          
   //
     for (int i=0; i<4; i++) // repetition pour chaque demultiplexeur 
     {
      adresseDemux=0; // RAZ du bus d'adresse des demultiplexeurs
      adresseMux=0; // RAZ du bus d'adresse des multiplexeurs
      selectDemux = selectDemux<<1; // selection du demultiplexeur
       while (adresseDemux < 15) // repetition jusqu'a l'adresse 15 du demultiplexeur actif
       {
        for (int j=0; j<15; j++)
         {
          // ajout du test
          adresseMux++; // incrementation du bus d'adresse des multiplexeurs
         }
        adresseDemux++; // incrementation de l'adresse du demultiplexeur actif apres avoir balayé toutes les adresses des multiplexeurs
       }
     }
}

hello, je commence à regarder ton code ...
rien ne te choque

/ Affectation du bus d'adresse des multiplexeurs dans la variable adresseMux
     for (int i=0; i<4; i++)
     {
      digitalWrite(36+i,bitRead(adresseMux,i));//36,37,38,39
     }
   // Affectation des chip select des demultiplexeurs dans la variable selectDemux
     for (int i=0; i<4; i++)
     {
      digitalWrite(36+i,bitRead(selectDemux,i));
     }
   // Affectation des bits de sortie des multiplexeurs dans la variable outMux
     for (int i=0; i<4; i++)
     {
      digitalWrite(36+i,bitRead(outMux,i));
     }

Si biensur il y a un probleme avec les pins.. Je te remercie dfgh d'avoir soulevé ce premier probleme !

il y en a d'autres

regarde la correspondance des pins

// Affectation du bus d'adresse des demultiplexeurs dans la variable adresseDemux 
     for (int i=0; i<4; i++)
     {
      digitalWrite(22+i,bitRead(adresseDemux,i));//22,23,24,25 =>  PB3 PB4 PB5 PB6
     }
   // Affectation du bus d'adresse des multiplexeurs dans la variable adresseMux
     for (int i=0; i<4; i++)
     {
      digitalWrite(36+i,bitRead(adresseMux,i));//36,37,38,39 => PL1  PL2 PL3 PL4
     }
   // Affectation des chip select des demultiplexeurs dans la variable selectDemux
     for (int i=0; i<4; i++)
     {
      digitalWrite(31+i,bitRead(selectDemux,i));//31,32,33,34 => VCC GND XTAL2 XTAL1
     }
   // Affectation des bits de sortie des multiplexeurs dans la variable outMux
     for (int i=0; i<4; i++)
     {
      digitalWrite(27+i,bitRead(outMux,i));//27,28,29,30 => PH7 PG3 PG4 RESET
     }

et ton code ne fait rien

Pour l'instant il ne fait que balayer toutes les connexions entre elles.

ben non, tu comptes 4 fois 16 fois jusqu à 16.
mais tu n'adresses pas tes multiplexeurs .

for (int i=0; i<4; i++) // repetition pour chaque demultiplexeur
     {
      adresseDemux=0; // RAZ du bus d'adresse des demultiplexeurs
      adresseMux=0; // RAZ du bus d'adresse des multiplexeurs
      selectDemux = selectDemux<<1; // selection du demultiplexeur
       while (adresseDemux < 15) // repetition jusqu'a l'adresse 15 du demultiplexeur actif
       {
        for (int j=0; j<15; j++)
         {
          // ajout du test
          adresseMux++; // incrementation du bus d'adresse des multiplexeurs
         }
        adresseDemux++; // incrementation de l'adresse du demultiplexeur actif apres avoir balayé toutes les adresses des multiplexeurs
       }
     }

Il me semble que ca balaye si car les 4 multiplexeurs ont le enable d'activé et leurs bits d'adresses sont reliés entre eux ( les A0 entre eux, A1 entre eux etc) donc quand je donne l'adresse 0, ca l'envoie pour les 4 non ?

j'ai bien compris ton cablage, mais ton code ne fait pas ce que tu crois.

for (int i=0; i<4; i++) // repetition pour chaque demultiplexeur
tes compteur prennent bien toutes les valeurs qu'ils doivent prendre, mais tu ne les appliques jamais sur tes sorties, donc tu ne changes pas les adresses que tu à écrites en début de ta loop.

pour que ca marche, il faudrait qu'à chaque tour dans la boucle :
for (int j=0; j<15; j++)
{
// ajout du test
adresseMux++; // incrementation du bus d'adresse des multiplexeurs

tu appelles une fonction addmux(); (par exemple)

void addmux(){
for (int i=0; i<4; i++)
{
digitalWrite(36+i,bitRead(adresseMux,i));//36,37,38,39 => PL1 PL2 PL3 PL4
}}
dans ce cas, l'adresse est effectivement recopiée sur les entrées "adresses" des multiplexeurs

il en est de même pour les autres boucles (ou compteurs)

de plus j'attire ton attention sur le fait que les sorties que tu as choisies pour "sélectdemux" sont :31,32,33,34 et qu'elles correspondent respectivement à VCC GND XTAL2 XTAL1.

je pense que tu n'as pas effectué le cablage.

un autre point:

les enable des mux sont reliés au 5V (ils doivent etre tout le temps actif pour pouvoir détecter des courts circuits eventuels)

le fait que tes multiplexeurs soint tooujours validés, va faire qu'avec le bus d'adresses, tu surveillera les CC seulement sur les memes adresses mais pas sur les autres canaux.

tu surveilleras les 4 canaux 1, les 4 canaux 2, les 4 canaux 3 ...
mais pas le canal 1 avec les autres canaux.

il va te falloir changer de méthode de scrutation et probablement te donner la possibilité de sélectionner les multiplexeur séparément.

D'accord exact il faut que je réécrive à chaque fois sur mes sorties apres le changement de valeur de mes octets, merci ! Ensuite pour ce qui est du cablage je ne l'avais pas encore fais, mais cette fois ci il est fait et les broches de 22 a 53 sont des entrées/sorties numériques donc je ne vois pas pourquoi elles correspondraient à VCC, GND ou autre ?

void setup() 
{
 // Declaration des entrées/sorties numériques
   // Bus d'adresse des demultiplexeurs
    for (int i=0; i<4; i++)
    {
     pinMode(22+i, OUTPUT);
    }
   // Bus d'adresse des multiplexeurs
    for (int i=0; i<4; i++)
    {
     pinMode(30+i, OUTPUT);
    }
   // Bits chip select des 4 demultiplexeurs 
    for (int i=0; i<4; i++)
    {
     pinMode(26+i, OUTPUT);
    }    
   // Bits de sorties des 4 multiplexeurs 
    for (int i=0; i<4; i++)
    {
     pinMode(34+i, INPUT);
    }    
}


void loop()
{
  // Affectation du bus d'adresse des demultiplexeurs dans la variable adresseDemux  
     for (int i=0; i<4; i++)
     {
      digitalWrite(22+i,bitRead(adresseDemux,i));
     }
   // Affectation du bus d'adresse des multiplexeurs dans la variable adresseMux
     for (int i=0; i<4; i++)
     {
      digitalWrite(30+i,bitRead(adresseMux,i));
     }
   // Affectation des chip select des demultiplexeurs dans la variable selectDemux
     for (int i=0; i<4; i++)
     {
      digitalWrite(26+i,bitRead(selectDemux,i));
     }
   // Affectation des bits de sortie des multiplexeurs dans la variable outMux
     for (int i=0; i<4; i++)
     {
      digitalWrite(34+i,bitRead(outMux,i));
     }

Et je crois bien que laisser les 4 mux actifs n'est pas un problème car par exemple, en admettant que j'ai rajouté ta fonction la où il faut pour que le code marche, la suite de combinaison que je devrais obtenir sur outMux (qui contient les 4 sorties des mux) est :

1110
0000 ( 16 fois )
1110
0000 (16 fois )
etc jusqu'a arrivé au passage du second demux :
1101
0000 (16 fois)
1101
0000 (16 fois)
etc..

Donc si je stock les combinaisons que j'obtiens et que je les compare au tableau ci dessus je devrais pouvoir trouver les CC, non ? Admettons qu'au deuxième coup je trouve 0010 alors qu'on a vu au dessus que je devais trouver 0000, je pourrais dire qu'il y a un CC entre l'adresse 0 du demux 1 et l'adresse 1 du mux 2, non ? puis si j'avais obtenu 0100 ca aurait été l'adresse 1 du mux 3, etc.. ?

hello
ok pour le test de CC

Bonjour dfgh ! j'ai modifié mon code en prenant en compte tes conseils ! Avant de me lancer dans le test de continuité, est ce que le code te parait correct maintenant ? (Je mettrais les fonctions dans une bibliotheque plus tard), il me manque juste la derniere fonction dont je ne suis pas sur, j'aimerais qu'elle lise la valeur des sorties des Mux avant de d'ecrire la valeur dans ma variable

byte adresseDemux=0; // octect contenant le bus d'adresse des demultiplexeurs
byte adresseMux=0; // octect contenant le bus d'adresse des multiplexeurs
byte selectDemux=0x7F; // octect contenant les 4 chip select des 4 demultiplexeurs (0111 1111)
byte outMux; // octect contenant les 4 bits de sorties des multiplexeurs

void writeAdresseDemux()
{
    for (int i=0; i<4; i++)
    {
     digitalWrite(22+i,bitRead(adresseDemux,i));
    }
}

void writeAdresseMux()
{
    for (int i=0; i<4; i++)
    {
     digitalWrite(30+i,bitRead(adresseMux,i));
    }
}

void writeSelectDemux()
{
    for (int i=0; i<4; i++)
    {
     digitalWrite(26+i,bitRead(selectDemux,i));
    }
}

void readAndWriteOutMux() // lis la valeur en sortie des mux et ecris la valeur sur outMux?
{
    for (int i=0; i<4; i++)
    {
     digitalRead(34+i);
     digitalWrite(34+i,bitRead(outMux,i));
    }
}



void setup() 
{
 // Declaration des entrées/sorties numériques
  // Bus d'adresse des demultiplexeurs, bus d'adresse des multiplexeurs, bits chip select des 4 demultiplexeurs
     for (int i=0; i<12; i++)
     {
      pinMode(22+i, OUTPUT);
     } 
     
  // Bits de sorties des 4 multiplexeurs
     for (int i=0; i<4; i++)
     {
      pinMode(34+i, INPUT);
     }    
     
  // Affectation des sorties numériques dans des variables (initialisees a 0)
     writeAdresseDemux(); // mise a jour de la valeur du bus d'adresse des demultiplexeurs dans la variable adresseDemux 
     writeAdresseMux(); // mise a jour de la valeur du bus d'adresse des multiplexeurs dans la variable adresseMux 
}


void loop()
{
     for (int i=0; i<4; i++) // repetition pour chaque demultiplexeur 
     {
      selectDemux = selectDemux<<1; // selection du demultiplexeur
      writeSelectDemux(); // mise a jour de la valeur des chip select des demultiplexeurs dans la variable selectDemux
       while (adresseDemux < 15) // repetition jusqu'a l'adresse 15 du demultiplexeur actif
       {
        for (int j=0; j<15; j++)
         {
          // AJOUT DU TEST
          adresseMux++; // incrementation du bus d'adresse des multiplexeurs
          writeAdresseMux(); // mise a jour de la valeur du bus d'adresse des multiplexeurs dans la variable adresseMux 
         }
        adresseDemux++; // incrementation de l'adresse du demultiplexeur actif apres avoir balayé toutes les adresses des multiplexeurs
        writeAdresseDemux(); // mise a jour de la valeur du bus d'adresse des demultiplexeurs dans la variable adresseDemux 
       }
      adresseDemux=0; // RAZ du bus d'adresse des demultiplexeurs
      writeAdresseDemux();
      adresseMux=0; // RAZ du bus d'adresse des multiplexeurs
      writeAdresseMux();
     }
}

hello
peux tu tester ce code et regarder ton moniteur à 115200bauds

byte adresseDemux=0; // octect contenant le bus d'adresse des demultiplexeurs
byte adresseMux=0; // octect contenant le bus d'adresse des multiplexeurs
byte selectDemux=0x7F; // octect contenant les 4 chip select des 4 demultiplexeurs (0111 1111)
byte outMux; // octect contenant les 4 bits de sorties des multiplexeurs

void writeAdresseDemux()
{
    for (int i=0; i<4; i++)
    {
     digitalWrite(22+i,bitRead(adresseDemux,i));
    }
}

void writeAdresseMux()
{
    for (int i=0; i<4; i++)
    {
     digitalWrite(30+i,bitRead(adresseMux,i));
    }
}

void writeSelectDemux()
{
    for (int i=0; i<4; i++)
    {
     digitalWrite(26+i,bitRead(selectDemux,i));
    }
}

void readAndWriteOutMux() // lis la valeur en sortie des mux et ecris la valeur sur outMux?
{
    for (int i=0; i<4; i++)
    {
     digitalRead(34+i);
     digitalWrite(34+i,bitRead(outMux,i));
    }
}



void setup()
{
  
  Serial.begin(115200);  
 // Declaration des entrées/sorties numériques
  // Bus d'adresse des demultiplexeurs, bus d'adresse des multiplexeurs, bits chip select des 4 demultiplexeurs
     
     for (int i=0; i<12; i++)
     {
      pinMode(22+i, OUTPUT);
     }
     
  // Bits de sorties des 4 multiplexeurs
     for (int i=0; i<4; i++)
     {
      pinMode(34+i, INPUT);
     }   
     
  // Affectation des sorties numériques dans des variables (initialisees a 0)
     writeAdresseDemux(); // mise a jour de la valeur du bus d'adresse des demultiplexeurs dans la variable adresseDemux
     writeAdresseMux(); // mise a jour de la valeur du bus d'adresse des multiplexeurs dans la variable adresseMux
}


void loop()
{
     for (int i=0; i<4; i++) // repetition pour chaque demultiplexeur
     {
      selectDemux = selectDemux<<1; // selection du demultiplexeur
      Serial.print("selectDemux =  ");Serial.println(selectDemux);
      }/*

moniteur ? si tu veux que je le teste sur un debuggeur je n'en ai pas, je peux simplement " Vérifier " la syntaxe avec le logiciel arduino

Il faut utiliser le moniteur série de l'IDE Arduino réglé sur 115200bauds.

D'accord merci de ta reponse ! Mais l'instrument n'est pas disponible pour le moment, je ne peux pas effectuer le cablage, que voulez tu verifier dfgh ?

j'ai modifié ton prg pour te montrer que ta 1ere ligne de code ne peux pas fonctionner.

ta variable vaut zéro et tu shift à gauche en pensant décaler une valeur

charge le code compile le téléverse le et regarde ton moniteur

( en haut à droite de la fenetre de l'ide arduino, il y a une loupe . tu cliques dessus. le moniteur s'ouvre et tu regles la vitesse de transmission à 115200 bauds (en bas de la fenetre moniteur)
quelques secondes après le clique sur la loupe, tu verras ...

Ah d'accord ! Mais pourquoi la variable vaut 0 si je l'initialise a 0x7F ??

byte adresseDemux=0; // octect contenant le bus d'adresse des demultiplexeurs
byte adresseMux=0; // octect contenant le bus d'adresse des multiplexeurs
byte selectDemux=0x7F; // octect contenant les 4 chip select des 4 demultiplexeurs (0111 1111)
byte outMux; // octect contenant les 4 bits de sorties des multiplexeurs

void writeAdresseDemux()
{
    for (int i=0; i<4; i++)
    {
     digitalWrite(22+i,bitRead(adresseDemux,i));
    }
}

void writeAdresseMux()
{
    for (int i=0; i<4; i++)
    {
     digitalWrite(30+i,bitRead(adresseMux,i));
    }
}

void writeSelectDemux()
{
    for (int i=0; i<4; i++)
    {
     digitalWrite(26+i,bitRead(selectDemux,i));
    }
}

void readAndWriteOutMux() // lis la valeur en sortie des mux et ecris la valeur sur outMux?
{
    for (int i=0; i<4; i++)
    {
     digitalRead(34+i);
     digitalWrite(34+i,bitRead(outMux,i));
    }
}



void setup()
{Serial.begin(115200);  
 // Declaration des entrées/sorties numériques
  // Bus d'adresse des demultiplexeurs, bus d'adresse des multiplexeurs, bits chip select des 4 demultiplexeurs
     for (int i=0; i<12; i++)
     {
      pinMode(22+i, OUTPUT);
     }
     
  // Bits de sorties des 4 multiplexeurs
     for (int i=0; i<4; i++)
     {
      pinMode(34+i, INPUT);
     }   
     
  // Affectation des sorties numériques dans des variables (initialisees a 0)
     writeAdresseDemux(); // mise a jour de la valeur du bus d'adresse des demultiplexeurs dans la variable adresseDemux
     writeAdresseMux(); // mise a jour de la valeur du bus d'adresse des multiplexeurs dans la variable adresseMux
}


void loop()
{
     for (int i=0; i<4; i++) // repetition pour chaque demultiplexeur
     {
      selectDemux = selectDemux<<1; // selection du demultiplexeur
      Serial.print("selectDemux =  ");Serial.println(selectDemux);
      delay(1000);
      writeSelectDemux(); // mise a jour de la valeur des chip select des demultiplexeurs dans la variable selectDemux
       while (adresseDemux < 15) // repetition jusqu'a l'adresse 15 du demultiplexeur actif
       {
        for (int j=0; j<15; j++)
         {
          // AJOUT DU TEST
          adresseMux++; // incrementation du bus d'adresse des multiplexeurs
          Serial.print("adresseMux =  ");Serial.println(adresseMux);
          writeAdresseMux(); // mise a jour de la valeur du bus d'adresse des multiplexeurs dans la variable adresseMux
         }
        adresseDemux++; // incrementation de l'adresse du demultiplexeur actif apres avoir balayé toutes les adresses des multiplexeurs
         Serial.print("adresseDemux =  ");Serial.println(adresseDemux);
        writeAdresseDemux(); // mise a jour de la valeur du bus d'adresse des demultiplexeurs dans la variable adresseDemux
       }
      adresseDemux=0; // RAZ du bus d'adresse des demultiplexeurs
      writeAdresseDemux();
      adresseMux=0; // RAZ du bus d'adresse des multiplexeurs
      writeAdresseMux();
     }
}

J'ai testé ton programme et effectivement il y a un probleme au niveau de la variable selectDemux et adresseMux. J'ai changé d'endroit la RAZ de adresse Mux donc ce soucis est réglé. Mais je ne comprend toujours pas pourquoi selectDemux ne prend pas la valeur que je lui donne en debut de programme ...

ce n'est pas mon prg, c'est le tiens avec uniquement ajout de serial print
le but est de te montrer comment débuger... voir ce que fais ton prg...

voici une nouvelle version, affichage moniteur modifié:
pour avoir en hexa et binaire

en fin la façon de n'exécuter qu'une seule fois la loop
et une suggestion pour remettre la valeur de SelectDemux avant de recommencer la loop

ce n'est qu'une suggestion, il faut encore que ce soit ce que tu veux faire

byte adresseDemux=0; // octect contenant le bus d'adresse des demultiplexeurs
byte adresseMux=0; // octect contenant le bus d'adresse des multiplexeurs
byte selectDemux=0x7F; // octect contenant les 4 chip select des 4 demultiplexeurs (0111 1111)
byte outMux; // octect contenant les 4 bits de sorties des multiplexeurs

void writeAdresseDemux()
{
    for (int i=0; i<4; i++)
    {
     digitalWrite(22+i,bitRead(adresseDemux,i));
    }
}

void writeAdresseMux()
{
    for (int i=0; i<4; i++)
    {
     digitalWrite(30+i,bitRead(adresseMux,i));
    }
}

void writeSelectDemux()
{
    for (int i=0; i<4; i++)
    {
     digitalWrite(26+i,bitRead(selectDemux,i));
    }
}

void readAndWriteOutMux() // lis la valeur en sortie des mux et ecris la valeur sur outMux?
{
    for (int i=0; i<4; i++)
    {
     digitalRead(34+i);
     digitalWrite(34+i,bitRead(outMux,i));
    }
}



void setup()
{Serial.begin(115200); 
 // Declaration des entrées/sorties numériques
  // Bus d'adresse des demultiplexeurs, bus d'adresse des multiplexeurs, bits chip select des 4 demultiplexeurs
     for (int i=0; i<12; i++)
     {
      pinMode(22+i, OUTPUT);
     }
     
  // Bits de sorties des 4 multiplexeurs
     for (int i=0; i<4; i++)
     {
      pinMode(34+i, INPUT);
     }   
     
  // Affectation des sorties numériques dans des variables (initialisees a 0)
     writeAdresseDemux(); // mise a jour de la valeur du bus d'adresse des demultiplexeurs dans la variable adresseDemux
     writeAdresseMux(); // mise a jour de la valeur du bus d'adresse des multiplexeurs dans la variable adresseMux
}


void loop()
{
     for (int i=0; i<4; i++) // repetition pour chaque demultiplexeur
     {
      Serial.print("selectDemux avant shift gauche==  ");Serial.println(selectDemux,HEX);
      selectDemux = selectDemux<<1; // selection du demultiplexeur
      Serial.print("selectDemux apres shift gauche =  ");Serial.println(selectDemux,HEX);
      Serial.print("selectDemux en binaire            ");Serial.println(selectDemux,BIN);
      Serial.println(" ");
      delay(1000);
      writeSelectDemux(); // mise a jour de la valeur des chip select des demultiplexeurs dans la variable selectDemux
       while (adresseDemux < 15) // repetition jusqu'a l'adresse 15 du demultiplexeur actif
       {
        for (int j=0; j<15; j++)
         {
          // AJOUT DU TEST
          adresseMux++; // incrementation du bus d'adresse des multiplexeurs
          //Serial.print("adresseMux =  ");Serial.println(adresseMux);
          writeAdresseMux(); // mise a jour de la valeur du bus d'adresse des multiplexeurs dans la variable adresseMux
         }
        adresseDemux++; // incrementation de l'adresse du demultiplexeur actif apres avoir balayé toutes les adresses des multiplexeurs
         //Serial.print("adresseDemux =  ");Serial.println(adresseDemux);
        writeAdresseDemux(); // mise a jour de la valeur du bus d'adresse des demultiplexeurs dans la variable adresseDemux
       }
      adresseDemux=0; // RAZ du bus d'adresse des demultiplexeurs
      writeAdresseDemux();
      adresseMux=0; // RAZ du bus d'adresse des multiplexeurs
      writeAdresseMux();
     }
     //selectDemux=0x7F;
     while(1){};
}

Oui d'accord j'avais bien compris je me suis mal exprimé j'aurais du dire avec les modifications que tu as faites sur mon programme ^^. En fait dans le loop il y aura au tout debut un test qui lancera tout le code que je t'ai envoyé sous condition d'appui sur un bouton poussoir, et donc j'aimerais que lorsque j'appuie, adresseDemux soit égal a 0111 1111 (0x7F) comme ca avec le décalage il fera 1111 1110, et comme sur mon byte adresseDemux les 4 premiers bits sont reliés a des chip select je changerais de Demux a chaque retour sur la boucle for. Je pense que tu avais largement compris tout ca mais c'etait pour etre sur qu'on se comprenne :slight_smile: !