O MC14067bcp é um (de)multiplexador. Basicamente, um multiplexador é um circuito chaveador capaz de combinar vários canais de entrada em uma única via de saída. Um de-multiplexador tem a função contrária, através de um canal de entrada temos várias vias de saída.

Multiplexadores e de-multiplexadores são circuitos muito úteis quando estamos lidando com plataformas que possuem quantidades de pinos de entrada e saída limitados, como é o caso do Arduino, com apenas 6 pinos de entrada analógica. O 4067 possui 16 pinos que podem ser utilizados como entradas ou saídas, para realizar a transmissão ou recebimento de dados analógicos.

Seu funcionamento é simples. Através de 1 pino enviamos ou recebemos os dados, e energizando outros 4 pinos conseguimos indicar para qual canal queremos enviar os dados ou recebê-los.

Estive testando outro circuito lógico com as mesmas funções para o projeto Modular Synth, o 4051. Ao meu ver o 4067 tem algumas vantagens. Possui 16 pinos que podem ser utilizados como entradas ou saídas contra 8 do 4051, a organização dos pinos do 4067 é melhor, aparentemente ele é mais fácil de se encontrar em Joinville, Santa Catarina, por um preço menor comparado ao preço do 4051. Para ambos encontra-se alguma informação on-line, e para o 4067, o tutorial do ITP Physical Computing é uma boa documentação, esse post é baseado no que li por lá.


pinos do 4067

pinagem do 4067


Colocar esse circuito lógico para funcionar é simples. Para exemplificar seu uso, vou aproveitar o circuito que estou montando para o Modular Synth, um módulo com várias entradas analógicas. Nesse caso, o pino 1 (X), é o pino onde faremos a leitura dos dados. Os pinos de 2 à 9 (X0 até X7) e de 16 à 23 (X8 até X15) são os pinos de entrada, os pinos 12 (VSS, o terra) e 15 (INHIBIT) são ligados ao terra do circuito, e o pino 24 (VDD) deve ser ligado a uma fonte de alimentação de 5 volts. Para realizar o chaveamento entre os 16 canais de entrada, escolhendo um deles para fazer a leitura pelo pino 1 (X), usamos os pinos 10 (A), 11 (B), 14(C) e 13(D).

A tabela abaixo mostra a relação entre os pinos de controle A, B, C, D e o canal que será lido a partir do pino de entrada 1(X).

A B C D Canal Selecionado
0 0 0 0 0
1 0 0 0 1
0 1 0 0 2
1 1 0 0 3
0 0 1 0 4
1 0 1 0 5
0 1 1 0 6
1 1 1 0 7
0 0 0 1 8
1 0 0 1 9
0 1 0 1 10
1 1 0 1 11
0 0 1 1 12
1 0 1 1 13
0 1 1 1 14
1 1 1 1 15

Para entender essa tabela é necessário entender um pouco sobre números binários:

Dado um número N, binário, para expressá-lo em decimal, deve-se escrever cada número que o compõe (bit), multiplicado pela base do sistema (base = 2), elevado à posição que ocupa. Uma posição à esquerda da vírgula representa uma potência positiva e à direita, uma potência negativa. A soma de cada multiplicação de cada dígito binário pelo valor das potências resulta no número real representado. Exemplo:

1011(binário)

1 × 23 + 0 × 22 + 1 × 21 + 1 × 20 = 11

Portanto, 1011 é 11 em decimal

(via wikipedia)

Então, escolhendo quais dos pinos A, B, C e D são energizados, selecionamos o canal do qual vamos realizar a leitura a partir do pino 1 (X).

A ligação do 4067 ao Arduino é simples, nesse exemplo vou utilizar os pinos digitais 2, 3, 4 e 5 para selecionar os canais e o pino analógico 0 para a leitura. No diagrama abaixo não consta a ligação dos pinos 12 e 15 ao terra e o pino 24 na fonte de alimentação, não esqueça deles!


Ligação do 4067 com o Arduino

Ligação do 4067 com o Arduino


Nos pinos de X0 até X15 estão ligados os potenciômetros. O código abaixo demonstra de forma simples como realizar a leitura de um determinado pino:

void setup() {
        Serial.begin(9600);
        pinMode(2, OUTPUT);
        pinMode(3, OUTPUT);
        pinMode(4, OUTPUT);
        pinMode(5, OUTPUT);
        digitalWrite(2, HIGH);
        digitalWrite(3, LOW);
        digitalWrite(4, LOW);
        digitalWrite(5, LOW);
}
 
void loop() {
        int valor = analogRead(0);
        Serial.print("Valor lido no canal: ");
        Serial.println(valor, DEC);
        delay(1000);
}

Veja que na função setup o único pino setado como HIGH é o pino dois, assim obtemos o valor em binário 0001, ou seja, 1 em decinal, selecionando então o canal X1 para realizar a leitura. No tutorial do ITP Physical Computing é apresentada a função setChannel que nos facilita a leitura de dados de um determinado canal. Reproduzo essa função abaixo com algumas modificações:

int pino_entrada = 0;
void setup() {
        Serial.begin(9600);
        pinMode(2, OUTPUT);
        pinMode(3, OUTPUT);
        pinMode(4, OUTPUT);
        pinMode(5, OUTPUT);
        digitalWrite(2, LOW);
        digitalWrite(3, HIGH);
        digitalWrite(4, LOW);
        digitalWrite(5, LOW);
}
 
void loop() {
        int valor_entrada;
        for (int canal = 0; canal < 16; canal++) {
                setChannel(canal);
                valor_entrada = analogRead(pino_entrada);
                Serial.print("Leitura do Canal ");
                Serial.print(canal);
                Serial.print(": ");
                Serial.println(valor_entrada, DEC);
                delay(1000);
        }
}
 
void setChannel(int canal) {
        for (int posicao_bit = 0; posicao_bit < 4; posicao_bit++) {
                // Realiza o deslocamento à direita (&gt;&gt;) e
                //a função bitwise AND (&amp;)
                int valor_bit = (canal >> posicao_bit) & 1;
                // Como o primeiro pino de controle é o pino 2,
                // soma-se posicao_bit a ele
                int pino = 2 + posicao_bit;
                // Escreve no pino indicando se ele está ligado
                // ou desligado
                digitalWrite(pino, valor_bit);
        }
}

A função setChannel realiza um shift (deslocamento à direita) para cada canal e realiza a função bitwise AND (&) para verificar se o canal deve ser colocado como ligado ou desligado. Ok, mas como assim? Por exemplo, se o canal selecionado for o canal 5, sua representação em binário é 0101. Assim, ao realizar o deslocamento à direita (>>) na primeira iteração do loop, obteremos 0101, na segunda iteração, 0010, na terceira, 0001 e na quarta, 0000.
Dessa forma, ao realizarmos a função de bitwite AND (&) comparando o número 1 com o resultado obtido com o deslocamento à direita, receberemos como retorno 1 ou 0, indicando se o pino de controle deve estar ligado ou desligado, e o setamos usando a função digitalWrite logo em seguida.

Pronto, 16 entradas ou saídas analógicas usando 5 pinos do Arduino.

arduinomc14067

Yah! Tenho que agradecer ao Pedro Rito pelos jumpers! Foram um presente muito giro, isso tem facilitado a vida imensamente, thks!

, , , , , , , ,

Nesse último final de semana esteve rolando o AZLabs hackmeeting, com os labs LCD, xDA e AltLab, um momento para intensificar o desenvolvimento dos projetos da malta dos laboratórios e criar um ambiente de troca de conhecimentos.

Sentia já a algum tempo falta desse tipo de momento. Lá em Joinville a rapaziada do MuSA juntaa-se as vezes no que costumamos chamar de projetos de final de semana para montar suas coisas e trocar idéias.

Curti testar alguns sensores flexíveis com Pedro Rito e hackear o robosito do VitorLS adicionando a interface de comunicação usando Xbee. Durante o período da tarde rolou uma oficina de Stencil onde cada um cortou seu molde e aplicou em camisetas e na parede do espaço. Domingo, rolaram umas flash talks, e falei um pouquinho do MuSA para o pessoal daqui.

Divertido, é isso. Conhecer pessoas, trocar idéias, criar coisas.

Fotos no flickr.

Tshirt colaborativa, resultado da oficina

Camiseta coletiva

Era madrugada quando estavamos lendo algumas coisas no artnotart.com e encontramos o texto A Child’s History of Fluxus escrito por Dick Higgins. Esse texto fez muito sentido para nós, principalmente os primeiros parágrafos, que são escritos como se estivessem falando da nossa história. Escrevemos então uma pequena adaptação, Vilson fez a arte, e ele foi distribuído durante o Atelier de Hardware Livre no Solisc.

O texto em pdf.

MuSA, uma pequena história inacabada

A muito, muito tempo atrás, quando o mundo era uma criança - é isso, algo por volta de Novembro de 2008 - vários hackers, makers, estudantes de computação e outra pessoas que queriam fazer coisas bonitas começaram a olhar o mundo ao seu redor de uma nova maneira (para el@s).

El@s diziam - “Hey! - copinhos de café podem ser mais bonitos do que uma grande escultura. Programar para fazer música pode ser mais divertido do que programar um sistema de gestão. Metareciclar “lixo” eletrônico pode ser mais interessante do que jogá-lo fora.”.

E, quando eles viram isso, isso fez suas mentes ligarem. E eles começaram a fazer perguntas. Uma delas era: “Porque é que tudo que eu vejo que é bonito, como copos de café, “lixo” eletrônico, linguagens de programação, tem que ser utilizado ou feito apenas com o objetivo para os quais eles foram criados? Porque não posso usar copinhos de plástico como um mini amplificador? Por que não posso usar “lixo” eletrônico para criar uma instalação musical?

Quando eles faziam perguntas como essas, eles estavam inventando o MuSA, mas isso eles ainda não sabiam, porque MuSA era tipo um bebe que a Mãe e o Pai não sabiam como chamar, eles sabiam que aquilo estava lá, mas não tinha um nome.

Essas pessoas estavam espalhadas por todos os lados, fazendo suas coisas em seus cantos. Aos poucos elas foram conhecendo melhor umas às outras. El@s falavam diferentes linguagens e tinham nomes diferentes para o que estavam fazendo, mesmo quando el@s estavam fazendo a mesma coisa. Isso estava tudo misturado.

Uma dessas pessoas teve uma idéia, era colocar todas as pessoas juntas em um espaço onde el@s pudessem fazer o mesmo tipo de coisa. Isso precisava de um nome. Bom, inicialmente el@s escolheram um nome que identificasse o lugar e a forma del@s fazerem as coisas. Era Udesc Physical Computing. Mas havia um problema. Durante os primeiros dias isso pareceu uma boa ideia, mas com o tempo viram que o nome não expressava realmente o que queriam. O nome precisa ser forte, ter um sentido maior. Foi quando uma dessas pessoas disse para as outras “Musa, as entidades mitológicas a que são atribuidas capacidade de inspirar a criação artística ou científica”. Mas peraí, ainda falta alguma coisa, el@s pensaram. Precisamos atribuir um significado às letras do nome. Foi quando outro del@s disse “Multimídia, Sistemas e Arte”. E tod@s sentiram-se bem em estarem em baixo desse mesmo guarda-chuva.

Para fazer o MuSA ser conhecido, eles decidiram manter um meio de comunicação, um lugar onde podem colocar suas ideias e mostrar o seu jeito de fazer as coisas. Estava criado o musa.cc, endereço (su)virtual dessas pessoas, o ponto de encontro entre hackers, makers e cientistas de garagem.

El@s foram fazendo coisas juntos e foram aprendendo coisas novas uns com os outros. El@s foram utilizando de forma criativa a tecnologia, desmistificando o seu uso alienado e tentando quebrando a barreira do consumismo passivo.

O MuSA agora se tornava um organismo, algo que não pode mais ser descrito olhando-se seus membros de forma isolada. O MuSA são tod@s el@s, junt@s. Em muito pouco tempo o MuSA cresceu forte, estava começando a fazer coisas em outros lugares, aprendendo e ensinando com outros organismos. Esse era o processo natural das coisas, o organismo MuSA começava a se conectar com outros organismos, formando uma rede maior, de organismos que fazem coisas parecidas, de uma forma parecida.

Ainda existe muitas coisas bonitas a serem feitas a partir de agora, vamos fazendo elas juntos.

Este texto não foi baseado em: http://www.artnotart.com/fluxus/dhiggins-childshistory.html

, , ,