quarta-feira, 15 de dezembro de 2010

Mais portas para o Arduino

À primeira vista, um Arduino Duemilanove ou Uno (chip ATmega328) tem uma infinidade de portas: 6 entradas analógicas e 14 entradas/saídas digitais, das quais 6 podem ser saídas PWM, o que parece suficiente para a maioria das aplicações imagináveis. Muitas vezes, no entanto, sentiremos falta de alguma entrada analógica a mais - como no caso de haver necessidade de conectar 8 potenciômetros ou sinais analógicos quaisquer - ou de alguma entrada digital - por exemplo, se precisarmos conectar um LCD (que utiliza 6 pinos digitais) e mais um monte de chaves liga-desliga; por fim, haverá situações em que necessitaremos de alguma(s) entrada(s) analógica(s) e de alguma(s) entrada(s)/saída(s) digital(is) a mais.

Existem 2 soluções: o uso de outro processador, como o Arduino Mega, que utiliza o chip ATmega2560, com 16 pinos de entrada analógica e 54 entradas/saídas digitais (dos quais 14 podem ser saídas PWM). É uma alternativa tecnicamente correta, mas bastante mais cara.

E existe a alternativa mais barata, mas que envolve um pouco mais de esforço no projeto: o uso de multiplexadores. Um multiplexador é um circuito combinacional com várias entradas e uma única saída, mais um conjunto de entradas de controle que permitem selecionar qual entrada é conectada diretamente à saída. Um multiplexador pode ser digital (lida somente com sinais digitais, como o 74LS151) e analógico (os sinais de entrada e o de saída possuem níveis analógicos, mas os pinos de seleção são digitais), como o CD4051.

Por exemplo, no multiplexador digital de 8 bits citado - o 74LS151, temos 8 entradas digitais (valores binários 0 ou 1) e somente uma saída digital; exitem 3 pinos de seleção (porque 2 na potência 3 = 8).

Assim como existem multiplexadores, também existem os demultiplexadores (digitais e analógicos), com uma entrada única e diversas saídas, e que igualmente contam com um circuito de controle que seleciona qual entrada é conectada à saída. Para maiores esclarecimentos, consulte a Wikipedia.

O Playground do Arduino possui uma solução interessante para conectar 8 sinais analógicos (no caso, potenciômetros) a uma única entrada analógica do Arduino, com a utilização de um chip 4051 (multiplexador analógico de 8 canais). No caso, são utilizados 3 pinos digitais do ATmega328 para selecionar qual das 8 entradas será conectada à saída do multiplexador, e portanto a uma entrada analógica do próprio microcontrolador. Também há um circuito que ilustra a utilização de um multiplexador digital, no caso o 74LS151.

Em todos os casos, o microcontrolador deve fazer uma varredura (normalmente seqüencial) em todas as portas, lendo o valor que consta na saída do multiplexador e, obviamente, "sabendo" qual circuito está sendo lido naquele instante.

À medida que mais e mais portas vão sendo conectadas aos multiplexadores, também necessitaremos de mais saídas lógicas para selecionar cada porta individualmente, o que poderá trazer novo problema - a falta de disponibilidade de portas digitais.

Uma alternativa é a utilização de um contador hexadecimal (por exemplo, o 74LS93) para selecionar uma porta do multiplexador. Neste caso, bastará 1 (uma) saída digital para incrementar o contador.


Se quisermos sofisticar um pouco, poderemos acrescentar mais uma saída para ressetar o contador, e eventualmente uma terceira para decrementar (neste caso, teríamos de utilizar um contador bidirecional, como o 74LS193, que ainda possui outros recursos - por exemplo, pode ser carregado com um valor inicial).

2 comentários:

  1. seria ideal pra fazer um cubo de 7x7x7?

    ResponderExcluir
  2. Mas e o código, como eu faria para ligar um led e desligar outro led e assim por diante?

    ResponderExcluir