Expandindo as portas digitais do Arduino utilizando o registrador de deslocamento CI74HC595
Os registradores são um tipo um circuito lógico usados principalmente no armazenamento de dados digitais (0s e 1s). Além de armazenar bits, registradores podem ser usados para deslocar os bits a partir de uma posição para outra dentro do registrador ou para fora do registrador, sendo conhecidos como registradores de deslocamento.
O circuito integrado 74HC595 (Figura 1) é um tipo de registrador de deslocamento Serial-Paralelo de 8 bits.
O CI 74HC595 é comumente utilizado para expandir as portas dos microcontroladores, já que cada microcontrolador tem um número limitados de pinos de entrada e saída. Por exemplo: Se um projeto requer o controle de 8 LEDs individualmente, isso significa que normalmente será necessário o uso de 8 portas do microcontrolador. Usando o CI 74HC595 é possível controlar os 8 LEDs usando apenas 3 portas digitais.
Algumas especificações técnicas do CI 74HC595 encontram-se listadas a seguir:
- Número de bits: 8;
- Tensão de alimentação: 2,5/ 3,3/ 5V;
- Faixa de Temperatura de operação: – 55 ºC a 125 ºC.
O CI 74HC595 possui 16 terminais, como pode ser observado na Figura 2.
Os terminais do 74HC595 serão detalhados a seguir:
- VCC: Fonte de alimentação do registrador;
- GND: Aterramento do CI 74HC595;
- SER (entrada serial): Pino usado para alimentar os dados no registrador de deslocamento.
- QA – QH: Terminais de saída;
- QH’: Pino usado para conectar Cis 74HC595 em série. Conectando o QH’ ao pino QH’ de outro 74HC595, eles se comportarão como um único CI de 16 saídas.
- SRCLK (Clock do registrador de deslocamento): Pino clock do registrador de deslocamento. Para deslocar bits CI 74HC595, o clock deve ser colocado em HIGH.
- RCLK (Latch do registrador de deslocamento): Pino latch do registrador de deslocamento. Quando colocado em nível alto, copia o conteúdo do registrador para o Latch, que finalmente é enviado para a saída.
- SRCLR (Limpar o registrador): Este pino permite zerar todo o registrador de deslocamento, tornando todos os seus bits 0. Para realizar este reset, é necessário definir o pino SRCLR como LOW. Quando nenhum reset for necessário, definimos o pino como HIGH.
- OE (habilitação da saída): Quando a tensão neste pino é alta, os terminais de saída são desabilitados. Quando o OE é colocado em nível baixo de tensão, os pinos de saída funcionam normalmente.
Neste projeto, usaremos o CI74HC595 para acionar 8 LEDs usando apenas 3 portas da placa Arduino. Para tal, faremos uso da biblioteca ShiftRegister74HC595.h que simplifica o uso de registradores de deslocamento.
MATERIAIS NECESSÁRIOS
- 1 x Placa UNO SMD R3 Atmega328 compatível com Arduino UNO;
- 1 x Cabo USB;
- 1 x Protoboard;
- 1 x Registrador de deslocamento CI74HC595;
- 8 x LED difuso de 5mm;
- 8 x Resistores de 1 kΩ;
- Fios de jumper macho-macho.
ESQUEMÁTICO DE LIGAÇÃO DOS COMPONENTES
Monte o circuito utilizando a protoboard, o registrador de deslocamento, os LEDs, os resistores e os fios.
Ao montar seu circuito observe os seguintes pontos:
- Localize o chanfro em forma de U no CI75HC595. Quando voltado para cima, os pinos de 1-8 ficarão do seu lado esquerdo de cima para baixo e os pinos 9-16 estarão localizados a sua direita de baixo para cima;
- Conecte o CI74HC595 no centro da protoboard, no espaço vazio para encaixe de circuitos integrados, garantindo que cada lado do CI esteja em um lado da protoboard;
- Os pinos 15, 1, 2, 3, 4, 5, 6 e 7 são os pinos de saída. Deste modo, devem ser conectados aos LEDs;
- Os pinos 8 e 13 devem ser conectados ao GND;
- Os pinos 16 e 10 dever ser ligados a alimentação de 5V;
- O pino 11 do CI74HC575 deve ser conectado ao pino digital 11 da placa UNO;
- O pino 12 do CI74HC575 deve ser conectado ao pino digital 10 da placa UNO;
- O pino 14 do CI74HC575 deve ser conectado ao pino digital 9 da placa UNO
ELABORANDO O CÓDIGO :
Após a montagem do circuito, vamos a programação do Sketch. Neste projeto, iremos acionar LEDs usando o registrador de deslocamento CI74HC595. Com auxílio da biblioteca ShiftRegister74HC595.h, criaremos um código para acionar, desligar e criar efeitos nos LEDs.
Deste modo, vamos proceder a instalação da biblioteca para uso simplificado do registrador de deslocamento CI74HC595. Esta biblioteca encontra-se disponível para download no seguinte link:
www.blogdarobotica.com.br/biblioteca-74HC595
Com a biblioteca instalada, vamos a programação do nosso Sketch. Acompanhe os passos a seguir para melhor compreensão da lógica de programação:
1. Incluir a biblioteca:
Vamos incluir a biblioteca para uso do CI74HC595 através da instrução #include <ShiftRegister74HC595.h>.
2. Declarar as variáveis:
Neste código criaremos três variáveis:
- dadosPin: responsável por alimentar os dados no registrador de deslocamento (entrada serial);
- latchPin: responsável pelo latch por setar o latch do registrador de deslocamento;
- clockPin: responsável pelo clock do registrador de deslocamento.
3. Criar objeto registrador do tipo ShiftRegister74HC595:
Em seguida, criaremos o objeto registrador do tipo ShiftRegister74HC595, definindo a quantidade de registradores que estão sendo utilizados e os pinos de dados, clock e latch.
4. Criar função para desligar todos os LEDs:
Para desligar todos os LEDs ao mesmo tempo usaremos a função setAllLoW();.
5. Criar função para ligar todos os LEDs:
Para ligar todos os LEDs ao mesmo tempo usaremos a função setAllHigh();.
6. Criar função para acionar LEDs de modo intercalado:
Na função intercalar(), criaremos os arrays valorPin e valorPin1 do tipo uint8_t (unsigned integer de 8 bits type – Inteiro sem sinal de 8 bits). Dentro de cada array, usaremos o formatador binário “B” e escreveremos 1 (HIGH) na posição do LED que queremos acionar e 0 (LOW) na posição dos LEDs que queremos desligar.
Ao usar o formatador binário inicial “B” informaremos ao microcontrolador que este valor é um número binário. O formatador binário trabalha apenas com bytes, ou seja, 8 bits entre 0 (B00000000) e 255 (B11111111).
7. Criar função para acionar LEDs com efeito crescente e desligar com efeito decrescente:
Para acionar os LEDs de modo crescente e desligá-los de maneira decrescente, usaremos a estrutura de repetição for e a função set().
8. Função setup():
Neste exemplo, a função setup() ficará vazia.
9. Chamar as funções:
Na função loop(), chamaremos as funções escritas anteriormente.
Assim sendo, o Sketch deste projeto terá a seguinte estrutura:
#include <ShiftRegister74HC595.h> #define dadosPin 9 //Pino de dados do registrador #define latchPin 10 //Pino latch do registrador #define clockPin 11 //Pino clock do registrador //Objeto do tipo ShiftRegister74HC595. Parâmetros: //<número de registradores> (pino de dados, pino de clock, pino de latch) ShiftRegister74HC595<1> registrador(dadosPin, clockPin, latchPin); void desligar() { //Função para desligar todos os LEDs registrador.setAllLow (); //Define todos os pinos BAIXOS delay (1000); } void ligar() { //Função para ligar todos os LEDs registrador.setAllHigh (); //Define todos os pinos HIGH delay (1000); } void intercalar() { //Função para ligar os LEDs 1, 3, 5 e 7 e depois os LEDs 2, 4, 6 e 8 uint8_t valorPin[] = { B10101010 }; //Aciona os LEDs 1, 3, 5 e 7 registrador.setAll(valorPin); delay(1000); uint8_t valorPin1[] = { B01010101 }; //Aciona os LEDs 2, 4, 6 e 8 registrador.setAll(valorPin1); delay(1000); } void efeito() { //Função para criar efeito crescente e decrescente nos LEDs for (int i = 0; i < 8; i++) { //Aciona todos os LEDs, um por um registrador.set(i, HIGH); delay(500); } for (int i = 8; i > 0; i--) { //Desliga todos os LEDs, um por um registrador.set(i, LOW); delay(500); } } void setup() { } void loop() { ligar(); desligar(); intercalar(); desligar(); efeito(); desligar(); }
Espero ter ajudado,
Obrigada a todos e em caso de dúvidas deixe seu comentário abaixo!
Att. Carol Correia Viana
Bacharel em Engenharia Elétrica com ênfase em Eletrônica, mestra em Engenharia Industrial e especialista em Docência com ênfase em Educação Inclusiva. Atua no setor de Desenvolvimento de Produtos na Casa da Robótica. Editora chefe e articulista no Blog da Robótica. Fanática por livros, Star Wars e projetos Maker.