Contador Binário

Neste projeto, será utilizado CIs (circuitos integrados) adicionais na forma de registradores de deslocamento, para fazer com que os LEDs contem de forma binária. Mais especificamente, você controlará LEDs de forma independente, utilizando apenas três pinos de saída do Arduino para cada registrador de deslocamento.
Será utilizado dois registradores de deslocamento, mais especificamente o 74HC595. Esse tipo de registrador de deslocamento é um registrador de 8 bits, com entrada serial, saída serial ou paralela, e latches (travas) de saída. Isso significa que você pode enviar dados para o registrador de deslocamento em série, e enviar dados para fora em paralelo. Em série significa um bit de cada vez. Em paralelo significa muitos bits de cada vez. Os dados entram quando o LATCH está definido como LOW (isso permite que dados sejam enviados ao chip), e saem quando o LATCH está definido como HIGH. Assim, você transfere os dados (na forma de 1s e 0s) ao registrador de deslocamento, um bit de cada vez, e então envia para fora oito bits ao mesmo tempo. Cada bit é deslocado conforme o bit seguinte entra. Se um nono bit entrar antes que o latch seja definido como HIGH, o primeiro bit será deslocado para o fim da fila, perdendo-se para sempre. 
Nesse caso será feito dois contadores binários de 8 bits (um CI 74HC595 para cada contador), sendo um contando na ordem crescente e outro na ordem decrescente.
Analise o diagrama cuidadosamente. Conecte os 3,3 V e o terra nos barramentos inferiores apropriados da protoboard e, em seguida, estenda-os para os barramentos superiores. O chip tem um pequeno sulco em uma de suas pontas; esse sulco vai para a esquerda. O pino 1 está sob o sulco; o pino 8, no canto inferior direito; o pino 9, no canto superior direito e o pino 16 no canto superior esquerdo.
Você necessitará de fios que vão da alimentação de 3,3 V para os pinos 10 e 16, e fios do terra para os pinos digitais 8 e 13. Um fio vai do pino digital 8 para o pino digital 12 no CI. Outro vai do pino digital 10 para o pino 14 no CI e, finalmente, um vai do pino digital 12 para o pino 11 no CI. Repita esse processo no segundo CI ligando os pinos 11, 12, 14  nos respectivos pinos 11, 12 e 14 do primeiro CI.
Os oito LEDs de cada CI têm um resistor de 220 Ω entre o cátodo e o terra, e o ânodo do LED 1 vai para o pino 15. O ânodo dos LEDs 2 a 8 vão para os pinos 1 a 7 do CI.
 
Contador Binário
Depois de montado seu projeto, teste carregando este programa:

 
 1 

 2  //  Contador binário de 8 bits duplo

 3 

 4  /* Este programa permite a contagem binária de 8 bits, sendo um contador na

 5     ordem crescente e o outro na ordem decrescente.*/

 6 

 7 

 8  int latchPin = 8// Pino conectado ao pino 12 do 74HC595 (Latch)

 9  int clockPin = 12; // Pino conectado ao pino 11 do 74HC595 (Clock)

10  int dataPin = 11// Pino conectado ao pino 14 do 74HC595 (Data)

11 

12  void shiftOut(byte dataOut);
13 
14 
15  void setup()
16  {
17   // Define os pinos como saída
18      pinMode(latchPin, OUTPUT);
19      pinMode(clockPin, OUTPUT);
20      pinMode(dataPin, OUTPUT);
21  }
22 
23  void loop()
24  {
25      for (int i = 0; i < 256; i++) //conta de 0 a 255
26      {
27          digitalWrite(latchPin, LOW);  // Define latchPin como LOW, para permitir o fluxo de dados
28          shiftOut(i);
29          shiftOut(255-i);
30 
31          digitalWrite(latchPin, HIGH); // Define latchPin como HIGH, para fechar e enviar os dados
32          delay(600);
33      }
34  }
35 
36 
37  void shiftOut(byte dataOut)
38  {
39      boolean pinState; // Desloque 8 bits, com o bit menos significativos (LSB) sendo deslocado primeiro, no extremo ascendente do clock
40 
41  // Libera o registrador de deslocamento, deixando-o pronto para enviar dados
42      digitalWrite(dataPin, LOW);
43      digitalWrite(clockPin, LOW);
44 
45      for (int i=0; i<=7; i++)  // Para cada bit em dataOut, envie um bit
46      {
47          digitalWrite(clockPin, LOW); // Define clockPin como LOW, antes de enviar o bit
48 
49 
50          if ( dataOut & (1<<i) )// Se o valor de dataOut e (E lógico) uma máscara de bits forem verdadeiros, defina pinState como 1 (HIGH)
51          {
52              pinState = HIGH;
53          }
54          else
55          {
56              pinState = LOW;
57          }
58 
59          digitalWrite(dataPin, pinState);  // Define dataPin como HIGH ou LOW, dependendo de pinState
60          digitalWrite(clockPin, HIGH);     // Envia o bit no extremo ascendente do clock
61          digitalWrite(dataPin, LOW);
62      }
63 
64      digitalWrite(clockPin, LOW); // Interrompe o deslocamento
65 
66  }

Após o carregamento do programa será observado uma contagem binária crescente pelos LEDs verdes e decrescente pelos LEDs vermelhos.


Nenhum comentário:

Postar um comentário