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
}
}
}