Icono del sitio AranaCorp

Usando un multiplexor con Arduino

El multiplexor es un circuito integrado formado por circuitos lógicos que permite concentrar varias señales en una misma salida (mutiplexación o mux) o conectar una entrada a una de sus N salidas (demultiplexación o demux). En este tutorial, veremos el uso del circuito integrado CD4051 que puede ser utilizado como multiplexor y demultiplexor de uno a ocho canales. Se puede usar para impulsar los LEDs o para recuperar el estado de varios sensores.

Hardware

Principio de funcionamiento

El multiplexor/demultiplexor es un componente electrónico que contiene un circuito lógico que permite la selección entre 8 canales. Si se activa el miltiplexor, el común (IN/OUT) se conecta directamente al canal seleccionado.

Esquema

El multiplexor requiere 3 pines de salida de un microcontrolador. Más un canal para activar o desactivar el circuito integrado. Es posible conectar esta señal a tierra si el multiplexor está siempre conectado a un canal.

Para aumentar aún más el número de E/S, es posible conectar otro multiplexor en paralelo (son posibles varias configuraciones).

Código

Para seleccionar los canales del multiplexor, necesitamos activar el circuito integrado enviando un estado BAJO a la clavija INH y luego enviar un estado alto o bajo a los canales A, B y C siguiendo la tabla lógica del componente.

//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);
      }
}

Resultado

Il est possible de multiplier le nombre d’entrées et de sorties en utilisant ce simple composant électronique. Vous pouvez imaginer d’autres assemblages et codes qui vous permettent de développer vos propres fonctionnalités. Notez que vous ne pouvez gérer qu’un seul canal à la fois. Vous devez donc veiller à ce que le composant corresponde à vos besoins.

Aplicaciones del multiplexor

Fuentes

Encuentre otros tutoriales y ejemplos en el generador de código automático
Arquitecto de Código

Salir de la versión móvil