Multiplexor: todo lo que necesitas saber

chip multiplexor

Un multiplexor es un circuito combinacional que tiene varias entradas y una única salida de datos. Con ello se consigue seleccionar el paso de solo una de sus entradas para encauzarla a su salida. Es decir, podrías ir seleccionando de qué entrada coger el dato o bit que hay a la entrada e ignorar el resto de entradas. Esto es muy común en electrónica cuando se necesita que varias conexiones deban compartir una sola línea o bus.

Es decir, mediante el control del multiplexor se puede seleccionar la entrada adecuada en cada momento. Lo que posibilita que a pesar de haber solo una conexión, se pueda estar trabajando con múltiples dispositivos de entrada a la vez sin que ellos interfieran entre sí. Además, debes saber que por lo general se usa un demultiplexor en conjunto con el multiplexor en muchos proyectos…

¿Qué es un multiplexor?

multiplexor

Estos servicios combinacionales llamados multiplexores no suelen ser complejos. Están compuestos por unas cuantas puertas lógicas en función de su cantidad de entradas de datos y control podría aumentar la complejidad. Por lo general incluyen 2n entradas y una sola salida, así como líneas de control. Y se pueden usar varios de ellos combinados para aumentar ese número de entradas disponibles.

Se puede entender como un selector. Por ejemplo, imagina que tienes uno muy simple con dos entradas, el  más simple que se puede construir. Ese circuito tendrá una salida y una entrada de control única. Si las entradas son A y B, con la entrada de control se puede controlar si es A quien pasa su valor a la salida S o si es B quien lo hace. Para ello, solo hay que variar el valor de la línea de control C. Por ejemplo, si C=0 será A y si C=1 será B.

Como entenderás, si hay más entradas se necesitarán más entradas de control para la selección. De hecho, el multiplexor es un tipo especial de decodificador, con una señal de habilitación por cada puerta AND incluida y una puerta OR entre la salida y las puertas AND. De ese modo se puede seleccionar fácilmente.

En cuanto a sus aplicaciones, lo puedes usar para multitud de cosas:

  • Selector de entradas para compartir un único bus o línea cuando se tienen múltiples entradas.
  • Serializador para que vaya tomando el valor de cada una de sus entradas en orden.
  • Para la transmisión multiplexada usando las mismas líneas de conexión para varios datos de dispositivos variados. Por ejemplo, imagina que quieres usar una misma patilla de datos de un microcontrolador para conectar diversas salidas de dispositivos, pero que solo puede enviar información uno a la vez…
  • Realizar funciones lógicas, etc.

Tipos de multiplexor

Según la forma en la que se realiza la división de la transmisión, existen varios tipos de multiplexores o multiplexación:

  • Por división de frecuencia
  • Por división de tiempo
  • Por división de código
  • Por división de longitud de onda

Como puedes imaginar, se controlan por frecuencia, por tiempo mediante un clock, por código binario, y por longitud de onda. Pero aquí solo me interesa el convencional…

Además de los tipos, al igual que ocurre con el demultiplexor, lo puedes encontrar con más o menos canales 2, 4, 8, 16, etc., en función de lo que necesites para tus proyectos DIY.

Diferencias con un demultiplexor

demultiplexor

En electrónica digital existe el demultiplexor, un circuito combinacional que es el antagonista del multiplexor. En este caso solo habrá una entrada de información, pero se puede transmitir a través de sus varias salidas. Es decir, en este caso, mediante las señales de control se decidirá a qué salida se traslada el dato de la entrada.

Si unes un demultiplexor a la salida de un multiplexor, puedes tener un sistema muy útil para el aprendizaje de cómo funcionan ambos dispositivos.

¿Dónde comprar?

multiplexor demultiplexor

Estos dispositivos vienen implementados normalmente en chips DIP muy sencillos. Los puedes encontrar en gran variedad de marcas y con número de entradas o salidas en caso de ser un demultiplexor. Además, se encuentran fácilmente en diversos medios especializados o tiendas online. Si te interesa comprar alguno a buen precio, estos pueden ser buenos ejemplos para comenzar con tus proyectos:

Te aconsejo leer los datasheets de sus fabricantes para obtener una idea clara de su pinout, ya que pueden variar en función del fabricante o tipo que hayas comprado.

cd74hc4067

Además, como puedes ver, también existen módulos muy buenos que permiten tener ambos dispositivos en uno. Es el caso del conocido CD74HC4067, un módulo pequeño con tecnología TTL que te puede ayudar para trabajar con sus 16 banales de forma bidireccional, al tener MUX/DEMUX. Es decir, lo puedes usar como una especie de interruptor inteligente.

Así, tu Arduino puede leer y escribir hasta en 16 dispositivos diferentes con solo 5 pines, 4 de ellos usados para el control y otro adicional para recoger la señal que se pretende leer o escribir según el canal seleccionado.

