Descripción
Este multiplexor analógico bidireccional nos permite aumentar el número de entradas analógicas de nuestro controlador. Nos permitirá dirigir la señal de 16 entradas (C0-C15) hacia una única conexión con el Arduino (SIG). Los pines de control S0 a S3 permiten apuntar a una de las 16 entradas. El pin de activación (EN, activo a nivel bajo) activa o desactiva el funcionamiento del multiplexor. Como es bidireccional, también puede usarse para ampliar el número de salidas. Es un dispositivo analógico, aunque puede usarse también con entradas/salidas digitales; no obstante, existen multiplexores específicos para aplicaciones digitales, como mejor rendimiento bajo ciertas condiciones.
Basado en el chip CD74HC4067. Más información: Hoja de datos CD74HC4067
Ejemplo de código (usándolo como entrada):
// *** CONEXIONES *** const int SIG = A0; //Pin SIG del MUX conectado a A0 en Arduino const int S0 = 7; // Pines S0-S3 conectados a D7-D10 en Arduino const int S1 = 8; const int S2 = 9; const int S3 = 10; // *** FUNCIÓN SELECCIÓN DE CANAL *** int MuxCanal(byte canal){ // Activa los pines correspondientes al canal seleccionado (0-15) digitalWrite(S0, bitRead(canal, 0)); digitalWrite(S1, bitRead(canal, 1)); digitalWrite(S2, bitRead(canal, 2)); digitalWrite(S3, bitRead(canal, 3)); } // *** CONFIGURACIÓN *** void setup() { pinMode(S0, OUTPUT); //Pines de control del MUX como salidas pinMode(S1, OUTPUT); pinMode(S2, OUTPUT); pinMode(S3, OUTPUT); Serial.begin(9600); // Monitor Serie a 9600bps } // *** CÓDIGO PRINCIPAL *** void loop() { // Recorre los 16 canales, mostrando su valor por el monitor serie for (byte j = 0; j < 16; j++) { MuxCanal(j); // Apunta al canal "j" delay(50); // Espera de 50ms byte valor = analogRead(SIG); //Lee la entrada A0 Serial.print(valor); Serial.print("\t"); } Serial.println(); }
Ejemplo de código (usándolo como salida):
// *** CONEXIONES *** const int SIG = A0; //Pin SIG del MUX conectado a A0 en Arduino const int S0 = 7; // Pines S0-S3 conectados a D7-D10 en Arduino const int S1 = 8; const int S2 = 9; const int S3 = 10; // *** FUNCIÓN SELECCIÓN DE CANAL *** int MuxCanal(byte canal){ // Activa los pines correspondientes al canal seleccionado (0-15) digitalWrite(S0, bitRead(canal, 0)); digitalWrite(S1, bitRead(canal, 1)); digitalWrite(S2, bitRead(canal, 2)); digitalWrite(S3, bitRead(canal, 3)); } // *** CONFIGURACIÓN *** void setup(){ pinMode(SIG, OUTPUT); // Todos los pines como salida pinMode(S0, OUTPUT); pinMode(S1, OUTPUT); pinMode(S2, OUTPUT); pinMode(S3, OUTPUT); } // *** CÓDIGO PRINCIPAL *** void loop() { for (byte j = 0; j < 16; j++) { // Apunta al canal "j" y lo activa durante 1seg MuxCanal(j); digitalWrite(SIG, HIGH); delay(1000); digitalWrite(SIG, LOW); } }
Valoraciones
No hay valoraciones aún.