Contagem binária em contadores
Um contador digital é um circuito sequencial que percorre uma sequência de estados, normalmente em binário, avançando um estado a cada pulso de clock. Em um contador binário de 4 bits, por exemplo, os estados vão de 0000 (0) até 1111 (15) e então retornam a 0000.
Ao observar as saídas Q3 Q2 Q1 Q0 (MSB para LSB), a contagem binária tem um padrão importante: o bit menos significativo (Q0) alterna a cada pulso; Q1 alterna a cada 2 pulsos; Q2 a cada 4; Q3 a cada 8. Esse comportamento é a base da divisão de frequência (cada bit “divide” o clock por 2 em relação ao bit anterior).
Exemplo rápido (4 bits)
| Decimal | Q3 | Q2 | Q1 | Q0 |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 1 | 0 | 0 | 0 | 1 |
| 2 | 0 | 0 | 1 | 0 |
| 3 | 0 | 0 | 1 | 1 |
| 4 | 0 | 1 | 0 | 0 |
| 5 | 0 | 1 | 0 | 1 |
| 6 | 0 | 1 | 1 | 0 |
| 7 | 0 | 1 | 1 | 1 |
| 8 | 1 | 0 | 0 | 0 |
Módulo (MOD) e sequência de estados
O módulo de um contador é a quantidade de estados distintos que ele percorre antes de repetir. Um contador binário de n bits, sem lógica extra, tem módulo 2^n. Exemplos:
- 3 bits: MOD-8 (0 a 7)
- 4 bits: MOD-16 (0 a 15)
Quando você precisa de um MOD que não seja potência de 2 (por exemplo MOD-10 para decimal), você força o contador a voltar para um estado inicial ao detectar um estado específico. Isso é feito com lógica de reset (limpa para 0) ou com lógica de preset (carrega um valor inicial diferente de 0).
Reset e preset: o que são na prática
- Reset (clear): força as saídas para um estado conhecido, tipicamente
000...0. Pode ser assíncrono (atua imediatamente) ou síncrono (atua na borda do clock). - Preset (set/load): força as saídas para um estado pré-definido, por exemplo
0101. Também pode ser assíncrono ou síncrono, dependendo do contador/flip-flop.
Em projetos de MOD-N, o reset é muito comum porque simplifica: detectou o estado “limite”, volta para 0. O preset é útil quando você quer iniciar a contagem em outro número (por exemplo, iniciar em 1, ou criar uma janela de contagem específica).
- Ouça o áudio com a tela desligada
- Ganhe Certificado após a conclusão
- + de 5000 cursos para você explorar!
Baixar o aplicativo
Contador ripple (assíncrono) vs contador síncrono
Contador ripple (assíncrono)
No contador ripple, apenas o primeiro flip-flop recebe o clock externo. Os demais recebem como “clock” a saída do estágio anterior. Assim, a transição “se propaga” em cascata (efeito ripple).
Efeito prático 1: atrasos acumulados. Como cada flip-flop tem seu tempo de propagação, a mudança em Q0 ocorre primeiro, depois Q1, depois Q2... Isso significa que, durante a transição, as saídas passam por estados intermediários por alguns nanossegundos (ou mais, dependendo da tecnologia e carga).
Efeito prático 2: glitches em decodificação. Se você decodifica um estado (por exemplo, acender um LED quando o contador estiver em 1000), a lógica de decodificação pode “ver” momentaneamente combinações erradas durante a propagação e gerar pulsos espúrios (glitches). Isso é especialmente problemático quando a decodificação gera reset assíncrono: o contador pode resetar antes da hora ou gerar pulsos estreitos indesejados.
Contador síncrono
No contador síncrono, todos os flip-flops recebem o mesmo clock. A lógica combinacional decide quais bits devem alternar, mas a atualização das saídas ocorre “ao mesmo tempo” na borda do clock (na prática, dentro de uma janela pequena definida por tempos internos).
Vantagem prática 1: sem atrasos em cascata entre bits. Não existe a propagação bit a bit típica do ripple; isso reduz muito estados intermediários visíveis externamente.
Vantagem prática 2: decodificação mais limpa. Glitches ainda podem existir na lógica combinacional, mas as saídas do contador mudam de forma mais alinhada, e é comum registrar (sincronizar) sinais decodificados para eliminar pulsos espúrios.
Comparação direta
| Aspecto | Ripple (assíncrono) | Síncrono |
|---|---|---|
| Clock | Somente no 1º estágio; demais em cascata | Mesmo clock para todos os estágios |
| Atraso entre bits | Acumula por estágio (ripple) | Não acumula entre bits (mudança alinhada) |
| Decodificação de estados | Mais sujeita a glitches | Mais robusta |
| Complexidade | Menor (pouca lógica) | Maior (lógica de toggle/enable) |
| Uso típico | Divisão simples de frequência, baixa velocidade | Contagem/controle com decodificação, maior velocidade |
Divisão de frequência com contadores
Um contador binário divide a frequência do clock de forma natural. Em um contador de 4 bits:
Q0tem frequênciaf_clk/2Q1tem frequênciaf_clk/4Q2tem frequênciaf_clk/8Q3tem frequênciaf_clk/16
Isso é útil para gerar clocks mais lentos para LEDs, multiplexação simples, ou para criar “batidas” de tempo em sistemas digitais.
Passo a passo: escolhendo o bit para piscar um LED
Defina a frequência do clock (por exemplo, 1 kHz).
Escolha a frequência desejada no LED (por exemplo, 1 Hz piscando).
Calcule a divisão necessária: precisa dividir por 1000.
Escolha um contador e/ou estágios: cada bit divide por 2. Para chegar perto de 1000, você precisa de aproximadamente
2^10 = 1024, então um contador de 10 bits (ou cascata de contadores) dá uma divisão próxima. Você pode usar o MSB como saída de pisca (aproximação) ou implementar MOD-1000 com reset/preset para obter exatamente 1 Hz.
Observação prática: para LEDs, uma aproximação (1024 em vez de 1000) muitas vezes é aceitável. Para temporização precisa, use MOD-N exato.
Gerando padrões para LEDs com contadores
As saídas do contador já são um padrão binário que muda com o tempo. Isso permite efeitos visuais simples:
- Barra binária: ligar LEDs diretamente em
Q0..Qn(cada LED pisca em uma frequência diferente). - Contagem exibida: usar
Qcomo número binário e decodificar para 7 segmentos (requer decodificador apropriado). - Sequência limitada: criar MOD-N para repetir um padrão curto (ex.: 0 a 5) e mapear estados para LEDs.
Passo a passo: padrão repetitivo MOD-6 para LEDs
Objetivo: repetir estados 0 a 5 (000 a 101) e voltar para 0. Isso gera um ciclo de 6 passos, útil para sequenciadores simples.
Escolha número de bits: 3 bits cobrem 0 a 7, então serve.
Defina o estado de retorno: ao chegar em 6 (
110), forçar reset para000.Crie a lógica de detecção: detectar
Q2=1eQ1=1(para110e111). Se você resetar em110, também evita chegar em111.Aplique o reset: preferencialmente síncrono (se disponível) para evitar glitches; se for assíncrono, cuide da decodificação e do tempo de propagação.
Mapeie LEDs: por exemplo, use uma lógica simples para acender um LED diferente a cada estado (decodificação 1-de-6) ou use diretamente os bits para um padrão binário.
MOD-N com lógica de reset: projeto prático
Existem duas abordagens comuns:
- Reset ao detectar o estado N (ou N-1, dependendo do contador): o contador conta normalmente e, ao atingir um estado específico, é forçado a voltar ao início.
- Preset/Load para um valor inicial: ao detectar o estado limite, carrega um valor diferente de zero (útil para janelas de contagem ou divisão com duty-cycle específico).
Exemplo: projetar um contador MOD-10 (0 a 9) com reset
Você precisa de 4 bits (0 a 15). Para MOD-10, deve voltar para 0 ao atingir 10 (1010).
Bits:
Q3 Q2 Q1 Q0.Estado de detecção: decimal 10 =
1010.Função de detecção (ativa em nível alto):
DET = Q3 · Q1Por quê? Em
1010,Q3=1eQ1=1. Note que isso também é verdadeiro em1110(14). Porém, se você resetar assim que chegar em 10, você nunca alcança 14. Portanto, a detecção simplificada funciona para esse caso.Aplicação do reset:
- Se o contador tiver reset síncrono, use
DETcomo condição para limpar na próxima borda. - Se tiver reset assíncrono,
DETpode causar um pulso de reset com largura muito curta ou suscetível a glitches dependendo do tipo de contador (ripple é mais crítico). Uma prática comum é preferir contador síncrono para MOD-N com decodificação, ou registrarDETantes de aplicar.
- Se o contador tiver reset síncrono, use
Glitches ao resetar em ripple: por que acontece
Em um ripple, ao transitar de 9 (1001) para 10 (1010), os bits não mudam simultaneamente. Durante alguns instantes, a combinação Q3 e Q1 pode ficar verdadeira antes do estado “estável” final, ou pode ocorrer mais de uma vez em uma transição. Se DET aciona reset assíncrono, o contador pode limpar em um momento inesperado, encurtando ou distorcendo a sequência.
Quando a aplicação exige decodificação confiável (por exemplo, gerar um pulso limpo a cada N clocks), a solução típica é usar contador síncrono e reset síncrono, ou então registrar a decodificação com flip-flop antes de usá-la.
Tabela de estados: validando a sequência
Validar um MOD-N significa listar os estados e confirmar que a transição está correta, incluindo o ponto de retorno (reset/preset). A tabela de estados também ajuda a enxergar se algum estado “proibido” pode aparecer e o que acontece se aparecer.
Tabela de estados do MOD-10 (reset em 1010)
| Clock | Q3Q2Q1Q0 (estado) | Decimal | DET = Q3·Q1 | Ação |
|---|---|---|---|---|
| 0 | 0000 | 0 | 0 | Conta |
| 1 | 0001 | 1 | 0 | Conta |
| 2 | 0010 | 2 | 0 | Conta |
| 3 | 0011 | 3 | 0 | Conta |
| 4 | 0100 | 4 | 0 | Conta |
| 5 | 0101 | 5 | 0 | Conta |
| 6 | 0110 | 6 | 0 | Conta |
| 7 | 0111 | 7 | 0 | Conta |
| 8 | 1000 | 8 | 0 | Conta |
| 9 | 1001 | 9 | 0 | Conta |
| 10 | 1010 | 10 | 1 | Reset para 0000 |
| 11 | 0000 | 0 | 0 | Conta |
Se o reset for síncrono, a linha do clock 10 indica que a condição foi detectada e o reset ocorre na borda seguinte (dependendo da implementação). Se for assíncrono, o retorno pode ocorrer imediatamente ao detectar 1010, e a tabela representa a sequência lógica esperada, não necessariamente o comportamento temporizado em nível de nanossegundos.
Exercícios
1) Projeto de um contador MOD-N com lógica de reset
Projete um contador MOD-12 (0 a 11) usando um contador binário de 4 bits e lógica de reset.
- a) Determine quantos bits são necessários e qual é o estado em binário que deve disparar o reset.
- b) Escreva uma expressão booleana para detectar esse estado. Tente primeiro uma detecção exata (usando todos os bits) e depois uma detecção simplificada (usando menos bits) e discuta se a simplificada é segura.
- c) Indique se você prefere reset síncrono ou assíncrono e justifique com base em glitches e atrasos.
2) Validar sequência com tabela de estados
Para o MOD-12 do exercício anterior:
- a) Monte uma tabela listando os estados de 0 até o estado que dispara o reset.
- b) Inclua uma coluna para o sinal de detecção (DET) e uma coluna “próximo estado”.
- c) Verifique se algum estado acima de 11 pode ocorrer durante a operação normal. Se ocorrer por ruído/erro (por exemplo, iniciar em 1111), descreva o que a sua lógica de reset faz: o contador volta para a sequência correta ou fica preso?
3) Divisão de clock para LED
Você tem um clock de 2 kHz e quer um LED piscando aproximadamente a 1,95 Hz (aproximação aceitável). Qual bit de um contador binário você usaria? Mostre o cálculo usando divisões por 2.