quinta-feira, março 17, 2022

Piscando LED com um Microprocessador 6809

Nas minhas brincadeiras com Z80 e 6502 uma fonte importante foi o site do Grant Searle. Lá existe um terceiro projeto simples com microprocessador, usando o Motorola 6809. Resisti o quanto pude, mas aí eu vi um vídeo sobre outros chips antigos, fui pesquisar e acabei achando o 6809 para venda. Fiz uma pequena besteira, não reparei que era o modelo que trabalha no máximo a 1MHz e o projeto do Searle usa o modelo que trabalha até 2MHz... mas não vou deixa o chip na gaveta, certo?



Assim como o 6502, o 6809 é descendente do 6800 (também da Motorola), que é contemporâneo do 8080 da Intel. O problema do 6800 era que ele era caro, por ser (relativamente) sofisticado e as técnicas de produção resultarem em 90% de perdas. O 6502 foi projetado para ser mais simples e barato. O 6809 foi lançado bem depois e é ainda mais sofisticado que o 6800 (neste ponto as técnicas de produção já tinham melhorado bastante, mas ele era mais caro que o 6502 e o Z80).

O meu objetivo foi montar um circuito na protoboard capaz de piscar um LED. Para simplificar, resolvi não colocar Ram. O ponto de partida foi o projeto do Searle, retirei a Ram e a UART, baixei o cristal para 4MHz (o clock é 1/4 da frequência do cristal) e coloquei um flip flop (um bit de memória de apenas escrita) para acionar o LED. A EEProm é uma 24C64 (que me deu trabalho no passado) e usei um 74138 para decodificar o endereço. No esquema abaixo os TTLs são do tipo LS (que foi o que achei no Kicad) mas eu usei HC sem problemas (nem sempre isso é possível).


Eu ia escrever o software totalmente na mão, mas achei um site com um assembler e simulador que facilitou a minha vida. O programa é bastante simples, lembrar que a EEProm começa no endereço C000 e que o 6809 inicia a execução após um reset pelo endereço que estiver em FFFE e FFFF.


O circuito funcionou de primeira. E parou de funcionar. E voltou a funcionar.... A primeira ideia era que fosse um mau contato, mas desconfiei também do reset. Como no 6502, o projeto do Searle usa apenas um resistor para a alimentação. Na montagem com o 6502 os problemas no reset eram visíveis, eu melhorei acrescentando um capacitor mas mesmo assim não ficou bom. Na época eu comprei um integrado específico para isso, mas ficou na gaveta.

O integrado é o DS1233 (da Dallas Semiconductor, que foi comprada em 2001 pela Maxim, que foi comprada em 2021 pela Analog Devices). Tem o formato de um transistor, com três conexões: terra, alimentação e reset. E, o mais importante, funcionou corretamente com o 6809.


Alguma hora volto a mexer no 6502, além do reset estou pensando em colocar um controle de fluxo no envio de dados para o terminal.

Alguns links interessantes sobre o 6809:
Em breve vai ter um vídeo no meu canal mostrando os detalhes.


Nenhum comentário: