MUX 16 canaux connecté aux ports analogique

Bonjour,

Pour un projet, j aimerai mesurer l état de 64 interrupteurs. J ai choisi d utiliser 4 SparkFun Analog/Digital MUX Breakout - CD74HC4067 - Link

Donc 4x16, je suis bon. Je peux contrôler les 64 interrupteurs avec 9 pin Arduino.
Les quatre MUX on les PIN SIG, S0, S1, S2, S3 reliés.

const byte MUX_ADDR [4] = {A3, A2, A1, A0};
const byte MUX_ENABLE [4] = {11, 10, A6, A7};
const byte MUX_SIG (12);
const byte MUX_CHANNEL[16][4] = {
  {0, 0, 0, 0},
  {1, 0, 0, 0},
  {0, 1, 0, 0},
  {1, 1, 0, 0},
  {0, 0, 1, 0},
  {1, 0, 1, 0},
  {0, 1, 1, 0},
  {1, 1, 1, 0},
  {0, 0, 0, 1},
  {1, 0, 0, 1},
  {0, 1, 0, 1},
  {1, 1, 0, 1},
  {0, 0, 1, 1},
  {1, 0, 1, 1},
  {0, 1, 1, 1},
  {1, 1, 1, 1}
};

void setup() {
  Serial.begin(9600);

  for (byte i = 0; i < 4; i++) {
    pinMode (MUX_ADDR [i], OUTPUT);
    digitalWrite(MUX_ADDR [i], LOW);
    pinMode (MUX_ENABLE [i], OUTPUT);
  }
  pinMode (MUX_SIG, INPUT_PULLUP);
  digitalWrite(MUX_ENABLE [0], HIGH);
  digitalWrite(MUX_ENABLE [1], HIGH);
  digitalWrite(MUX_ENABLE [2], HIGH);
  digitalWrite(MUX_ENABLE [3], LOW);
}

void loop() {
  Serial.println("");
  Serial.println("01\t02\t03\t04\t05\t06\t07\t08\t09\t10\t11\t12\t13\t14\t15\t16");
  Serial.println("--\t--\t--\t--\t--\t--\t--\t--\t--\t--\t--\t--\t--\t--\t--\t--");

  for (int i = 0; i < 16; i++) {
    digitalWrite(MUX_ADDR [0], MUX_CHANNEL [i][0]);
    digitalWrite(MUX_ADDR [1], MUX_CHANNEL [i][1]);
    digitalWrite(MUX_ADDR [2], MUX_CHANNEL [i][2]);
    digitalWrite(MUX_ADDR [3], MUX_CHANNEL [i][3]);

    Serial.print(digitalRead(MUX_SIG));
    Serial.print("\t");
  }

  delay(3000);
}

J active les MUX les uns après les autres en activant et de-activant les pin enable. Une partie des pin sont connecté a des port digitaux et l autre partie a des ports analogique.
Avec les ports digitaux aucun problème, Mais avec les port analogique je n arrive pas a désactiver les MUX.
HIGH pour de-activer et LOW pour activer.
J ai essayé avec analogWrite, mais ça ne change rien.

Je pensais pas avoir ce problème et j ai déjà soudé tous mes composants, galère de changer les connexions de plus j aimerai bien comprendre pourquoi ça réagi comme ça.

Auriez une idee ?

Merci

Bonsoir greg06

Je ne sais pas si j'ai tout bien cerné ... mais ... je me lance ...

Possible que ton problème soit du coup ... une "mauvaise" polarisation de tes entrées S0,S1,S2,S3 !

Alors j'ai bien compris par contre que tout est soudé .....mais

Pourquoi ne pas essayer de monter 4 résistances 10K donc sur A3, A2, A1, A0 vers la MASSE !?

PS: si ça pète c'est pas moi !! :stuck_out_tongue_winking_eye:

Bon courage et Bonne Prog

Bonjour,

A6 et A7 sont uniquement des entrées analogiques.
Elles ne peuvent pas être utilisées comme entrées-sorties digitales.

Une cascade de 4 MCP23017 16bits aurait été encore plus économique en nombre de pins : I2C donc 2.
Le MCP23017 possède 3 pins d'adresse, donc on peut en connecter 8.

Arch.... Je l avais pas vu venir celle là
Tous les ports analogique sont bon sauf A6 et A7.
Donc pas d autre choix que le de-soudage.
MERCI
image

Pétard je ne connaissais pas, effectivement ça aurait été plus simple.
Pour un prochain projet.
Merci