O multiplexador é um circuito integrado composto por circuitos lógicos que permitem concentrar vários sinais na mesma saída (mutiplexagem ou mux) ou ligar uma entrada em uma de suas N saídas (demultiplexagem ou demux). Neste tutorial, veremos o funcionamento do circuito integrado IC CD4051, que pode ser utilizado como multiplexador e demultiplexador de um a oito canais. Com ele, é possível controlar LEDs ou obter o estado de vários sensores.
Material
- Computador
- Arduino UNO
- Cabo USB A Macho/B Macho
- Multiplexador
Princípio de funcionamento
O multiplexador/demultiplexador é um componente eletrônico contendo um circuito lógico que permite selecionar entre 8 canais. Se o multiplexador for ativado, o common (IN/OUT) liga-se diretamente ao canal selecionado.
Esquema
O multiplexador requer 3 pinos de saída de um microcontrolador, e mais um canal para ativar ou desativar o circuito integrado. Este sinal pode ser ligado à terra se o multiplexador estiver sempre conectado a um canal.
- VSS terra do circuito integrado
- Vcc pino de alimentação. Normalmente ligado em 5V
- A,B,C Sinais de seleção de canais
- CH0-CH7 canais de multiplexagem
- COM common input/output. Common input/output. Pino no qual chega o sinal multiplexado ou o sinal a ser demultiplexado.
- INH Inhibit, ativa LOW. Pino de ativação do circuito integrado.
Para aumentar ainda mais o número de entradas e saídas, é possível ligar outro multiplexador em paralelo (há várias montagens possíveis).
Código
Para selecionar os canais do multiplexador, temos de ativar o circuito integrado enviando um estado LOW para o pino INH e depois enviar um estado alto ou baixo para os canais A, B e C, seguindo a tabela lógica do 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
É possível multiplicar o número de entradas e saídas com este simples componente eletrônico. Experimente outras montagens e códigos para desenvolver as suas próprias funcionalidades. Tenha em mente que só se pode controlar um canal de cada vez, então certifique-se de que o componente corresponde à sua necessidade.
Aplicações
- Gerir até 8 LEDS ou sensores usando 3 pinos de um microcontrolador
Fontes
- https://fr.wikipedia.org/wiki/Multiplexeur
- http://www.ti.com/lit/ds/symlink/cd4051b.pdf
- https://www.aranacorp.com/pt/aprender-programacao-com-arduino/
Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie