multiplexeur ou demultiplexeur

Bonjour,
Je souhaitai augmenter le nombre d'entrées d'un arduino, d'après ce que j'ai lu, c'est possible avec un multplexeur (ou demultiplexeur je confond) de code en binaire de façon à pouvoir traiter 16 cas avec 4 pin arduino utilisé.
Par exemple : une sortie du (de)multiplexeur envoie 1 0 1 0 (pin 1 high, pin 2 low, pin 3 high, pin 4 low - liée à l'arduino) quand j'appuie sur un bouton parmi les 16
Peut on lire ces entrées "simultanément" pour faire correspondre chaque cas à une tache exécutée par le programme ?
Quel composant utiliser ? Des exemples de code ?
Merci

Il y a le CD74HC4067 qui fonctionne avec cette bibliothèque : je n'ai jamais testé mais si tu cherches sur le forum, tu trouveras certainement des discussions sur le sujet.

Il existe deux type de multiplexeur/démultimlexeur : les numériques et les analogiques.

Les analogiques comme le 4067 sont bi-directionnels. Ils sont simultanément mux et demux.
Les numériques sont unidirectionnels, le signal ne peut passer que dans un sens soit 1 vers N soit N vers 1--> voir les datasheets.
Première conclusion : si les pins qu'on veut multiplexer peuvent être des entrées ou des sorties il faut un mux analogique.

Les analogiques laissent passer le signal sans intervenir dessus. Ils sont constitués de transistors FET avec un Rdson résiduel compris entre quelques kohms comme le vieux 4067 à quelques ohms pour des modèles plus récents.
Cette valeur de quelques kilo ohms n'est en général pas pénalisante.

Remarque personnelle : utiliser une bibliothèque pour gérer un HC4067 c'est un peu utiliser un marteau pilon pour enfoncer une punaise.
C'est pas bon pour économiser la flash qui est une ressource précieuse dans un microcontrôleur.

Les numériques font une remise en forme du signal.

Salut

D'après la description de ce que tu recherches, je pense qu'un encodeur serait plus adapté.
Le CD4532, par exemple. Il encode 8 entrées sur 3 bits.

Si tu recherche un encodeur 16 bits, je n'en connais pas, à moins de travailler en lignes / colonnes avec un 74C922. Cette solution est adaptée uniquement dans le cas où tu désires lire 16 touches ou boutons poussoirs.

Si tu recherches 16 vraies entrées, il faut t'orienter sur un expander.
Les MCP23017 et MCP23S17 sont des expanders 16 bits I2C ou SPI.
Ils te fourniront 16 entrées / sorties et disposent d'une broche pouvant générer une interruption.
Bien sûr il faut configurer chaque broche en entrée ou en sortie suivant ce que tu veux en faire.
Des bibliothèques ARDUINO existent.

@+

Je proposais un expander 16 bits afin de coller au plus près au cahier des charges qui était :

Par exemple : une sortie du (de)multiplexeur envoie 1 0 1 0 (pin 1 high, pin 2 low, pin 3 high, pin 4 low - liée à l'arduino) quand j'appuie sur un bouton parmi les 16

J'en déduis :

  • 16 bits et non pas 8
  • les entrées sont des boutons (les contraintes de rapidité sur les entrées sont donc peu importantes)

La complexité est la même que celle des entrées / sorties classiques d'un ARDUINO :
EXEMPLE

Le 74HC165 est un registre à décalage 8 bits qui envoie les données sur un seul fil, en série donc.
EXEMPLE

@+

Le MCP23017 propose également une broche pouvant déclencher une interruption lorsqu'un bouton est enfoncé.
Cela peut être utile si l'on désire laisser le processeur en sommeil entre deux appuis :

EXEMPLE

En espérant que madana soit encore à l'écoute pour qu'il puisse profiter de ces quelques idées.

@+