fbpx
ArduinoNovidadeSimulação

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.

A imagem mostra de maneira real uma foto de circuito integrado 74HC595
Figura 1 – Circuito integrado 74HC595.

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.

A imagem mostra de maneira ilustrativa os terminais do CI 74HC595 - Blog da Robótica
Figura 2 – Terminais do CI 74HC595.

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


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.

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.