Desta vez não se trata do update ao projecto que iniciei anteriormente, uma vez que as placas ainda devem estar a meio caminho, mas uma nova versão, em que ampliei (na teoria, não implementado ainda no código) as saídas, mas reduzindo ao máximo o número de pinos utilizados, e sem prejuízo do circuito. O projecto original permitia 8 entradas e 3 saídas de gravação, neste circuito utilizava 3 pinos para comandar um CD4051 para as entradas, e 2 pinos para comandar um CD4052 para as saídas, juntando os 3 pinos para os selectores de entrada/saída de gravação e ainda 6 para o LCD… temos um total de 14 pinos! Nesta versão, após explorar um pouco mais sobre os registos de deslocamento usei 2, sendo que apenas necessito de 3 pinos para os comandar. E mesmo que fosse apenas 1 ou 3931 registos, continuaria a usar os mesmos 3 pinos. o LCD foi usado como I²C, o que me permitiu usar apenas 2 pinos para o controlar, com a particularidade de poder usar mais LCD’s com os mesmos 2 pinos, desde que os endereços do bus sejam diferentes! Não me vou debruçar sobre este assunto nem sobre os registos, pois há literatura sobre os mesmos, mas essencialmente o que este circuito SIPO¹ faz, é que recebe os dados em série, e apresenta-os em paralelo, chamemos-lhe assim! E como tal, aproveitei o código utilizado anteriormente, acrescentei umas linhas para que o Arduino possa “saber” que existem registos de deslocamento, e assim foi, para que se possa entender um pouco melhor, deixo um pouco do código utilizado antes:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
if(RelaySource == 8) { lcd.setCursor(2,0); lcd.print("Tape 3"); digitalWrite(OutputA, HIGH); digitalWrite(OutputB, HIGH); digitalWrite(OutputC, HIGH); digitalWrite(OutputD, LOW); if(RelayRec == 1) { lcd.setCursor(2,1); lcd.print("Aux 1 "); digitalWrite(OutputE, LOW); digitalWrite(OutputF, LOW); |
E um pouco do código actual:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
if(RelayNumber == 8) { shifter.setPin(0, HIGH); //set pin 1 in the chain(second pin) HIGH shifter.setPin(1, LOW); shifter.setPin(2, LOW); shifter.setPin(3, LOW); shifter.setPin(4, LOW); shifter.setPin(5, LOW); shifter.setPin(6, LOW); shifter.setPin(7, LOW); shifter.write(); lcd.clear(); lcd.setCursor(0,0); lcd.print("[8] Thorens"); } if(RelayMoni == 1) { lcd.setCursor(0,1); lcd.print(">> TAPE 1"); shifter.setPin(8, HIGH); //set pin 8(1+7) in the second register HIGH shifter.setPin(9, LOW); shifter.setPin(10, LOW); shifter.setPin(11, LOW); shifter.write(); |
Como se pode ver, aparentemente tem mais linhas de código, mas na realidade, enquanto que no primeiro exemplo estamos a usar 4 pinos para escrever as saídas em BCD (A-D) do selector de entrada e mais 2 pinos (E-F) para comandar o selector de saída, no segundo exemplo, estamos a usar 3 pinos e a comandar dois registos simultaneamente (E como já disse podia comandar uns quantos mais, usando os mesmos 3 pinos). Mas não me quero debruçar muito mais aqui, como tal, deixo algumas fotografias da confusão de fios e do “responsável” por simplificar o circuito, o que me permitiu ter 8 entradas e 8 saídas para gravação, apesar de aqui só estar a usar 4:
¹SIPO = Serial In, Parallel Out, ou seja, entrada série e saída em paralelo.
Deixo o link deste projecto no GitHub para quem quiser usar/acompanhar e/ou modificar de acordo com as necessidades. O esquema será colocado ainda esta semana, espero! E não me canso de repetir, para quem pode… FIQUEM EM CASA!
73’s


