Índice:

Construir um computador com compreensão básica de eletrônica: 9 etapas (com imagens)
Construir um computador com compreensão básica de eletrônica: 9 etapas (com imagens)

Vídeo: Construir um computador com compreensão básica de eletrônica: 9 etapas (com imagens)

Vídeo: Construir um computador com compreensão básica de eletrônica: 9 etapas (com imagens)
Vídeo: APRENDA A MONTAR UM PC GAMER OU DE ESCRITÓRIO COMPLETAMENTE 2024, Novembro
Anonim
Construir um computador com compreensão básica de eletrônica
Construir um computador com compreensão básica de eletrônica

Você já quis fingir que era realmente inteligente e construir seu próprio computador do zero? Você não sabe nada sobre o que é necessário para fazer um computador mínimo? Bem, é fácil se você souber o suficiente sobre eletrônica para montar alguns ICs corretamente. Este instrutível presumirá que você é bom nessa parte, além de algumas outras coisas. E se não, ainda não deve ser muito difícil acompanhar se você souber como o breadboarding / prototipagem é feito. O objetivo deste manual é fazer com que você tenha um "computador" funcional sem saber muito sobre como eles funcionam. Abordarei a fiação e os fundamentos da programação, além de fornecer um programa muito curto para você. Então vamos começar.

Etapa 1: peças e material

Peças e Materiais
Peças e Materiais
Peças e Materiais
Peças e Materiais

Um "computador" requer: energia, entrada, processamento, memória e saída. Tecnicamente, teremos todas essas coisas. Vou cobrir essas coisas nessa ordem.

Para alimentação, você precisará de uma fonte de 5 volts (aqui rotulada como 5V). Recomenda-se que seja uma fonte regulamentada para que você não frite acidentalmente peças em seu circuito. Nossa entrada será botões. O processamento é autoexplicativo; estamos usando um processador. A memória consistirá apenas em ROM. Os registradores internos de uso geral do processador serão suficientes para serem usados como RAM. A saída será em LEDs.

1 LM7805C - Regulador 5V

1 ZYLOG Z80 - Processador

1 AT28C64B - EEPROM

1 74LS273 - Flip-Flop Octal D

1 74HC374E - Flip-Flop Octal D

3 CD4001BE - Quad NOR Gate

1 NE555 - gerador de clock

2 Resistor de 1K Ohm

1 Resistor de 10K Ohm

1 Rede de resistores de 10K Ohm; 8 barramentos OU 8 resistores adicionais de 10K

1 capacitor 1uF

1 capacitor 100uF

1 botão de pressão

1 matriz de botão 3x4 OU 8 botões de pressão adicionais

8 LED - A escolha da cor não importa

8 Resistores de 330 Ohm ou Rede de Resistor

1 tábua de pão realmente grande ou vários pequenos

Muitos e muitos fios de arame

No meu esquema, tenho um stick de SRAM instalado. Você não precisa nem se preocupar com isso. Eu apenas o adicionei ao esquema para refletir com precisão meu circuito real e o adicionei ao circuito para uso futuro. Também adicionado ao esquema é um quad OR gate (74LS36). As entradas das duas portas não utilizadas são vinculadas ao VCC e suas saídas são deixadas flutuando (não desenhadas). Também não desenhados nem listados acima estão dois capacitores no circuito de alimentação.

Estou alimentando 12 V regulado no regulador de 5 V para alimentar toda a placa de ensaio. Ele fica bem quente, então coloquei um dissipador de calor para resfriá-lo. Se você usar menos de 12 V para alimentar o regulador (use pelo menos 7 V), ele deve funcionar mais frio.

O Z80 é onde a mágica acontece. Ele pega instruções armazenadas na ROM e as executa. A EEPROM armazena nosso programa para o processador executar.

O flip-flop octal que é nosso dispositivo de saída, que retém os dados do barramento de dados em sua própria saída. Isso nos permite alterar o que está no barramento, que é uma etapa muito importante feita várias vezes por instrução, sem alterar o que o usuário / visualizador vê. O flip-flop não pode acionar a corrente necessária para acender os LEDs de saída, então eles alimentam dois dos chips de porta NOR quádrupla que atuam para armazenar as 8 linhas de dados para acionar os LEDs. Como as saídas das portas são invertidas, também temos que conectar os LEDs para que sejam invertidos, mas chegaremos a isso quando chegarmos a esse ponto. O outro chip NOR é usado para decodificação lógica, mas apenas três portas são usadas.

O flip-flop octal usado para entrada é essencialmente a mesma coisa. Os flip-flops de saída mantêm sua saída alta ou baixa, portanto, não podem ser usados para conduzir o barramento; ele manteria os dados no ônibus. O flip-flop usado para entrada substitui o pino / RESET por / EN, que mais ou menos desconecta as saídas do (e do) chip para que ele não retenha dados (saídas tri-state).

Etapa 2: Fiação dos circuitos de energia, relógio e reinicialização

Fiação de energia, relógio e circuitos de reinicialização
Fiação de energia, relógio e circuitos de reinicialização
Fiação de energia, relógio e circuitos de reinicialização
Fiação de energia, relógio e circuitos de reinicialização
Fiação de energia, relógio e circuitos de reinicialização
Fiação de energia, relógio e circuitos de reinicialização

NOTA: Para todas as peças, conecte os trilhos de alimentação primeiro. De todas as coisas que você deve esquecer de conectar, os chips terão muito menos probabilidade de sobreviver a conexões de energia esquecidas.

O circuito de força é o circuito mais simples de conectar, seguido pelos circuitos de reset e clock, respectivamente. Na foto, a entrada de 12 V está no filtro de linha à direita. O fio marrom, escondendo um amarelo embaixo dele, alimenta o regulador de 12 V. A saída do regulador alimenta todas as réguas de energia na placa de ensaio e todas as réguas de energia compartilham um terreno comum porque é assim que a eletrônica funciona.

O processador requer um circuito de relógio para funcionar. Sem ele, ele ficará parado em seu estado inicializado e não fará nada. O relógio opera os registradores de deslocamento internos dos processadores para que possa gerar os sinais para fazer as coisas. Qualquer entrada de relógio serve, até mesmo um resistor simples e um botão de pressão. Mas são necessários muitos ciclos de clock para executar as instruções. A instrução para escrever na saída leva 12 ciclos em si mesma. Você provavelmente não vai querer se sentar e pressionar um botão mais de 100 vezes para obter apenas um loop do código (os números reais estão no final do instrutível). É para isso que serve o NE555. Ele faz a troca para você e em um ritmo (relativamente) rápido.

Antes de começar a conectar qualquer coisa, você pode querer ir em frente e descobrir como deseja que seus componentes sejam dispostos na placa. Meu circuito de relógio é meio que colocado na parte inferior da placa para que fique fora do caminho de outros componentes. Assumiremos que você sabe fazer um relógio básico com o cronômetro. Caso contrário, procure "555 Astable" e siga um tutorial. Use o resistor de 1K para ir entre o trilho de 5 V e o pino 7 do temporizador (R1) e o 10K entre o pino 7 e o pino 2 (R2). Certifique-se de amarrar o pino de reinicialização, pino 4, ao trilho de 5 V para que o temporizador possa funcionar. Coloquei um LED na saída do meu para verificar se o relógio de fato funcionou, mas não é necessário.

Outra opção com o NE555 é configurá-lo como uma porta NOT e usar um resistor de 1K para ligar a saída de volta à entrada. Normalmente é recomendado usar 3 temporizadores para fazer isso, mas descobri que apenas 1 deve funcionar bem. Só saiba que se você fizer isso, ele oscilará em uma velocidade muito alta e será muito difícil, impossível até mesmo, dizer que os LEDs de saída estão piscando. Essa configuração é chamada de "oscilador em anel".

Observe que ainda não estamos conectando o relógio ao processador. Estamos simplesmente preparando-o. Observe também o chip lógico logo acima do relógio na imagem. Foi adicionado muito mais tarde e esse foi o único local semi-razoável que restou para colocá-lo. É usado para seleção de RAM / ROM. Este instrutível ignora a RAM, então você não terá este chip em sua placa.

Agora conectamos o circuito de reinicialização. Primeiro, você precisa encontrar um lugar no tabuleiro para isso. Eu escolhi bem ao lado do relógio. Adicione seu botão ao quadro. Use um resistor de 1K para amarrar um lado do botão ao trilho de 5V. Nossos pinos de RESET são ativos baixos, o que significa que precisamos mantê-los no alto. É para isso que serve o resistor. Essa junção também é onde os pinos de reinicialização se conectam. O outro lado do botão vai direto para o solo. Se você deseja reinicializar a inicialização, adicione o capacitor de 10uF a esta junção também. Ele manterá a tensão nos pinos de reinicialização baixa por tempo suficiente para ativar o circuito de reinicialização dentro do processador e flip-flop.

Etapa 3: Fiação do Z80

Agora chegamos ao âmago da questão. Vamos conectar a besta que é o Z80. Na minha placa, coloquei o Z80 no topo, na mesma seção da placa que o circuito de reinicialização. Conforme declarado anteriormente, conecte os trilhos de alimentação primeiro. 5V vai para o pino 11 à esquerda e o aterramento é um pino para baixo, mas à direita. Você também deve ter notado a largura ímpar do chip. Isso fará com que você tenha 3 conectores abertos de um lado da placa de ensaio e 2 do outro. Isso apenas torna menos conveniente conectar coisas adicionais se você decidir fazê-lo.

Os seguintes números de pino - presumo que você saiba como contar os pinos em um IC - são entradas não utilizadas e devem ser vinculadas ao trilho de 5 V: 16, 17, 24, 25.

Lembra do nosso relógio? Sua saída vai para o pino 6 no z80. O circuito de reset se conecta ao pino 26. Sem ter os outros componentes na placa, isso é o mais longe que eu posso fazer com a fiação do próprio z80. Mais fiação será feita em etapas posteriores.

Como eu já havia construído o circuito antes mesmo de considerar escrever este instrutível, vou adiar a imagem até a próxima etapa.

Etapa 4: Fiação do ROM

Conectando a ROM
Conectando a ROM

NOTA: Você pode querer esperar e colocá-lo na placa se ainda precisar de programação (mais sobre isso mais tarde).

Para a ROM, coloquei-o ao lado do Z80 à direita e também desloquei um pino para baixo na placa de ensaio. Isso me permitiu conectar o barramento de endereço diretamente, mas mais sobre isso mais tarde. O AT28C64B é um EEPROM, o que significa que pode ser programado várias vezes, desligando e ligando alguns pinos. Não queremos que nossa EEPROM se reprograme acidentalmente quando estiver no circuito. Assim, uma vez que seus barramentos de alimentação estejam conectados, conecte o pino 27 (/ WE) ao barramento de 5 V para desativar o recurso de gravação por completo.

Meu programa é tão pequeno que só precisei das 5 linhas de endereço inferiores (A0-A4) conectadas, mas conectei A5, A6 e A7 de qualquer maneira para poder escrever programas maiores sem trabalho adicional. As linhas de endereço adicionais (A8-A12) são conectadas diretamente ao aterramento para evitar o acesso indesejado aos endereços superiores de entradas flutuantes. Com as entradas de endereço não utilizadas vinculadas ao aterramento e o controle de gravação vinculado a 5 V, a fiação do resto é bastante direta. Encontre A0 no processador e conecte-o a A0 na ROM. Em seguida, encontre A1 no processador e conecte-o a A1 na ROM. Faça isso até conectar todos os endereços. Na imagem, meu barramento de endereços para a ROM é feito em fiação azul. O barramento de endereço que vai para a RAM é feito em fiação vermelha. Esses fios foram todos pré-cortados e descascados conforme vinham em um kit de fiação de protoboard e eram perfeitos para essa fiação.

Depois de obter os endereços conectados (isso é chamado de barramento de endereço), faça exatamente a mesma coisa para os pinos rotulados D0, então D1, D2, etc. Faça isso para todos os pinos de dados (D0 - D7) e você terá o seu barramento de dados com fio. Estamos quase terminando de conectar a ROM. Encontre o pino / CE (ativação do chip) do ROM e conecte-o ao pino 19 do processador, / MREQ (solicitação de memória) e, em seguida, encontre o / OE do ROM (ativação de saída) e conecte-o ao pino 21 do processador, / RD (leitura). Agora terminamos. Tudo isso é feito com fios de jumper porque eles têm que ir para o outro lado do processador e uma placa de ensaio não oferece espaço suficiente para usar fiação organizada como essa.

