Bonjour,
Je crée ce sujet après quelques recherches, puisqu'il m'est impossible de trouver une solution à mon problème. Alors voilà, j'utilise le multiplexeur ADG406BNZ (datasheet consultable ici:https://www.mouser.fr/ProductDetail/Analog-Devices/ADG406BNZ?qs=BpaRKvA4VqER4ToTF2Rawg%3D%3D) pour rediriger les différents pins d'une carte SD vers un circuit analogique qui trace sa caractéristique courant-tension, puis passe au pin suivant. J'ai connecté le multiplexeur à l'arduino et l'alim +/-9V comme suit:
Les 4 broches de contrôle de la sortie sont donc connectées aux pins "digital" de ma Arduino Due. Le EN pour "Enable" est connecté également au pin digital 24. J'ai ensuite écrit ce code dans l'environnement Arduino IDE afin de procéder à la sélection du pin voulu:
const int pinA0 = 30;
const int pinA1 = 31;
const int pinA2 = 32;
const int pinA3 = 33;
const int pinEnable = 24;
// ... le reste de mes déclarations
void setup() {
Serial.begin(9600);
delay(500);
// Configuration des broches en sortie
pinMode(pinA0, OUTPUT);
pinMode(pinA1, OUTPUT);
pinMode(pinA2, OUTPUT);
pinMode(pinA3, OUTPUT);
pinMode(pinEnable, OUTPUT);
// Activer le multiplexeur en mettant la broche EN à HIGH
digitalWrite(pinEnable, HIGH);
}
// Fonction pour sélectionner la voie du multiplexeur
void selectChannel(int channel) {
switch (channel) {
case 1:
digitalWrite(pinA0, LOW);
digitalWrite(pinA1, LOW);
digitalWrite(pinA2, LOW);
digitalWrite(pinA3, LOW);
break;
case 2:
digitalWrite(pinA0, HIGH);
digitalWrite(pinA1, LOW);
digitalWrite(pinA2, LOW);
digitalWrite(pinA3, LOW);
break;
case 3:
digitalWrite(pinA0, LOW);
digitalWrite(pinA1, HIGH);
digitalWrite(pinA2, LOW);
digitalWrite(pinA3, LOW);
break;
case 4:
digitalWrite(pinA0, HIGH);
digitalWrite(pinA1, HIGH);
digitalWrite(pinA2, LOW);
digitalWrite(pinA3, LOW);
break;
case 5:
digitalWrite(pinA0, LOW);
digitalWrite(pinA1, LOW);
digitalWrite(pinA2, HIGH);
digitalWrite(pinA3, LOW);
break;
case 6:
digitalWrite(pinA0, HIGH);
digitalWrite(pinA1, LOW);
digitalWrite(pinA2, HIGH);
digitalWrite(pinA3, LOW);
break;
case 7:
digitalWrite(pinA0, LOW);
digitalWrite(pinA1, HIGH);
digitalWrite(pinA2, HIGH);
digitalWrite(pinA3, LOW);
break;
case 8:
digitalWrite(pinA0, HIGH);
digitalWrite(pinA1, HIGH);
digitalWrite(pinA2, HIGH);
digitalWrite(pinA3, LOW);
break;
// case 4, case 5, case 6, case 7, case 8, etc.
default:
// Par défaut, on met toutes les broches à LOW si un canal invalide est donné, je met ça puisqu'on m'a toujours appris à traiter le default case mais je ne vois pas l'intérêt ici puisque j'appelle ensuite "manuellement" la fonction pin par pin dans mon loop
digitalWrite(pinA0, LOW);
digitalWrite(pinA1, LOW);
digitalWrite(pinA2, LOW);
digitalWrite(pinA3, LOW);
break;
}
}
void loop() {
selectChannel(1);
// reste de mon code pour tracer la caractéristique
selectChannel(2);
// même code pour tracer la seconde caractéristique
// et ainsi de suite...
}
J'ai voulu d'abord tester avec 2 pins. J'ai l'impression que la caractéristique courant tension du premier pin est la bonne, mais lors du tracé de la deuxième, j'ai la même caractéristique. Je reste donc constamment sur le même pin. Je pense donc que mes pins A0,A1,A2, et A3 restent en "LOW" sans jamais changer d'état vers "HIGH".
Quelqu'un aurait une idée de comment fixer ça ?
Merci d'avance!





