74HC595 – Registrador de Deslocamento

O Registrador de Deslocamento 74HC595 consiste em um Circuito Integrado de 8 bits o qual possibilita controlar 8 saídas por vez utilizando somente 3 portas digitais do Arduino. Além disso, pode vincular vários registros juntos para estender ainda mais a sua saída.

Funcionamento do Registrador de Deslocamento 74HC595

O 74HC595 possui um registrador interno de 8 bits que armazena os bits que chegam serialmente no pino DS. Então, ao enviar um bit, um pulso de clock (LOW para HIGH) deve ser aplicado para armazená-lo como um bit menos relevante do registrador interno e deslocar os demais. Com isso, o bit excedente é colocado no pino Q7′, podendo esse ser encadeado com outro 74HC595.
Finalmente, para que os bits enviados sejam colocados nos pinos de saída, devemos enviar um pulso de latch (LOW para HIGH).
Os 3 pinos que se comunicam com o Arduino são: DS, SH_CP e o ST_CP. Os pinos de saída são os pinos Q0 até o pino Q7.

Material para o Projeto

  • 01 Placa Arduino (Uno, Mega ou outra qualquer)
  • 01 Protoboard
  • 02 Registrador de Deslocamento 74HC595
  • 16 Resistores de 220 Ohm
  • Jumpers para a conexão

Registrador de Deslocamento

Montagem

Primeiramente, devemos saber como se conecta o Chip aos LEDs e ao Arduino. Com o auxílio da tabela abaixo, facilmente é possível fazer a conexão com o Registrador de Deslocamento.

74HC595 - CONEXÃO

Em seguida, com o auxílio do esquema abaixo, faça todas as conexões dos componentes na Protoboard e na placa Arduino.

Então, feito isso, agora é só carregar o código:

 1 /* Esta modificacao no codigo permite que a sequencia de LEDs acende de maneira que
 2     se perceba um sinal luminoso percorrendo de um lado a outro nos 16 LEDs.*/
 3  
 4  int latchPin = 8;      // Pino conectado ao pino 8 do 74HC595 (Latch)
 5  int clockPin = 12;  // Pino conectado ao pino 12 do 74HC595 (Clock)
 6  int dataPin = 11;    // Pino conectado ao pino 11 do 74HC595 (Data)
 7  
 8  void shiftOut(byte dataOut);
 9  
10  void setup()
11  {
12    // define os pinos como saida
13    pinMode(latchPin, OUTPUT);
14    pinMode(clockPin, OUTPUT);
15    pinMode(dataPin, OUTPUT);
16  }
17  
18  void loop()
19  {
20    for (int i = 0; i < 16; i++) //conta de 0 a 15
21    {
22      digitalWrite(latchPin, LOW); //define latchPin como LOW, para permitir o fluxo de dados
23  
24      shiftOut(i);
25  
26      digitalWrite(latchPin, HIGH);   // define latchPin como HIGH, para fechar e enviar os dados
27  
28      delay(300);
29    }
30  
31    for (int i = 0; i < 16; i++) //conta de 0 a 15
32    {
33      digitalWrite(latchPin, LOW); //define latchPin como LOW, para permitir o fluxo de dados
34  
35      shiftOut(15 - i);
36  
37      digitalWrite(latchPin, HIGH);   // define latchPin como HIGH, para fechar e enviar os dados
38  
39      delay(300);
40    }
41  }
42  
43  void shiftOut(byte dataOut)
44  {
45    boolean pinState; // Desloque 8 bits, com o bit menos significativos (LSB) sendo deslocado primeiro, no extremo ascendente do clock
46  
47    digitalWrite(dataPin, LOW); // libera o registrador de deslocamento, deixando-o pronto para enviar dados
48    digitalWrite(clockPin, LOW); // deixando pronto para o envio de novos dados.
49  
50    for (int i = 0; i < 16; i++)  // para cada bit em dataOut, envie um bit
51    {
52      digitalWrite(clockPin, LOW); // define clockPin como LOW, antes de enviar o bit
53  
54      if ((1 << dataOut) & (1 << i)) // se o valor de dataOut e (E logico) uma mascara de bits forem verdadeiros, defina pinState como 1 (HIGH)
55      {
56        pinState = HIGH;
57      }
58      else
59      {
60        pinState = LOW;
61      }
62  
63      digitalWrite(dataPin, pinState);  // define dataPin como HIGH ou LOW, dependendo de pinState
64      digitalWrite(clockPin, HIGH); // envia o bit no extremo ascendente do clock
65      digitalWrite(dataPin, LOW);
66    }
67  
68    digitalWrite(clockPin, LOW); // interrompe o deslocamento
69  }

 

Registrador de Deslocamento 74HC595

Resultado

Os Registradores de Deslocamento facilitam muito nossa vida, pois se fizéssemos esse projeto sem um CI externo, o código seria muito mais complexo.
O uso de um CI projetado para receber dados seriais e emitir de modo paralelo é ideal para controlar sequências de LEDs dessa forma. Então, nunca tenha receio em utilizar CIs externos.
Certamente, uma leitura calma e metódica de seus datasheets revelará como eles funcionam.
Datasheets podem, a princípio, parecer complicados, mas, uma vez removidos os dados irrelevantes, é fácil compreender como o chip funciona.

Onde Comprar?

LOJAS

 

Conheça nossas lojas!