Etapa 5: Fiação da saída

Fiação da saída
Fiação da saída
Fiação da saída
Fiação da saída

Como não estava preenchido, escolhi a seção da placa à esquerda do Z80 para a saída. Coloque o flip-flop lá e conecte os trilhos de alimentação. O pino 1, / MR (reset) pode ser conectado diretamente ao pino de reset do processador, mas você pode deixá-lo amarrado ao trilho de 5V. Isso só fará com que ele mostre dados inúteis até a primeira gravação. Observe como o chip tem uma entrada de clock no pino 11. Essa entrada é estranha porque é ativada quando o pino fica alto. Observe também que este pino NÃO é o mesmo clock que aciona o processador. Este relógio bloqueia os dados declarados no barramento de dados.

Lembra como conectamos D0 - D7 na ROM aos mesmos pinos do processador? Faça exatamente o mesmo para este chip. Seu D0 vai para D0 no barramento de dados e assim por diante. Os pinos que começam com um "Q" são saídas. Antes de conectá-los, precisamos adicionar mais chips. Usei os portões NOR quad porque tenho um tubo deles e já precisava de um, mas praticamente qualquer chip funcionará se você conectá-lo corretamente. Eu poderia ter ligado uma entrada em todas as portas ao aterramento e usado as outras entradas como, bem, entradas, mas escolhi conectar as duas entradas para simplificar.

Coloquei os chips abaixo do flip-flop para facilitar a conexão direta sem jumpers, mas eu estava com pouco fio neste ponto, então isso realmente não importou no final. O Q0, Q1….. Q7 no flip-flop vai para as entradas nas portas individuais. Com 4 portas em cada pacote / chip, precisei de 2 pacotes e usei todas as portas. Se você encontrar uma versão do flip-flop que pode acionar os LEDs sem a necessidade de um buffer como este, esses dois chips não são necessários. Se você usar portas como um buffer que não tem saídas invertidas (AND / OR / XOR), você pode conectar os LEDs como esperado. Se você estiver usando as mesmas peças que eu e / ou as saídas estiverem invertidas, os LEDs devem ser conectados conforme descrito abaixo. A primeira imagem mostra a parte IC da saída.

Use os resistores de 330 Ohm para ligar os LEDs positivos (ânodo) ao trilho de 5 V e conectar o negativo (cátodo) à saída das portas. Você pode ver na segunda imagem que usei dois barramentos de resistor, cada um com apenas cinco resistores internos. Conectar os LEDs desta forma fará com que eles acendam quando a saída estiver desligada. Fazemos isso porque a saída está desligada quando a entrada está ligada. Certifique-se absolutamente de manter o controle de quais portas suas saídas do controle flip-flop. A menos que seus LEDs fiquem espalhados ou sua ordem não faça sentido, perdê-los pode causar confusão mais tarde, quando você se perguntar por que a saída está errada.

Etapa 6: Fiação da entrada

Fiação da entrada
Fiação da entrada

Pegue aquele flip-flop 74HC374 e coloque-o em algum lugar. O meu estava em algum lugar abaixo do Z80 na parte inferior do tabuleiro. Lembra da última vez quando conectamos D0 a D0 e D1 a D1 e assim por diante? Desta vez, conectamos Q0 a D0 e Q1 a D1 e assim por diante. Felizmente, não precisamos adicionar nenhum chip de buffer desta vez, haha. Em vez disso, conectaremos um 10K Ohm a cada pino "D" (D0-D7) e aterramento e, em seguida, um botão aos mesmos pinos e ao trilho de 5V. Ou você pode usar um barramento de resistor e reduzir muito a contagem de peças. Uma matriz de botão 3x4 (sem uma saída em matriz !!) também ajudará. A imagem mostra todo o circuito de entrada junto com a lógica de colagem (essa parte é a próxima).

Etapa 7: Glue Logic

