Montando o circuito do display decimal

Olá!

Quanto tempo né? Esse post demorou muito mais do que eu esperava pois tive alguns contratempos no trabalho que me fizeram postergar a montagem do computador.

Mas, cá estou! E no post de hoje trataremos da montagem e do estudo do circuito do display decimal.

Este circuito apresenta, na forma decimal (isto é, na base decimal) o valor binário exibido pelos LEDs do circuito do OPR (Output Register).

Inicialmente, usaremos o Proteus para montar os dígitos nos displays de 7 segmentos e assim, descobrir o valor hexadecimal de cada dígito. Vou disponibilizar todos os arquivos que usei para este estudo. Lembrando que estes arquivos, todos, são baseados no trabalho do Eng. Wagner Rambo, do canal WR Kits, do YouTube. Resolvi refazer todos eles somente para estudo. E indico que todos vocês façam o mesmo. ;)

O passo seguinte foi criar um programa em linguagem C que gera o arquivo binário com os dados de cada digito do display (0 a 9). Este é o arquivo que gravaremos na memória EEPROM.

A estrutura desse arquivo binário é a seguinte: ele contem 10 bytes, ou seja, 10 digitos (nessa primeira versão do arquivo - depois, ele crescerá mais, devido à lógica de unidade, dezena e centena)  e cada um deles está gravado em um endereço da EEPROM. Por exemplo, no endereço 0, temos o valor referente ao dígito 0, no endereço 1, o valor referente ao dígito 1 e assim por diante (lembre-se: estou comentando sobre a versão inicial do arquivo).

A idéia aqui é, ao ligarmos esse display ao circuito do OPR (que é de 8 bits assim como a entrada de endereços da EEPROM), sua saída de 8 bits receba o valor armazenado no endereço selecionado pelo circuito do OPR.

Entretanto, o grande pulo do gato vem agora: como queremos exibir números de 0 a 255, teremos que utilizar 3 displays de 7 segmentos e como queremos, ainda, exibir números negativos, precisaremos de mais 1 para exibir o sinal, totalizando 4.

Se temos 4 displays e queremos exibir um digito diferente em cada um, o que fazemos?

Isso mesmo, multiplexamos!

Mas como nosso intuito é montar um computador de 8 bits o mais "roots" possível, não vamos utilizar microcontroladores para fazer a multiplexação. Vamos utilizar somente componentes da amada família 74LS!

A lógica (parafraseando o Eng. Wagner Rambo) muito elegante :) é a seguinte:

Temos um valor de 8 bits armazenado em um endereço de nossa EEPROM, que representa o dígito de um valor decimal que queremos exibir no display.

Como temos 4 displays e queremos exibir um valor de 3 dígitos + 1 sinal, adicionamos mais 3 bits (A8, A9 e A10) que servirão como "flag de posição" (A8, A9) e "flag de sinal" (A10) para cada um dos dígitos de nosso número que vai de 000 até 255 (unsigned) e -128 até 127 (signed). Veja que a quantidade de números que podemos exibir continua a mesma porém, o range de valores muda por conta do sinal.

Para esclarecer:

Quando A10 = 0 e A9 e A8 forem, respectivamente:

00 - exibiremos a unidade
01 - exibiremos a dezena
10 - exibiremos a centena
11 - o display fica em branco (totalmente apagado)

Quando A10 = 1 e A9 e A8 forem, respectivamente:

00 - exibiremos a unidade
01 - exibiremos a dezena
10 - exibiremos a centena
11 - o display exibe o sinal "-" (liga somente o segmento "g" do 40 display)


Portanto, os bits de endereçamento do EEPROM ficarão da seguinte maneira:

A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 <-- pinos de endereçamento da EEPROM
0   0  0  0  0  0  0  0  0  0  0
--- -----  ----------------------
 ^    ^              ^
 |    |              |
 |    |              bits de endereço
 |    bits de flag de posição
 bit de flag de sinal



No programa em C para controlar os displays existe uma particularidade para lidar com os números signed.&nbsp

Esta particularidade se dá devido ao tratamento de overflow do valor quando sinalizado. Por exemplo, quando tivermos o valor 129 unsigned, ao se representar esse valor signed, ele deverá ser -127. Quando tivermos o valor 130, ele deverá ser -126. E assim por diante. Perceba que, a cada unidade de overflow, o valor negativo cai um múltiplo de 2 e é sinalizado (129 vira -127, 130 vira -126, etc).

Para esse controle, foi criada uma variável chamada anchor. Essa variável, quando o valor é menor ou igual a 128, vale 0. Quando o valor ultrapassa 128, a variável anchor é acrescida de 2 para cada unidade que ultrapassou. Essa lógica tem um nome que todo estudante de eletrônica digital conhece bem: é a famosa lógica do Complemento de Dois!

E você achou que nunca usaria isso na sua vida né?

Bem, quem quiser compreender um pouco melhor a lógica, indico o estudo do programa em C que vou disponibilizar aqui, junto com os arquivos do Proteus que utilizei para estudar o circuito. ;)

Este circuito foi construído da seguinte forma:

Criamos um oscilador com o 555 que, no nosso caso, está trabalhando com uma frequência de 380 Hz (o bastante para multiplexar os displays). Esse oscilador é ligado à um 74LS161 (contador binário de 4 bits - usamos os dois LSB) que indica qual a posição do dígito no display.

Este contador é, então, ligado aos pinos de endereçamento da EEPROM (pinos A8 e A9) e a um 74LS139 (DEMUX - demultiplexador) que tem suas saídas ligadas aos catodos dos displays de 7 segmentos (4 pinos - 1 para cada dígito).

É um circuito razoavelmente simples mas, muito funcional. É um daqueles blocos esquemáticos que é sempre bom termos conhecimento pois sua montagem pode ser utilizada em diversas aplicações.

Eu tive um pequeno contratempo na montagem desse circuito. Toda a lógica foi feita baseando-se num display de 7 segmentos, de 4 dígitos, com catodo comum. Eu tinha um pequeno display verde, com 4 dígitos, bem estiloso aqui. Esse display que comprei como sucata, é utilizado em painéis de avião. Tem os dígitos inclinados (em itálico, rs) e tal. Entretanto, o problema: ele é de anodo comum! Não serve. :/

Poderia, também, ter utilizado 4 displays de 7 segmentos separados. Mas, iria criar um "mar de fios" e eu não tenho espaço na protoboard para eles.

A solução foi comprar um display de 4 dígitos, catodo comum, com a medida aproximada do que eu estava usando (0.36"). Achei um no Mercado Livre e terminei a montagem.

Como sempre, o resultado pode ser visto nas fotos abaixo. Vou editar um pequeno vídeo do computador funcionando e posto o link assim que o fizer. ;)

Vejam que o display exibe, em decimal, o valor binário exibido pelos LEDs do OPR

Exibição de um número decimal negativo (repare no valor indicado pelos LEDs do OPR :)

Visão geral do computador até o presente momento

Esse é um grande passo para o computador de 8 bits! Afinal, não é muito prático ficar lendo valores binários em LEDs... Rs

É isso aí galera! Por hoje é só.

No próximo post discutiremos sobre o conjunto de instruções do computador de 8 bits.

Abraços e até a próxima!

Comentários

Postagens mais visitadas