Olá a todos. Continuando a série sobre eletrônica digital, hoje vou falar sobre o que são registradores, sobre a sua implementação com Flip-Flops e sobre para que eles são usados em circuitos eletrônicos.
O que são registradores? Bom, um flip-flop isolado é um dispositivo com capacidade de armazenamento de 1 bit. Os sistemas digitais geralmente utilizam barramentos de dados com largura maior que 1 bit, como, por exemplo. 8 bits, ou 16 bits. Para armazenar as informações que circulam por este barramento um flip-flop sozinho não dá conta. Por isso se utiliza um conjunto de flip-flops em uma associação conhecida como registrador. Um registrador de 8 bits, por exemplo, é uma associação de, no mínimo, 8 flip-flops. Esta associação é capaz de armazenar 8 bits.
Os microcontroladores Microchip PIC contém registradores de 8 bits. Como no exemplo dos PICs , registradores são ocorrências muito comuns em sistemas digitais. Mas como é possível implementar um registrador com o que a gente já conhece?
Bom, abaixo está o esquema de um registrador paralelo de 4 bits, implementado utilizando-se FF (Flip-Flops) tipo D. Este registrador recebe uma informação de 4 bits de forma paralela, e permite o acesso dessa informação de forma paralela também.
Nesta imagem temos 4 FF tipo D. Cada entrada D do FF tipo D está conectada a uma via do barramento de entrada. Cada saída Q dos flip-flops tipo D está ligada a uma via do barramento de saída. Todos os clocks dos FF tipo D estão conectados entre si, assim como suas entradas assíncronas de preset e clear
Assim conseguimos armazenar uma informação de 4 bits da seguinte forma. Seguramos as entradas assíncronas em 1, para o FF funcionar de forma síncrona. Colocamos a informação que queremos no barramento de dados, de 4 bits, e damos um pulso positivo na entrada de clocks desses FF. Dessa forma os dados do barramento de dados são transferidos para o barramento de saída, e ficará armazenada nesse barramento até um acionamento das entradas assíncronas, ou até um próximo pulso de clock, que fará um novo carregamento dos FF.
Abaixo está a imagem de um registrador série de 4 bits, implementado utilizando-se também FF tipo D. Este registrador recebe a informação de forma série e transmite a informação de forma série. Esse registrador também é conhecido como registrador de deslocamento.
Para entrar com informação nesse FF procedemos da seguinte forma. Mantemos as entradas assíncronas em 1, para os FF funcionarem no modo síncrono. Então colocamos um bit na entrada serial e, ao dar um pulso positivo de clock, essa informação passa para a saída do primeiro FF. Colocamos outra informação na entrada serial e damos outro pulso positivo de clock. Assim o que está na saída do 1° FF (e, portanto, está na entrada do 2°FF) passa para a saída do 2° FF, e o que está na entrada serial passa para a saída do 1° FF. Após 4 pulsos de clock, o que foi colocado na entrada serial por primeiro irá sair na saída serial, e todos os dados subsequentes estarão dentro desse registrador. Ao dar mais pulsos de clock conseguimos recuperar as informações no "meio" dele.
Esses registradores entram e saem com a informação da mesma forma. Mas é possível criar registradores com entrada em série e saída paralela, ou o contrário, um registrador com entrada paralela e saída série. E vamos ver agora como fazer isso.
Na imagem abaixo está a imagem de um registrador série-paralelo. Perceba que essa configuração é muito próxima da configuração do registrador série. A diferença é que ao invés de remover a informação de forma serial, na saída do último FF, tiramos a saída de forma paralela, ou seja, da saída de cada FF independente, e depois podemos dar um pulso no Clear (Reset) para zerar todos os FF do registrador. Podemos também somente empurrar uma nova informação sem zerar todos os FF. Após "empurrar" 4 novos bits para dentro do registrador, teremos somente a nova informação.
Cada um dos flags com ponto de interrogação nas saídas dos FF é uma das saídas do registrador.
Por fim temos um registrador paralelo-série, um registrador onde a informação é carregada para dentro do registrador de forma paralela e então deslocada para fora de forma série. A configuração deste registrador está mostrada abaixo:
Neste registrador existe uma entrada de clock, de dados seriais, as entradas paralelas, um enable das entradas paralelas, uma entrada clear e a saída serial. Primeiro zeramos todo o registrador aplicando nível 0 na entrada assíncrona de Clear. Então voltamos a aplicar nível 1 na entrada Clear e aplicamos nível 1 na entrada Enable. Dessa forma o dado que estiver nas entradas paralelas irão aparecer na saída dos FF via entrada assíncrona Preset. Após isso colocamos nível 0 no Enable para fazer os FF operarem no modo síncrono novamente.
Após isso cada pulso de clock desloca o conteúdo dos FF no sentido da saída serial. Os espaços que vão sendo desocupados (começando pelo 1° FF) vão sendo preenchidos pelo valor que está na entrada serial (que, neste caso, é 0). Após deslocarmos 4 vezes a saída, teremos todo o registrador preenchido pelo valor da entrada serial (neste caso, todo o registrador preenchido por 0's). Depois disso o FF está pronto para receber um novo conteúdo das entradas paralelas via habilitação da entrada Enable.
Pode-se ver as estruturas detalhadas neste post, de forma um pouco mais elaborada, em dois CIs, que são o 74HC595 e o 74HC165. O primeiro é um registrador de 8 bits com entrada serial e saída paralela de 8 bits. No datasheet ele mostra a implementação de registradores tipo D utilizando FF SR. Ele possui um arranjo de FF na saída, que é outro registrador de entrada paralela com saída paralela. Tudo isto pode ser visto na página 5 do datasheet da Texas Instruments.
O segundo, 74HC165, é um registrador de 8 bits de entrada paralela e saída serial. Percebe-se a mesma estrutura do registrador paralelo-série que expliquei aqui, de forma não muito mais elaborada. O circuito lógico pode ser encontrado na página 2 do datasheet da Texas Instruments.
Para que serve estes registradores? Bom, imagine que você queira ler 8 entradas usando um microcontrolador. Se você fizer da maneira padrão, cada entrada em um pino do microcontrolador, você acabará utilizando 8 pinos do mesmo. Mas você pode usar um registrador paralelo-série! Dessa forma, as 8 entradas vão para o registrador. O microcontrolador controla o clock de deslocamento e o controle de carregamento dos bits. Enfim, com esta configuração pode-se ler 8 bits utilizando-se apenas 3 pinos do microcontrolador. O custo disso é a velocidade, pois como leremos as entradas em série, teremos uma diminuição de velocidade.
O registrador série-paralelo funciona para a situação inversa, ou seja, quando queremos escrever em 8 saídas, mas não queremos disponibilizar 8 pinos do microcontrolador para isso. Assim utilizamos 1 pino para a saída da informação em série, 1 pino para o clock do deslocamento, 1 pino de reset assíncrono do registrador, 1 pino de clock para mandar a informação do registrador de entrada para o de saída (lembrando que este CI possui dois registradores internos, conforme datasheet) e um pino que coloca a saída em estado de alta impedância (tri-state). Dessa forma utilizando 5 pinos conseguimos escrever em 8 saídas.
O interessante é que para escrever em 16 saídas não precisamos utilizar 10 pinos, pois é possível associar estes CIs de forma que eles se comportem como um só, ou seja, utilizando os mesmos 5 pinos conseguimos escrever em 16 saídas. O custo disso, novamente, é a perda de velocidade quando comparado com escrever nas saídas de forma paralela direta.
E por hoje era isso. Acredito que tenha sido um post completo e esclarecedor, mas a opinião que realmente importa é a opinião do leitor. Então espero que tenham gostado. Um grande abraço e continuem estudando. Como sempre, qualquer dúvida, sugestão ou correção, deixe um comentário. Abraço e até a próxima!
Muito bem explicado!
ResponderExcluirtem como vc posta o arquivo do proteus aq??
ResponderExcluirnao gostei, me deu gatilho, nsao sao todos que tem acesso a um site assim. cancela mana
ResponderExcluirObrigado pelo seu comentário. Muitos termos de jovem. Um forte abraço.
ExcluirExcelente post, parabéns pelo material!
ResponderExcluirParabéns pelo excelente conteúdo!
ResponderExcluir