Le multiplexer est un circuit intégré constitué de circuits logiques permettant de concentrer plusieurs signaux sur une même sortie (mutiplexage ou mux) ou, encore, de connecter une entrée sur une de ses N sorties (demultiplexage ou demux). Dans ce tutoriel, nous allons voir l’utilisation du circuit intégré CD4051 qui peut être utilisé comme multiplexer et demultiplexer d’une à huit voies. Il peut permettre de piloter des LED ou encore de récupérer l’état de plusieurs capteurs.
Matériel
- Ordinateur
- ArduinoUNO
- Câble USB A Mâle/B Mâle
- Multiplexer
Principe de fonctionnement
Le multiplexer/demultiplexer est un composant électronique contenant un circuit logique permettant la sélection parmi 8 voies. Si le miltiplexer est activé, le commun (IN/OUT) est relié directement à la voie sélectionnée.
Schéma
Le multiplexer nécessite 3 broches de sortie d’un microcontrôleur. Plus une voie pour activer ou désactiver le ciruit intégré. Il est possible de connecter ce signal à la masse si le multiplexer est toujours connecté à une voie.
- VSS masse du circuit intégré
- Vcc broche d’alimentation. Généralement connecté à 5V
- A,B,C Signaux de sélection des voies
- CH0-CH7 voies de multiplexage
- COM Common input/output. Entrée/sortie commune. Broche sur lequel arrive le signal multiplexé ou le signal à demultiplexer.
- INH Inhibit, active LOW. Broche d’activation du ciruit intégré.
Pour augmenter encore le nombre d’entrée-sortie, il est possible de brancher un autre multiplexer en parallèle (plusieurs montages sont possibles).
Code
Pour sélectionner les voies du multiplexer, il nous faut activer le circuit intégré en envoyant un état BAS sur la broche INH puis envoyer un état haut ou bas aux voies A,B et C en suivant la table logique du composant.
//Constants #define number_of_mux 1 #define numOfMuxPins number_of_mux * 8 #define enPin 2 #define channelA 4 #define channelB 7 #define channelC 8 //Parameters const int comPin = 3; void setup(){ //Init Serial USB Serial.begin(9600); Serial.println(F("Initialize System")); //Init CD4051B pinMode(channelA, OUTPUT); pinMode(channelB, OUTPUT); pinMode(channelC, OUTPUT); pinMode(enPin, OUTPUT); digitalWrite(channelA, LOW); digitalWrite(channelB, LOW); digitalWrite(channelC, LOW); digitalWrite(enPin, LOW); } void loop(){ MuxLED(); } void selectChannel(int chnl){/* function selectChannel */ //// Select channel of the multiplexer int A = bitRead(chnl,0); //Take first bit from binary value of i channel. int B = bitRead(chnl,1); //Take second bit from binary value of i channel. int C = bitRead(chnl,2); //Take third bit from value of i channel. digitalWrite(channelA, A); digitalWrite(channelB, B); digitalWrite(channelC, C); Serial.print(F("channel "));Serial.print(chnl);Serial.print(F(" : ")); Serial.print(C); Serial.print(F(",")); Serial.print(B); Serial.print(F(",")); Serial.print(A); Serial.println(); } void MuxLED(){/* function MuxLED */ //// blink leds for(int i = 0; i < numOfMuxPins; i++){ selectChannel(i); Serial.print(F("LED "));Serial.print(i);Serial.println(F(" HIGH")); analogWrite(comPin,200); delay(200); Serial.print(F("LED "));Serial.print(i);Serial.println(F(" LOW")); analogWrite(comPin,0); } }
Résultat
Il est possible de multiplier le nombre d’entrée sortie à l’aide de ce simple composant électronique. D’autres montages et codes peuvent être imaginés pour vous permettre de développer vos propres fonctionnalités. Gardez bien en mémoire, que vous ne pouvez piloter qu’une voie à la fois. Il faut donc prendre garde à ce que le composant corresponde bien à votre besoin.
Applications du multiplexer
- Gérer jusqu’à 8 LEDS ou capteur avec trois broches d’un microcontrôleur
Sources
- https://fr.wikipedia.org/wiki/Multiplexeur
- http://www.ti.com/lit/ds/symlink/cd4051b.pdf
- https://www.aranacorp.com/fr/programmez-avec-arduino/
Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie