Registradores: memória de múltiplos bits
Um registrador é um conjunto de flip-flops que armazena vários bits ao mesmo tempo. Se um flip-flop armazena 1 bit, um registrador de 8 bits armazena 8 bits (um “byte”). Em geral, todos os flip-flops do registrador compartilham o mesmo clock, de modo que o conteúdo é atualizado de forma sincronizada.
O que um registrador faz na prática
- Guardar um valor (ex.: um byte vindo de um sensor digital ou de uma interface serial).
- Segurar o valor estável enquanto outras partes do circuito usam esse dado.
- Transferir dados entre blocos (por exemplo, de um barramento para um conjunto de LEDs).
Entradas/saídas típicas de um registrador
Dependendo do CI, você pode encontrar sinais como:
- D[0..n-1]: entradas paralelas (um bit por flip-flop).
- Q[0..n-1]: saídas paralelas.
- CLK: clock.
- CLR/RESET: zera o conteúdo.
- EN/LOAD: habilita carregar/atualizar.
Um registrador “paralelo” simples carrega todos os bits de uma vez (em uma borda do clock) e mantém as saídas até a próxima atualização.
Registradores de deslocamento: movendo bits no tempo
Um registrador de deslocamento é um registrador em que, a cada pulso de clock, os bits “andam” de uma posição para outra. Isso permite converter dados entre serial e paralelo, além de criar efeitos e expandir E/S.
Quatro modos clássicos (SISO, SIPO, PISO, PIPO)
| Sigla | Entrada | Saída | Uso típico |
|---|---|---|---|
| SISO | Serial | Serial | Atraso/linha de retardo de bits, filtragem simples por deslocamento |
| SIPO | Serial | Paralela | Expandir saídas: poucos fios controlam muitos LEDs |
| PISO | Paralela | Serial | Ler várias entradas com poucos fios (teclado, chaves) |
| PIPO | Paralela | Paralela | Armazenar/transferir um barramento inteiro em um pulso |
Entendendo o deslocamento com um exemplo de 8 bits
Imagine um SIPO de 8 bits. Você injeta bits em série (um por clock) e, após 8 clocks, as saídas Q0..Q7 representam o byte carregado. Se o deslocamento for “para a direita”, um bit novo entra em Q0 e o que estava em Q0 vai para Q1, e assim por diante.
- Ouça o áudio com a tela desligada
- Ganhe Certificado após a conclusão
- + de 5000 cursos para você explorar!
Baixar o aplicativo
Clock 1: entra b0 -> Q0=b0
Clock 2: entra b1 -> Q1=b0, Q0=b1
...
Clock 8: entra b7 -> Q7=b0 ... Q0=b7O sentido (MSB/LSB primeiro) depende do CI e de como você interpreta as saídas.
Aplicação 1: efeito de LED em sequência (“corrida”)
Um efeito simples é manter um único ‘1’ circulando: 00000001 → 00000010 → 00000100 ... Para isso, você pode:
- Usar um registrador de deslocamento com realimentação (o bit que sai volta para a entrada), ou
- Carregar um padrão inicial e depois deslocar inserindo 0 e reiniciar quando chegar ao fim.
Em um SIPO comum (como um 74HC595), o método mais prático é enviar, a cada atualização, o byte correspondente ao LED aceso.
Aplicação 2: expansão de saídas
Com um SIPO, você controla 8 saídas usando tipicamente 3 sinais: DATA, CLK e LATCH. Isso é muito útil quando o controlador tem poucas GPIOs ou quando você quer reduzir cabeamento.
Buffers, tri-state e a ideia de barramento
O que é um buffer digital
Um buffer é um circuito que “repete” um sinal na saída, mas com características elétricas melhores (capacidade de corrente, isolamento, redução de carga sobre a fonte). Ele pode ser:
- Não inversor: saída igual à entrada.
- Inversor: saída invertida (às vezes chamado de driver/inversor).
Saída tri-state (três estados)
Em lógica tri-state, a saída pode estar em:
- 0 (forçando nível baixo)
- 1 (forçando nível alto)
- Z (alta impedância, como se estivesse desconectada)
O estado Z permite que várias saídas compartilhem o mesmo fio (um barramento), desde que apenas um dispositivo por vez esteja habilitado para dirigir o barramento.
Barramento e conflito de saída (por que é perigoso)
Um barramento é um conjunto de linhas compartilhadas (por exemplo, 8 linhas de dados). Se dois CIs tentarem dirigir a mesma linha ao mesmo tempo com valores opostos (um em ‘1’ e outro em ‘0’), ocorre contenção:
- Corrente excessiva entre as saídas
- Aquecimento e possível dano
- Nível lógico indefinido no barramento
Por isso, ao usar tri-state, é obrigatório garantir por projeto que a habilitação (OE, EN) seja exclusiva. Em muitos casos, também se usa resistores em série pequenos (por exemplo, 33–220 Ω) para reduzir picos de corrente e ruído, mas isso não substitui a regra de “um driver por vez”.
Onde buffers tri-state aparecem
- Interfaces de barramento (memória, periféricos paralelos).
- Expansão de E/S quando várias fontes precisam compartilhar linhas em momentos diferentes.
- Isolamento entre blocos para evitar que um circuito carregue o outro.
Mini-projeto: controlar vários LEDs com poucas linhas usando registrador de deslocamento
Objetivo: controlar 8 LEDs usando 3 sinais do controlador (ou de um gerador de clock/dados), com checagem de temporização e corrente. Um CI típico para isso é um registrador de deslocamento SIPO com latch (ex.: família 74HC/74HCT equivalente), que fornece saídas paralelas estáveis após o travamento (latch).
Materiais (conceito)
- 1× registrador de deslocamento SIPO com latch e saída paralela (8 bits)
- 8× LEDs
- 8× resistores limitadores de corrente (um por LED)
- Fonte compatível com a família lógica escolhida
- Controlador com 3 pinos (DATA, CLK, LATCH) ou gerador de sinais
Entendendo os sinais (DATA, CLK, LATCH e OE)
- DATA: bit serial que será inserido no registrador a cada pulso.
- CLK: cada borda ativa desloca e captura o bit de DATA.
- LATCH: transfere o conteúdo interno para as saídas Q (mantendo-as estáveis enquanto você desloca o próximo byte).
- OE (Output Enable) (se existir): habilita/desabilita as saídas; quando desabilitado, pode colocar as saídas em alta impedância (tri-state), útil em barramentos.
Passo a passo de ligação (prático)
1) Alimentação e referências
- Ligue VCC e GND do CI corretamente.
- Adicione desacoplamento próximo ao CI (conceito: capacitor cerâmico entre VCC e GND) para reduzir ruído de comutação.
2) LEDs e resistores (corrente)
- Conecte cada saída Q a um LED com resistor em série.
- Escolha o sentido conforme o CI “fonte” (source) ou “drena” (sink) melhor corrente. Em muitos casos, é mais seguro usar o CI para drenar corrente (LED ligado ao VCC via resistor e o CI puxa para GND quando acende).
Dimensionamento rápido do resistor (exemplo):
R ≈ (VCC - Vf_LED) / I_LEDExemplo numérico típico: VCC=5 V, LED vermelho Vf≈2 V, I≈5 mA → R≈(5-2)/0,005=600 Ω (valor comercial próximo: 560 Ω ou 680 Ω). Ajuste a corrente conforme limites do CI e brilho desejado.
3) Conexão dos sinais de controle
- Conecte o pino de DATA do controlador à entrada serial do registrador.
- Conecte CLK ao clock de deslocamento.
- Conecte LATCH ao pino de travamento das saídas.
- Se houver RESET/CLR, defina um estado conhecido na inicialização (por exemplo, manter em nível inativo e aplicar pulso quando necessário).
- Se houver OE, mantenha habilitado para acender LEDs; use-o para apagar tudo rapidamente ou para tri-state quando compartilhar barramento.
4) Sequência de operação (como enviar um byte)
Para atualizar os LEDs com um padrão de 8 bits:
- Coloque LATCH no estado que mantém as saídas “travadas” (não atualiza ainda).
- Para cada um dos 8 bits (MSB→LSB ou LSB→MSB, conforme seu CI):
- Coloque DATA = 0 ou 1.
- Gere um pulso de CLK (respeitando tempos mínimos).
- Ao final, aplique um pulso em LATCH para transferir o byte para as saídas.
Isso evita que os LEDs “pisquem” durante o deslocamento, porque as saídas só mudam quando você aciona o latch.
5) Verificação de temporização (o que checar)
Mesmo sem entrar em detalhes de análise de clock, é importante validar três pontos no datasheet do CI:
- Setup time de DATA antes da borda ativa de CLK (DATA deve estar estável um pouco antes).
- Hold time de DATA após a borda (manter estável um pouco depois).
- Largura mínima do pulso de CLK e de LATCH.
Na prática, se você estiver gerando sinais por software em um microcontrolador, normalmente há folga suficiente. Se usar lógica rápida ou cabos longos, reduza a velocidade do clock e mantenha trilhas curtas.
6) Verificação de corrente (o que não ultrapassar)
- Confira a corrente máxima por pino (cada saída) e a corrente total do CI (soma de todas as saídas) no datasheet.
- Se muitos LEDs ficarem acesos ao mesmo tempo, a corrente total pode exceder o permitido. Soluções comuns:
- Aumentar resistores (reduzir corrente por LED).
- Acender menos LEDs simultaneamente (padrões).
- Usar transistores/drivers externos para os LEDs (o registrador passa a comandar os transistores).
Padrões de teste para validar o circuito
- Teste 1 (um LED por vez): envie 00000001, 00000010, 00000100… para confirmar mapeamento Q0..Q7.
- Teste 2 (todos apagados/acessos): 00000000 e 11111111 para checar corrente total e polaridade.
- Teste 3 (alternado): 10101010 e 01010101 para verificar se não há bits “trocados” e se o latch está funcionando.
Expansão para mais LEDs (encadeamento)
Muitos registradores de deslocamento permitem cascatear (ligar a saída serial do primeiro na entrada serial do segundo). Assim, com os mesmos 3 sinais (DATA, CLK, LATCH), você controla 16, 24, 32… saídas. A regra prática é: para N CIs de 8 bits, envie 8×N clocks antes de acionar o latch.
Onde entram buffers/tri-state neste mini-projeto
Se você precisar compartilhar as linhas de dados com outros dispositivos (um barramento), use:
- Buffer tri-state para isolar DATA/CLK/LATCH quando outro mestre estiver ativo, ou
- OE do próprio registrador (se disponível) para colocar as saídas em alta impedância quando o barramento de LEDs não deve interferir.
O ponto crítico é evitar que duas saídas tentem dirigir a mesma linha simultaneamente. Em projetos com múltiplos módulos, defina claramente quem é o “dono” do barramento em cada momento (habilitação exclusiva).