Temos uma última coisa para conectar. É chamado de "lógica de colagem" porque é usado para decodificar sinais de controle para fazer tudo funcionar; é o que mantém o circuito unido. Quando o processador deseja gravar dados na saída, ambos / IORQ e / WR (20 e 22, respectivamente) ficam baixos e os dados enviados são declarados no barramento de dados. O pino de clock em ambos os flip-flops está ativo alto, o que significa que os dados são travados quando o pino recebe um sinal alto. Usamos uma porta NOR e conectamos / IORQ a uma entrada da porta e / WR à outra entrada. Quando um está alto, significando que os circuitos IO não estão sendo selecionados ou uma operação de gravação não está sendo executada, a saída que alimenta o relógio do flip-flop permanece baixa. Quando ambas as entradas estão baixas, e somente quando, a saída aumenta e o flip-flop retém os dados.

Agora precisamos conectar o flip-flop de entrada. Podemos conectar o pino do clock da mesma maneira que o anterior, mas usando / IORQ e / RD. Mas, ao contrário do outro flip-flop, também temos um pino / OE que precisa ser diminuído apenas quando / IORQ e / RD estão baixos. Podemos usar um portão de cirurgia. Ou podemos simplesmente pegar o sinal que já temos para o relógio e invertê-lo com uma das duas portas inversoras que já temos disponíveis. No momento de declarar este instrutível, eu não tinha uma porta OR disponível, então usei a última opção. Usar a última opção significava que não precisava adicionar nenhuma parte adicional de qualquer maneira.

Etapa 8: Programação

Se sua fiação estiver correta e minha explicação for clara, tudo o que falta é programar a ROM. Existem algumas maneiras de fazer isso. Você pode pegar o caminho mais fácil e pedir um novo chip da Digikey. Ao fazer o pedido da peça, você terá a opção de fazer upload de um arquivo HEX e eles o programarão antes de enviá-lo. Use os arquivos HEX ou OBJ anexados a este instrutível e espere que ele chegue pelo correio. A opção 2 é construir um programador com um Arduino ou algo assim. Eu tentei essa rota e não conseguiu copiar certos dados corretamente e levei semanas para descobrir isso. Acabei fazendo a opção 3, que é programá-lo manualmente e virar interruptores para controlar o endereço e as linhas de dados.

Depois de convertido diretamente para o código OP do processador, todo o programa fica em apenas 17 bytes de espaço de endereço, portanto, a programação manual não foi tão ruim. O programa carrega no registro de uso geral B o valor 00. O registro B é usado para armazenar um resultado da adição anterior. Como o registrador A é onde a matemática acontece, não o usaremos para armazenar dados.

Falando do registrador A, executamos um comando IN, que lê a entrada e armazenamos os dados lidos em A. Em seguida, adicionamos o conteúdo do registrador B e geramos o resultado.

Depois disso, o registro A é copiado para o registro B. E então fazemos uma série de comandos de salto. Como todos os saltos apontam para o byte inferior das linhas de endereço e como o byte superior da instrução de salto é fornecido no segundo argumento e é "00", podemos forçar cada salto a ser seguido por um NOP. Fazemos isso para dar tempo entre a exibição da saída e a leitura da entrada para evitar entrada acidental. Cada salto usa dez ciclos de clock e cada NOP usa quatro. Se o loop demorar muito para sua preferência, você pode aumentar a velocidade do clock ou pode reprogramá-lo para usar um salto a menos.

Etapa 9: Teste

Se você conectou tudo corretamente e sua ROM está programada corretamente, há uma etapa final a ser executada: conecte-a e veja se funciona. Pressione um botão e aguarde alguns segundos. Leva 81 ciclos de clock para o programa atingir seu primeiro loop e cada loop leva 74 ciclos de clock.

Se não funcionar, verifique se há curtos e pinos desconectados (abre) e outros problemas de fiação. Se você optou por desativar a reinicialização, será necessário fazer uma reinicialização manual antes que o processador faça qualquer coisa. Você também pode conectar LEDs ao barramento de endereço para ver se eles estão se comportando. Eu mesmo estava tendo problemas com isso, então, em vez disso, coloquei-os diretamente no barramento de dados. Isso me permitiu ver o que estava sendo comunicado entre o processador e a ROM sem precisar me preocupar se a ROM estava sendo lida corretamente, o que exigiria diagramas de tempo e eu simplesmente não queria me envolver nisso. Acabou sendo uma boa escolha porque finalmente peguei os Códigos OP problemáticos que estavam armazenados incorretamente.

Recomendado: