Contadores digitais e divisão de frequência: de ripple a síncronos

Capítulo 9

Tempo estimado de leitura: 9 minutos

+ Exercício

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)

DecimalQ3Q2Q1Q0
00000
10001
20010
30011
40100
50101
60110
70111
81000

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).

Continue em nosso aplicativo e ...
  • Ouça o áudio com a tela desligada
  • Ganhe Certificado após a conclusão
  • + de 5000 cursos para você explorar!
ou continue lendo abaixo...
Download App

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

AspectoRipple (assíncrono)Síncrono
ClockSomente no 1º estágio; demais em cascataMesmo clock para todos os estágios
Atraso entre bitsAcumula por estágio (ripple)Não acumula entre bits (mudança alinhada)
Decodificação de estadosMais sujeita a glitchesMais robusta
ComplexidadeMenor (pouca lógica)Maior (lógica de toggle/enable)
Uso típicoDivisão simples de frequência, baixa velocidadeContagem/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:

  • Q0 tem frequência f_clk/2
  • Q1 tem frequência f_clk/4
  • Q2 tem frequência f_clk/8
  • Q3 tem frequência f_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

  1. Defina a frequência do clock (por exemplo, 1 kHz).

  2. Escolha a frequência desejada no LED (por exemplo, 1 Hz piscando).

  3. Calcule a divisão necessária: precisa dividir por 1000.

  4. 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 Q como 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.

  1. Escolha número de bits: 3 bits cobrem 0 a 7, então serve.

  2. Defina o estado de retorno: ao chegar em 6 (110), forçar reset para 000.

  3. Crie a lógica de detecção: detectar Q2=1 e Q1=1 (para 110 e 111). Se você resetar em 110, também evita chegar em 111.

  4. 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.

  5. 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).

  1. Bits: Q3 Q2 Q1 Q0.

  2. Estado de detecção: decimal 10 = 1010.

  3. Função de detecção (ativa em nível alto):

    DET = Q3 · Q1

    Por quê? Em 1010, Q3=1 e Q1=1. Note que isso também é verdadeiro em 1110 (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.

  4. Aplicação do reset:

    • Se o contador tiver reset síncrono, use DET como condição para limpar na próxima borda.
    • Se tiver reset assíncrono, DET pode 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 registrar DET antes de aplicar.

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)

ClockQ3Q2Q1Q0 (estado)DecimalDET = Q3·Q1Ação
0000000Conta
1000110Conta
2001020Conta
3001130Conta
4010040Conta
5010150Conta
6011060Conta
7011170Conta
8100080Conta
9100190Conta
101010101Reset para 0000
11000000Conta

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.

Agora responda o exercício sobre o conteúdo:

Ao projetar um contador MOD-10 (0 a 9) usando um contador binário de 4 bits, qual abordagem reduz a chance de glitches ao aplicar a lógica de detecção para resetar a contagem?

Você acertou! Parabéns, agora siga para a próxima página

Você errou! Tente novamente.

Em contadores ripple, as saídas mudam em cascata e podem gerar estados intermediários que causam glitches na decodificação, acionando reset fora de hora. Com contador síncrono e reset síncrono (ou registrando a detecção), a ação fica alinhada ao clock e mais robusta.

Próximo capitúlo

Registradores, deslocamento e buffers: organizando dados digitais

Arrow Right Icon
Capa do Ebook gratuito Eletrônica Digital para Iniciantes: Portas Lógicas, TTL/CMOS e Interfaces Básicas
60%

Eletrônica Digital para Iniciantes: Portas Lógicas, TTL/CMOS e Interfaces Básicas

Novo curso

15 páginas

Baixe o app para ganhar Certificação grátis e ouvir os cursos em background, mesmo com a tela desligada.