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.