Lo bueno de este chip es que funciona tanto con señales digitales como analógicas, por lo que es compatible con muchos sensores que trabajan en analógico y otros chips digitales, así como multitud de elementos electrónicos diferentes. Da gran versatilidad. Por eso se les denomina también como I/O expanders o amplificadores de entradas y salidas…

Incluso lo podrías usar para las comunicaciones por el puerto serie, el bus I2C o el SPI, del que ya hemos hablado en otras ocasiones.

Eso sí, antes de trabajar con él, debes asegurarte de cumplir los voltajes e intensidades que admite este circuito para no dañarlo. Por ejemplo, en este caso puede proporcionar hasta 20 mA, así como una tensión de 2 a 6v. No obstante, si quieres trabajar con corrientes superiores podrías usar un relé o mediante un transistor.

Integración con Arduino

Arduino con Bluetooth

Una forma de tener más entradas en tu placa Arduino o más salidas, es usar estos multiplexores y demultiplexores. Con ellos evitarás tener que comprar una placa de precio mayor que tienen más cantidad de pines, o tener que usar otras artimañas para poder conectar todo lo que necesitas.

Por ejemplo, puedes usar un módulo MUX y DEMUX para poder tener ambos en un solo elemento, y luego integrarlo de forma simple a tu proyecto con Arduino. Con el CD74HC4067 puedes conexionarlo de forma muy sencilla, tan dolo debes seguir estas reglas:

  • Vcc del chip MUX/DEMUX lo debes conectar a Vcc de Arduino o 5V.
  • GND, la tierra, la debes conectar a la GND de Arduino.
  • Los pines marcados como S0, S1, S2, S3 son los que controlan el canal activo, con cuatro E/S digitales de Arduino, como pueden ser D8, D9, D10 y D11.
  • La EN también es de habilitación, para que funcione como multiplexor la puedes conectar a GND de Arduino.
  • Y SIG es la señal de salida que determinará el canal seleccionado. Puede ir conectado a Arduino o a cualquier dispositivo que necesite leer la salida. En este caso lo he conectado a A0 para obtener los valores desde el propio Arduino.
  • En el otro extremo del módulo tendrás las entradas en este caso, que son C0-C10 que podrás conectar a tus dispositivos.

Una vez conectado, el código de Arduino puede ser simple. El sketch de Arduino IDE como multiplexor puede ser el siguiente (este código solo apagará y encenderá sus canales respectivamente, pero puedes modificarlo para hacer el proyecto que quieras):


const int muxSIG = A0;
const int muxS0 = 8;
const int muxS1 = 9;
const int muxS2 = 10;
const int muxS3 = 11;
 
int SetMuxChannel(byte channel)
{
   digitalWrite(muxS0, bitRead(channel, 0));
   digitalWrite(muxS1, bitRead(channel, 1));
   digitalWrite(muxS2, bitRead(channel, 2));
   digitalWrite(muxS3, bitRead(channel, 3));
}
 
void setup()
{
   pinMode(muxSIG, OUTPUT);
   pinMode(muxS0, OUTPUT);
   pinMode(muxS1, OUTPUT);
   pinMode(muxS2, OUTPUT);
   pinMode(muxS3, OUTPUT);
}
 
void loop()
{
   for (byte i = 0; i < 16; i++)
   {
      SetMuxChannel(i);
      digitalWrite(muxSIG, HIGH);
      delay(200);
      digitalWrite(muxSIG, LOW);
      delay(200);
   }
}

Si lo quieres usar como DEMUX, solo deberías considerar que C0-C10 serían las salidas y SIG sería la entrada. En caso de que quieras usarlo como demultiplexor, el código cambiaría así:


onst int muxSIG = A0;
const int muxS0 = 8;
const int muxS1 = 9;
const int muxS2 = 10;
const int muxS3 = 11;
 
int SetMuxChannel(byte channel)
{
   digitalWrite(muxS0, bitRead(channel, 0));
   digitalWrite(muxS1, bitRead(channel, 1));
   digitalWrite(muxS2, bitRead(channel, 2));
   digitalWrite(muxS3, bitRead(channel, 3));
}
 
void setup()
{
   Serial.begin(9600);
   pinMode(muxS0, OUTPUT);
   pinMode(muxS1, OUTPUT);
   pinMode(muxS2, OUTPUT);
   pinMode(muxS3, OUTPUT);
}
 
void loop()
{
   for (byte i = 0; i < 16; i++)
   {
      SetMuxChannel(i);
      byte muxValue = analogRead(muxSIG);
 
      Serial.print(muxValue);
      Serial.print("\t");
   }
   Serial.println();
   delay(1000);
}

Recuerda que puedes obtener más información con ayuda de nuestro curso gratuito de programación de Arduino.


Sé el primero en comentar

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.