fbpixel
Etiquetas: ,
0
(0)

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

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie

How useful was this post?

Click on a star to rate it!

Average rating 0 / 5. Vote count: 0

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?