O codificador e decodificador são circuitos digitais simples e com aplicações interessantes. Vamos estudá-los para entender o que são e como funcionam.
Na aula anterior, vimos como representar qualquer porta-lógica com as portas NAND e NOR.
Informações básicas
Até então, nós estudamos sobre as portas lógicas e como utilizá-las. E, conforme foi dito em aulas anteriores, elas são a base dos sistemas digitais.
Sendo assim, o que será visto nesta aula nada mais é do que as portas lógicas sendo utilizadas para criar circuitos de média complexidade. Isto é, os codificadores e decodificadores são circuitos construídos a partir de portas lógicas para executar determinadas funções que veremos adiante.
Codificador
Conceito
O codificador é um circuito que possui diferentes entradas e um valor de saída para cada uma delas. Ou seja, o valor da saída depende de qual entrada for acionada. E, como o próprio nome do circuito diz, a saída é uma codificação da entrada.
A saída é um valor binário que pode ser de 1 ou mais bits. Já as entradas são independentes, sendo cada uma de 1 bit (indica se está ou não acionada). E só uma entrada pode ser acionada por vez.
Exemplo de codificador
Um exemplo comum é o codificador de decimal para binário. Vamos considerar que ele seja de 3 entradas e que cada entrada representa um número decimal, conforme mostra a imagem seguinte:
Mais pra frente entenderemos porquê não considerei 4 entradas.
O objetivo deste codificador, conforme o nome diz, é indicar qual é a correspondência do número selecionado em binário. Por exemplo, se a entrada 3 fosse selecionada, as saídas S1 e S0 indicariam 11. Isto porque 11 é a correspondência em binário do número decimal 3.
Este codificador é útil caso você esteja desenvolvendo um circuito em que seja necessário selecionar um número para controlar o seu sistema. Pois é mais fácil você selecionar este número em decimal, mas a eletrônica digital entende apenas binário, então você utiliza este codificador para resolver o problema.
Construindo um codificador
Conforme foi comentado no início do post, um codificador nada mais é do que um arranjo de portas lógicas. E, sua estrutura interna vai variar de codificador para codificador.
Mas, por curiosidade, irei mostrar como construir um possível circuito do codificador de decimal para binário mostrado no tópico anterior. Não há muito mistério, pois é só aplicar as técnicas ensinadas nas aulas anteriores (circuito combinacional e Mapa de Karnaugh).
A grande novidade está na tabela-verdade, pois agora apenas uma entrada é acionada por vez. Portanto, só vão interessar as linhas da tabela-verdade em que só uma das entradas estiverem em 1. As demais linhas são consideradas don’t care. Com isto, a expressão final das saídas será uma “soma” de algumas entradas. Logo, para o exemplo anterior:
Construí a tabela começando da entrada 1, mas poderia ter feito o contrário e começado com a entrada 3. O resultado final seria o mesmo. Enfim, com base nesta tabela verdade, o seguinte circuito foi construído no Logisim:
Na imagem acima, a entrada 2 está sendo acionada, resultando na saída: 10 (S1 em alta e S0 em baixa).
Resolvi não incluir a entrada 0 (zero), pois apenas ela acionada e todas as entradas desacionadas iriam gerar o valor 00 na saída. Ou seja não seria possível diferenciar os dois casos. Uma forma de contornar isso seria adicionando uma entrada auxiliar (uma 5ª entrada) para indicar se alguma entrada (0 a 3) está acionada. Mas, para simplificar o exemplo, resolvi seguir apenas com as 3 entradas mesmo.
Decodificador
Conceito
Os decodificadores são parecidos com os codificadores, porém com a lógica de funcionamento invertida:
É um circuito que possui diferentes saídas e um valor de entrada para cada uma delas. Ou seja, uma saída específica é acionada dependendo do valor da entrada. E, como o próprio nome do circuito diz, a saída é uma decodificação da entrada.
A entrada é um valor binário que pode ser de 1 ou mais bits. Já as saídas são independentes, sendo cada uma de 1 bit (indica se está ou não acionada). E só uma saída pode ser acionada por vez.
Exemplo de decodificador
Seguindo o mesmo raciocínio de antes, podemos exemplificar com o decodificador de número binário para decimal (contrário do anterior). Vamos considerar que ele tem 4 saídas e que cada saída representa um número decimal, conforme mostra a imagem seguinte:
O objetivo deste decodificador, conforme o nome diz, é indicar qual número decimal corresponde ao número binário na entrada. Por exemplo, se a entrada fosse 10, a saída 2 seria acionada. Isto porque 10 é a correspondência em binário do número decimal 2.
Este decodificador é útil caso você esteja desenvolvendo um circuito em seja necessário indicar um valor do sistema. Pois é mais fácil você visualizar este valor em decimal, mas a eletrônica digital entende apenas binário, então você utiliza este decodificador para resolver o problema.
Construindo um decodificador
Irei mostrar como construir um possível circuito do decodificador de binário para decimal mostrado no tópico anterior. Novamente, a ideia é aplicar as técnicas ensinadas nas aulas anteriores.
Mas neste caso, as saídas na tabela-verdade ficarão em alta em apenas uma das linhas, pois agora apenas uma saída é acionada por vez. Portanto, será necessário só uma linha para construir a expressão final da saída e a expressão final das saídas será apenas uma AND entre as entradas (barradas ou não). Logo, para o exemplo anterior:
E, com base nesta tabela verdade, o seguinte circuito foi construído no Logisim:
Na imagem acima, a entrada E0 está em nível alto e E1 está em nível baixo (resultando em: 01). Com isto, a saída 1 é acionada.
Resolvi adicionar o 0 (zero) no decodificador, pois aqui não temos o problema do codificador, já que as entradas obrigatoriamente terão que assumir um estado. No codificador, as entradas eram selecionadas de forma pontual, existindo um estado em que não era desejado selecionar nenhuma.
Demais aplicações dos codificadores e decodificadores
Existem outras aplicações além das duas que foram mostradas. Por exemplo um decodificador que converte um número binário para um número decimal em um display de 7 segmentos (display da imagem abaixo).
Este decodificador converte um número binário para o acionamento dos segmentos do display de acordo com o número especificado (0-9). E é possível encontrar este tipo de decodificador já montado em um CI, como é o caso dos CIs 7446, 7447, 7448 ou 7449.
Esta é a aplicação mais útil, mas há também: decodificadores de BCD para decimal, de código gray para decimal etc.
Considerações finais
Está aula foi bem básica e serviu para introduzir conceitos de circuitos que serão vistos na próxima aula. Entretanto, os circuitos vistos aqui não deixam de ter sua utilidade.
De todo modo, na próxima aula, iremos estudar sobre os multiplexadores e os demultiplexadores que são bastante utilizados nas telecomunicações.
Multiplexador e demultiplexador – Aula 8 – ED
Adorei a aula.
Fiquei um pouco na expectativa de encontrar nesta aula, um pouco mais de informação sobre o decodificador de Binário para decimal com display de 7 segmentos…
Mas, estou grato pela aula.
Olá, Ednilson. Sugestão anotada! Vou avaliar a possibilidade de fazer uma aula extra explicando o circuito do decodificador que você comentou.
Oi mano, isso é feito com um algorítmo (a nivel de hardware mesmo), chamado de “double dabble” ou de “shift and add three”, pesquise aí que vc vai encontrar facilmente na web. Espero ter ajudado!
Bacana, Maycon. Valeu pela informação!
Olá Fábio, bom dia !!
Existem outros tipos de decodificadores, diferentes dos que foram citados na aula?
Olá, Marcos! Existem sim, uma possibilidade seria um circuito para descriptografar um determinado código previamente criptografado. Por exemplo, você pode criar sua própria criptografia (com um codificador) que converte letras em números binários de 32 bits (ou qualquer quantidade de bits). Nesse sentido, você poderia criar um decodificador para decifrar os 32 bits codificados de volta para a letra correspondente. Este exemplo é ilustrativo, pois acredito que codificadores e decodificadores para criptografia em hardware utilizam métodos mais complexos nos dias de hoje.
Gostei muito do seu artigo. Bem resumido, sem perder o conteúdo. Direto, sem ser superficial. Gostei!!!
Bacana demais, Ana. Muito obrigado pelo seu comentário! Espero que também goste dos demais posts do site.
Muito bom o propósito e didática do post. Só gostaria apenas de acrescentar uma crítica construtiva. Como também professor, acredito que devemos ter muito cuidado em não repassar conceitos incorretos. A entrada “zero” não foi “decodificada” (no diagrama em bloco) e “zero” ´e” um ´numero válido como todos os outros.
Olá, Joel. Obrigado pelo elogio! Críticas e correções são sempre bem-vindas, pois ocasionalmente acabo errando alguns detalhes mesmo. Pelo que entendi, você está falando do circuito do codificador, certo? Você está certo, já que a entrada “zero” não tem nenhuma ligação com a saída. Assim como comentei no post, uma forma de contornar isso seria adicionando uma outra entrada (ou saída) para indicar se alguma entrada foi acionada. Assim seria possível diferenciar uma saída 00 ocasionada pela falta de acionamento das entradas ou 00 ocasionada pelo acionamento da entrada “zero”. Quis repassar um exemplo simples, mas acabou ficando esse furo que você comentou. Vou ver se faço uma correção e substituo o circuito por um codificador que começa em 1 e vai até 4.
Em que situação um codificador não possui decodificador?
Boa pergunta Mirela. Nem sempre você vai criar um codificador com o objetivo de decodificar os dados (o exemplo do codificador decimal para binário). Mas pensando em aplicações de criptografia, você pode criar um codificador que codifica os dados de entrada e que só vai ser decodificado se você usar uma chave específica em conjunto com um decodificador especial.