quarta-feira, outubro 18, 2017

Cosmac ELF (1802): O Circuito para Montagem em Protoboard

Conforme visto na parte anterior, estou utilizando duas fontes principais para o circuito, uma bem próxima do circuito original e outra com várias melhorias. O circuito original utiliza somente circuitos CMOS da família 40xx e algumas práticas não muito comuns. O meu circuito vai estar mais próximo do mais moderno.

Fio não falta!


Clock

Para a montagem na protoboard eu comecei usando o mesmo circuito que usei com o Z80 (clock baixo ajustável por potenciômetro). Depois de achar os erros de montagem, passei para um cristal de 1.8MHz (como fiz na montagem simplificada).

CDP1802 e Memória

A figura abaixo resume as conexões ao microcontrolador, inclusive a memória RAM. As entradas não utilizadas recebem pullups para não termos ruído nelas (uma precaução importante com circuitos CMOS).


Acabei inclundo um latch para a parte alta do endereço. O 1802 trabalha com endereços de 16 bits, mas usa apenas 8 pinos para conectá-los. O sinal TPA indica quando a parte alta está sendo colocada na via, quando este sinal passa de 0 para 1 o CI 74HC373 o registra internamente.

A memória é a mesma 5116 que usei no Z80. É uma RAM estática de 2K bytes e recebe os endereços A0 a A10. Como é a única memória, está sempre selecionada (/CS ligado a GND). A saída da memória é habilitada diretamente pelo sinal de leitura (/OE da memória ligado a /MRD do 1802). O sinal de escrita da memória (/WE) passa por uma chave antes de ser ligado ao sinal de escrita do 1802 (/MWR); isto permite proteger a memória.

Obs: /xx indica que o sinal xx é ativo no nível baixo.

Sinais de Controle

Vejamos agora os circuitos envolvendo os sinais de controle do processador.
  • O sinal /CLEAR (que é o reset do 1802) vem da chave RUN através do circuito de debounce que vimos na parte anterior.
  • O sinal /EF4 (uma das quatro entradas digitais do 1802) vem da chave IN, também através de um circuito de debounce.
  • O sinal /WAIT (que segura o processador) vem da chave LOAD, mais uma vez via debounce.
  • Estes dois últimos sinais são usados também para gerar o sinal /DMA_IN. Quando /DMA_IN passa de 1 para 0 o byte contido na via de dados é gravado na posição apontada por R(0), que é incrementado. Este recurso será usado para a carga manual de programas (lembre-se que não temos ROM). Após o reset R(0) estará com zero, a cada apertão da chave IN queremos que o valor nas chaves de dados sejam escritos na RAM. Um flip-flop do tipo D (CI 4013) é usado para gerar o sinal /DMA_IN, que está ligado à sua saída invertida (/Q). O dado de entrada do flip flop está fixo em 1, portanto /Q será colocado em 0 quando o sinal de clock subir. Este sinal de clock é o mesmo que colocamos em /EF4 (chave IN "limpa").  Para retornar o sinal /Q ao nível 1 é usada a entrada de reset (R) do flip flop. O sinal R será acionado quando o pino SC1 for para 1 (indicando que o DMA foi feito) ou quando a chave LOAD estiver abaixada.(este OU é implementado por um diodo e um resistor).

Entrada e Saída

Uma das entradas já foi descrita acima: a chave IN pode ser lida pela aplicação como EF4.

Uma saída simples é o LED ligado ao pino Q. Devido às limitações de corrente o LED precisa ser ligado através de um driver.

As oito chaves de dados são ligadas à via de dados através de um buffer 74HC244. O sinal das chaves será colocado na via quando o sinal -MRD estiver em 0 e estivermos no modo LOAD ou tiver sido executada a instrução "INP N" com N maior que 3 (para que o sinal N2 seja ativado).

Por último temos os oito LEDs de dados. que são ligados à via através de um latch 74HC574 (o mesmo que usei com o Z80). Os dados na via serem apresentados nos LEDs quando o sinal TPB (que indica dados válidos escritos pelo processador) estiver em 1 e estivermos no modo LOAD ou tiver sido executada a instrução "OUT N" com N maior que 3 (para que o sinal N2 seja ativado).








No próximo post tem vídeo da montagem funcionando (com direito a LED piscando).

Nenhum comentário: