O registrador de deslocamento é útil para aumentar o número de saídas de um microcontrolador e converter dados binários paralelo em serial e vice-versa.
O que é um registrador de deslocamento?
É um conjunto de flip-flops conectados de forma que possam armazenar e transferir dados binários. Um flip-flop transfere bits para o próximo a cada pulso de clock. A saída de um circuito sequencial é conectada à entrada de outro.
Caso não saiba o que são flip-flops, leia o post sobre o assunto antes de continuar.
Um exemplo de aplicação do registrador de deslocamento está nas calculadoras eletrônicas, onde um número é deslocado para a esquerda quando você pressiona outra tecla de número.
Paralelo e serial
Os tipos de registradores são divididos de acordo com as entradas e saídas.
Contador em anel
A saída do último flip-flop é ligada à entrada do primeiro.
Neste circuito, o padrão de saídas se repete a cada determinado número de pulsos, igual ao número de flip-flops. Por exemplo, se tiver 4 flip-flops, o padrão se repetirá a cada 4 pulsos de clock.
Registrador de deslocamento bidirecional
Alguns circuitos integrados podem transferir dados em ambas as direções, dependendo da configuração. Possui circuitos combinacionais, uma entrada para determinar a direção da transferência e duas saídas: uma para cada direção.
O circuito integrado 74HC595
Este é um dos circuitos mais populares para projetos com registrador de deslocamento. Tem 8 bits (1 byte), tecnologia CMOS, usa flip-flops tipo D e a tensão de operação é de 2 a 6 V.
Explicando a função de cada terminal do chip.
- Vcc (16) é o pino de alimentação e GND (8) é o terra.
- Q0 (15) a Q7 (7) são as saídas dos flip-flops.
- Q7S (9), a saída serial de dados.
- SHCP (11), a entrada de clock do registrador de deslocamento.
- DS (14), a entrada serial.
- OE (13), o habilitador da entrada.
- STCP (12), o clock do registrador de armazenamento, também conhecido como latch.
- MR (10), o master reset.
Dentro do 74HC595, há 8 flip-flops que são o registrador de deslocamento, os outros 8 são o registrador de armazenamento. Cada saída (QA a QH) tem um buffer, amplificador de ganho 1. O buffer não amplifica o sinal, mas serve para controlar cargas de maior potência, isolando-as de portas lógicas de potência menor.
Projeto com 74HC595 e Arduino
Neste projeto, 16 LEDs são controlados com apenas 3 terminais do Arduino. Conectando 2 74HC595 em cascata.
Para este projeto, você precisa abaixar a biblioteca ShiftOut.h, clique aqui para fazer o download.
#include <ShiftOutMega.h> //Inclui a bilioteca ShiftOutMega.h
int number=0;
//Variáveis de uso dos registradores 74HC595
int latchPin = 8; //Pino 12 conectado ao pino 12 do 74HC595 (Latch).
int dataPin = 11; //Pino 13 conectado ao pino 14 do 74HC595 (Data).
int clockPin = 12; //Pino 11 conectado ao pino 11 do 74HC595 (Clock).
//Quantidade de registradores (74HC595).
int qtdRegistradores = 2;
//Um vetor de LEDs
byte leds[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
//Variável que determina a direção.
int direction=1;
int returnled=15;
ShiftOutMega mega(latchPin, dataPin, clockPin, qtdRegistradores); //Inicia a biblioteca passando os parametros de uso.
void setup(){
Serial.begin(9600);
}
void loop(){
//Inicializa todos os LEDs como apagados.
for(int i=0;i<16;i++){
mega.shiftWrite(leds[i],LOW);
}
//Acende o primeiro LED.
mega.shiftWrite(leds[number],HIGH);
number += direction; //Segue em uma direção.
if(number==16){ //Se chega até o último, muda a direção.
direction=-1;
}
if(number==0){ //Se chega até o primeiro, muda a direção.
direction=1;
}
}