Tutorial sobre 4051(multiplexador, demultiplexador) e como utilizá-lo com Arduino

Adquira estes componentes na Loja do Lab de Garagem

Neste tutorial, vamos mostrar como utilizar o multiplexador/demultiplexador 4051 com o arduino. O circuito integrado 4051 é multiplexador ou demultiplexador analógico que por endereçamento pode acionar uma porta desejada.

Olhando o datasheet, podemos ver a pinagem dele, como mostrada abaixo:

Onde:

           VDD - Alimentação de 3V a 15V;

           VSS - GND ou terra;

           VEE - É a tensão negativa para geração de ruído entre as I/O's, neste tutorial, vamos conectá-lo no GND;

           A0,A1,A2 - São as portas de endereçamento;

           Y0,Y1...Y6,Y7 - São as portas para I/O's;

           Z - É porta de entrada/saída a qual você vai utilizar para conectar com Arduino;

           E - É o pino de habilitação do circuito integrado 4051.

Olhando novamente no datasheet, podemos ver qual endereço é necessário para ativar uma saída:

Ao ver a tabela, podemos ver que para que o 4051 funcione, é necessário aterrar o pino "E". E se aterrar os pinos de endereçamento A0,A1 e A2, irá ativar o pino Y0. E se conectar o A0 em VCC e os A1 e A2 no GND, vai ativar o pino Y1. Assim por diante.

Agora, podemos fazer o circuito com Arduino:

Aqui fizemos um teste montando com LDRS na entrada, mas você pode substituir os LDR's e os diodos por potenciometros.

Se tampar a luz no primeiro LDR da direita para esquerda, o primeiro led acenderá respectivamente. E assim por diante.

Agora, abra a IDE do Arduino e passe a seguinte programação:

/*
 * Example of getting 16 i/o from 5 pins using a CD4051
 *
 * Based on tutorial and code by david c. and tomek n.* for k3 / malmö högskola
 * http://www.arduino.cc/playground/Learning/4051?action=sourceblock&a...
 */ 


int selPin[] = { 14, 15, 16 }; // select pins on 4051 (analog A0, A1, A2)
int commonPin[] = { 17, 18};   // common in/out pins (analog A3, A4)
int led[] = {LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW };  // stores eight LED states
int CdSVal[] = { 0, 0, 0, 0 }; // store last CdS readings
int cnt = 0;  // main loop counter
int persistDelay = 100; // LED ontime in microseconds


void setup(){
  Serial.begin(9600);  // serial comms for troubleshooting (always)
  for(int pin = 0; pin < 3; pin++){ // setup select pins
    pinMode(selPin[pin], OUTPUT);
  } 
}


void loop(){
  flashLEDs();
  if (cnt == 0){
    for(int x; x < 8; x++){
      led[x] = random(2);
    }
  }
  cnt++;
  if (cnt > 100) { cnt = 0; }
}


void flashLEDs() {
  for(int pin = 0; pin < 2; pin++) {  // set common pins low
    pinMode(commonPin[pin], OUTPUT);
    digitalWrite(commonPin[pin], LOW);
  } 
  for (int bank = 0; bank < 4; bank++) {
    for(int pin = 0; pin < 3; pin++) { // parse out select pin bits
      int signal = (bank >> pin) & 1;  // shift  & bitwise compare
      digitalWrite(selPin[pin], signal);
    }
    if (led[bank * 2]){        // first LED
      digitalWrite(commonPin[0], HIGH);  // turn common on
      delayMicroseconds(persistDelay);   // leave led lit
      digitalWrite(commonPin[0], LOW);   // turn common off
    } 
    if (led[bank * 2 + 1]){     // repeat for second LED
      digitalWrite(commonPin[1], HIGH);
      delayMicroseconds(persistDelay);
      digitalWrite(commonPin[1], LOW); 
    }
  } 
}


Conecte sua placa Arduino, selecione a versão da sua placa Arduino(UNO, Duemilanove, etc), selecione a porta(comX, ttyUSBx, ttyACMx) e lique em UPLOAD.

Pronto!! Você pode ver que ao tampar cada um dos LDR's, os leds acenderão.

E é isso aí!! Boa diversão!!! Se você tiver dúvidas, poste aqui no blog! Se tiver sugestões, poste aqui! Você pode ver nossos outros tutoriais, clicando aqui, e os projetos abertos, clicando aqui!

Referências:

http://dawson-station.blogspot.com.br/2010/01/mux-demux-cd4051-parl...

http://www.arduino.cc/playground/Learning/4051

 

Exibições: 19985

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Rogerio A. Filho em 30 julho 2013 às 3:31

Poderia fazer um exemplo com leitura individual das portas? ele serve como expansor de portas analógicas, ne iss

Comentário de Paul Muller Braulio Tudeia em 30 abril 2013 às 15:49

Vlw mano vey.

Comentário de Laboratório de Garagem em 29 abril 2013 às 18:27

Este CI provavelmente é o mesmo (normalmente as primeiras letras identificam o fabricante).

Comentário de Paul Muller Braulio Tudeia em 28 abril 2013 às 4:48

Meio bobo da minha parte perguntar, mais o CI HEF4051B é igual ao CI CD4051? Obrigado

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2017   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço