Tabla de contenido:

Construya una computadora con conocimientos básicos de electrónica: 9 pasos (con imágenes)
Construya una computadora con conocimientos básicos de electrónica: 9 pasos (con imágenes)

Video: Construya una computadora con conocimientos básicos de electrónica: 9 pasos (con imágenes)

Video: Construya una computadora con conocimientos básicos de electrónica: 9 pasos (con imágenes)
Video: curso de electrónica básica desde cero para principiantes (#1 conceptos básicos) 2024, Mes de julio
Anonim
Construya una computadora con conocimientos básicos de electrónica
Construya una computadora con conocimientos básicos de electrónica

¿Alguna vez ha querido fingir que era realmente inteligente y construir su propia computadora desde cero? ¿No sabe nada sobre lo que se necesita para hacer una computadora mínima? Bueno, es fácil si sabes lo suficiente sobre electrónica como para unir algunos circuitos integrados correctamente. Este instructivo asumirá que eres bueno en esa parte, además de algunas otras cosas. Y si no es así, no debería ser demasiado difícil de seguir si sabe cómo se realiza la creación de prototipos / tableros de pruebas. El propósito de este instructible es conseguirle una "computadora" que funcione sin saber mucho sobre cómo funcionan. Cubriré el cableado y los conceptos básicos de la programación, además de proporcionarle un programa muy breve. Entonces empecemos.

Paso 1: Partes y cosas

Partes y cosas
Partes y cosas
Partes y cosas
Partes y cosas

Una "computadora" requiere: energía, entrada, procesamiento, memoria y salida. Técnicamente tendremos todas estas cosas. Cubriré estas cosas en ese orden.

Para obtener energía, necesitará una fuente de 5 voltios (aquí etiquetada como 5V). Se recomienda que sea una fuente regulada para no freír accidentalmente partes de su circuito. Nuestra entrada serán los botones. El procesamiento se explica por sí mismo; estamos usando un procesador. La memoria solo consistirá en ROM. Los registros internos de propósito general del procesador serán suficientes para usarlos como RAM. La salida será LED.

1 LM7805C - Regulador 5V

1 ZYLOG Z80 - Procesador

1 AT28C64B - EEPROM

1 74LS273 - Chanclas Octal D

1 74HC374E - Flip-Flop Octal D

3 CD4001BE - Puerta NOR cuádruple

1 NE555 - Generador de reloj

Resistencia de 2 1K ohmios

1 resistencia de 10K ohmios

1 red de resistencias de 10 K ohmios; 8 resistencias en bus O 8 resistencias de 10K adicionales

1 condensador de 1uF

1 condensador de 100 uF

1 pulsador

1 Matriz de botones 3x4 O 8 botones pulsadores adicionales

8 LED: la elección del color no importa

8 resistencias de 330 ohmios o red de resistencias

1 tablero realmente grande o varios pequeños

Montones y montones de cables

En mi esquema tengo un palo de SRAM instalado. Ni siquiera necesitas preocuparte por eso. Solo lo agregué al esquema para reflejar con precisión mi circuito real y lo agregué al circuito para uso futuro. También se agrega al esquema una puerta O cuádruple (74LS36). Las entradas de las dos puertas no utilizadas están vinculadas a VCC y sus salidas se dejan flotantes (no dibujadas). Tampoco se dibujan ni se enumeran arriba dos condensadores en el circuito de alimentación.

Estoy alimentando 12V regulados en el regulador de 5V para alimentar toda la placa de pruebas. Hace bastante calor, así que adjunté un disipador de calor para enfriarlo. Si usa menos de 12V para alimentar el regulador (use al menos 7V), debería funcionar más frío.

El Z80 es donde ocurre la magia. Toma instrucciones almacenadas en ROM y las ejecuta. La EEPROM almacena nuestro programa para que lo ejecute el procesador.

El flip-flop octal que es nuestro dispositivo de salida que engancha los datos en el bus de datos a su propia salida. Esto nos permite cambiar lo que hay en el bus, que es un paso muy importante que se realiza varias veces por instrucción, sin cambiar lo que ve el usuario / espectador. El flip-flop no puede impulsar la corriente necesaria para encender los LED de salida, por lo que se alimentan en dos de los chips de compuerta NOR cuádruples que actúan para almacenar en búfer las 8 líneas de datos para controlar los LED. Dado que la salida de las puertas está invertida, también tenemos que cablear los LED para que se inviertan, pero llegaremos a eso cuando lleguemos a eso. El otro chip NOR se utiliza para la decodificación lógica, pero solo se utilizan tres puertas.

El flip-flop octal utilizado para la entrada es esencialmente lo mismo. Los flip-flops de salida mantienen su salida alta o baja, por lo que no se pueden usar para conducir el bus; contendría datos en el bus. El flip-flop utilizado para la entrada reemplaza el pin / RESET con / EN, que más o menos desconecta las salidas de (y del) chip para que no retenga datos (salidas de tres estados).

Paso 2: Cableado de los circuitos de alimentación, reloj y reinicio

Cableado de los circuitos de potencia, reloj y reinicio
Cableado de los circuitos de potencia, reloj y reinicio
Cableado de los circuitos de potencia, reloj y reinicio
Cableado de los circuitos de potencia, reloj y reinicio
Cableado de los circuitos de alimentación, reloj y reinicio
Cableado de los circuitos de alimentación, reloj y reinicio

NOTA: Para todas las piezas, conecte primero los rieles de alimentación. De todas las cosas que se deben olvidar de cablear, es mucho menos probable que los chips sobrevivan a las conexiones de energía olvidadas.

El circuito de alimentación es el circuito más sencillo de conectar, seguido de los circuitos de reinicio y reloj, respectivamente. En la imagen, la entrada de 12 V está en la regleta de alimentación en el extremo derecho. El cable marrón, que esconde uno amarillo debajo, alimenta los 12V al regulador. La salida del regulador alimenta todas las demás regletas de la placa de pruebas y todas las regletas comparten un terreno común porque así es como funciona la electrónica.

El procesador requiere un circuito de reloj para funcionar. Sin él, simplemente se quedará allí en su estado inicializado y no hará nada. El reloj opera los registros de desplazamiento internos del procesador para que pueda generar las señales para hacer cosas. Cualquier entrada de reloj servirá, incluso una simple resistencia y un botón. Pero se necesitan muchos ciclos de reloj para ejecutar las instrucciones. La instrucción para escribir en la salida toma 12 ciclos en sí misma. Probablemente no quiera sentarse allí y presionar un botón más de 100 veces para obtener solo un ciclo del código (los números reales están al final del instructivo). Para eso está el NE555. Hace el cambio por usted y lo hace a un ritmo (relativamente) rápido.

Antes de comenzar a cablear cualquier cosa, es posible que desee seguir adelante y averiguar cómo desea que se coloquen sus componentes en la placa. Mi circuito de reloj está un poco colocado en la parte inferior de la placa para que no interfiera con otros componentes. Asumiremos que sabe cómo hacer un reloj básico con el temporizador. Si no es así, querrá buscar "555 Astable" y seguir un tutorial. Utilice la resistencia de 1K para ir entre el riel de 5V y el pin 7 del temporizador (R1) y el 10K entre el pin 7 y el pin 2 (R2). Asegúrese de atar el pin de reinicio, pin 4, al riel de 5V para que el temporizador pueda funcionar. Puse un LED en la salida del mío para poder verificar que el reloj realmente funcionaba, pero no es necesario.

Otra opción con el NE555 es configurarlo como una puerta NOT y usar una resistencia de 1K para conectar la salida a la entrada. Por lo general, se recomienda usar 3 temporizadores para hacer esto, pero descubrí que solo 1 debería funcionar bien. Solo sepa que si hace esto, oscilará a una velocidad muy alta y será muy difícil, incluso imposible, decir que los LED de salida están parpadeando. Esta configuración se denomina "oscilador de anillo".

Tenga en cuenta que todavía no estamos conectando el reloj al procesador. Simplemente lo estamos preparando. También tenga en cuenta el chip lógico justo encima del reloj en la imagen. Se agregó mucho más tarde y ese era el único lugar semi-razonable que quedaba para colocarlo. Se utiliza para la selección de RAM / ROM. Este instructable ignora la RAM, por lo que no tendrá este chip en su placa.

Ahora conectamos el circuito de reinicio. Primero necesitas encontrar un lugar en tu tablero para ello. Elegí justo al lado del reloj. Agrega tu botón al tablero. Use una resistencia de 1K para atar un lado del botón al riel de 5V. Nuestros pines RESET están activos a nivel bajo, lo que significa que debemos mantenerlos en alto. Para eso es la resistencia. Esta unión es también donde se conectan los pines de reinicio. El otro lado del botón va directo al suelo. Si desea reiniciar el encendido, agregue el capacitor de 10uF a esta unión también. Mantendrá el voltaje en los pines de reinicio bajo el tiempo suficiente para activar el circuito de reinicio dentro del procesador y el flip-flop.

Paso 3: cableado del Z80

Ahora llegamos al meollo de la cuestión. Conectaremos la bestia que es el Z80. En mi placa, coloco el Z80 en la parte superior de la misma sección de la placa que el circuito de reinicio. Como se indicó anteriormente, conecte primero los rieles de alimentación. 5V va al pin 11 a la izquierda y el suelo está un pin hacia abajo pero a la derecha. Es posible que también haya notado el ancho extraño del chip. Hará que tenga 3 conectores abiertos en un lado de la placa y 2 en el otro. Solo hace que sea menos conveniente cablear material adicional si así lo desea.

Los siguientes números de pines, supongo que sabe cómo contar los pines en un IC, son entradas no utilizadas y deben estar vinculadas al riel de 5 V: 16, 17, 24, 25.

¿Recuerdas nuestro reloj? Su salida va al pin 6 en el z80. El circuito de reinicio se conecta al pin 26. Sin tener los otros componentes en la placa, esto es todo lo que puedo conseguir con el cableado del propio z80. Más cableado se realizará en pasos posteriores.

Debido a que ya había construido el circuito antes de siquiera considerar escribir este instructivo, esperaré la imagen hasta el siguiente paso.

Paso 4: cableado de la ROM

Cableado de la ROM
Cableado de la ROM

NOTA: Es posible que desee esperar a colocarlo en el tablero si aún necesita ser programado (más sobre eso más adelante).

Para la ROM, lo coloqué al lado del Z80 a la derecha y también lo desplacé un pin hacia abajo en la placa de pruebas. Esto me permitió conectar el bus de direcciones directamente, pero hablaremos de eso más adelante. El AT28C64B es una EEPROM, lo que significa que se puede programar varias veces encendiendo y apagando algunos pines. No queremos que nuestra EEPROM se reprograme accidentalmente cuando está en el circuito. Entonces, una vez que tenga sus rieles de alimentación conectados, conecte el pin 27 (/ WE) al riel de 5V para deshabilitar la función de escritura por completo.

Mi programa es tan pequeño que solo necesitaba las 5 líneas de dirección inferiores (A0-A4) conectadas, pero de todos modos conecté A5, A6 y A7 para poder escribir programas más grandes sin trabajo adicional. Las líneas de direcciones adicionales (A8-A12) están conectadas directamente a tierra para evitar el acceso no deseado a las direcciones superiores desde entradas flotantes. Con las entradas de dirección no utilizadas conectadas a tierra y el control de escritura conectado a 5V, el cableado del resto es bastante sencillo. Busque A0 en el procesador y conéctelo a A0 en la ROM. Luego, busque A1 en el procesador y conéctelo a A1 en la ROM. Haga esto hasta que haya cableado todas las direcciones juntas. En la imagen, mi bus de direcciones a la ROM se realiza en cableado azul. El bus de direcciones que va a la RAM se realiza con cableado rojo. Todos estos cables fueron precortados y pelados, ya que venían en un kit de cableado de placa de prueba y eran perfectos para este cableado.

Después de conectar las direcciones (esto se llama bus de direcciones), haga exactamente lo mismo para los pines etiquetados como D0, luego D1, D2, etc. Haga esto para todos los pines de datos (D0 - D7) y tendrá su bus de datos cableado. Casi hemos terminado de conectar la ROM. Busque el pin / CE (habilitación de chip) de la ROM y conéctelo al pin 19 del procesador, / MREQ (solicitud de memoria) y luego busque el / OE (habilitación de salida) de la ROM y conéctelo al pin 21 del procesador, / RD (lectura). Ahora hemos terminado. Todos estos se hacen con cables de puente porque tienen que ir al otro lado del procesador y una placa no ofrece suficiente espacio para usar un cableado ordenado como ese.

Paso 5: cableado de la salida

Cableado de la salida
Cableado de la salida
Cableado de la salida
Cableado de la salida

Debido a que estaba despoblado, elegí la sección de la placa a la izquierda del Z80 para la salida. Coloque el flip-flop allí y conéctelos a los rieles de alimentación. El pin 1, / MR (reinicio) se puede conectar directamente al pin de reinicio del procesador, pero puede dejarlo atado al riel de 5V. Hacer esto solo hará que muestre datos basura hasta la primera escritura. Observe cómo el chip tiene una entrada de reloj en el pin 11. Esta entrada es extraña porque se activa cuando el pin sube. También tenga en cuenta que este pin NO es el mismo reloj que impulsa el procesador. Este reloj bloquea los datos declarados en el bus de datos.

¿Recuerda cómo conectamos D0 - D7 en la ROM a los mismos pines del procesador? Haga exactamente lo mismo con este chip. Su D0 va a D0 en el bus de datos y así sucesivamente. Los pines que comienzan con una "Q" son salidas. Antes de conectarlos, debemos agregar más chips. Usé las compuertas NOR cuádruples porque tengo un tubo de ellas y ya necesitaba una, pero cualquier chip funcionará si lo conecta correctamente. Podría haber conectado una entrada en todas las puertas a tierra y usar las otras entradas como, bueno, entradas, pero elegí cablear ambas entradas juntas por simplicidad.

Coloqué los chips debajo del flip-flop para facilitar el cableado directamente sin puentes, pero me estaba quedando sin cable en este punto, por lo que al final realmente no importó. El Q0, Q1….. Q7 en el flip-flop va a las entradas de las puertas individuales. Con 4 puertas en cada paquete / chip, necesitaba 2 paquetes y usé todas las puertas. Si encuentra una versión del flip-flop que puede impulsar los LED sin necesidad de un búfer como este, estos dos chips no son necesarios. Si utiliza puertas como búfer que no tienen salidas invertidas (Y / O / XOR), puede conectar los LED como es de esperar. Si está utilizando las mismas piezas que yo y / o las salidas están invertidas, los LED deben conectarse como se describe a continuación. La primera imagen muestra la parte IC de la salida.

Utilice las resistencias de 330 ohmios para unir los LED positivos (ánodo) al riel de 5 V y conecte el negativo (cátodo) a la salida de las puertas. Puedes ver en la segunda imagen que utilicé dos buses de resistencias, cada uno con solo cinco resistencias internas. Conectar los LED de esta manera hará que se enciendan cuando la salida esté apagada. Hacemos esto porque la salida está apagada cuando la entrada está encendida. Asegúrese absolutamente de realizar un seguimiento de las puertas de sus salidas desde el control flip-flop. A menos que sus LED estén dispersos o su orden no tenga sentido, perderles el rastro puede causar confusión más adelante cuando se pregunte por qué la salida es incorrecta.

Paso 6: Cableado de la entrada

Cableado de la entrada
Cableado de la entrada

Tome ese flip-flop 74HC374 y colóquelo en algún lugar. El mío estaba en algún lugar debajo del Z80 hacia la parte inferior del tablero. ¿Recuerda la última vez cuando conectamos D0 a D0 y D1 a D1 y así sucesivamente? Esta vez conectamos Q0 a D0 y Q1 a D1 y así sucesivamente. Afortunadamente, esta vez no tenemos que agregar ningún chip de búfer, jaja. En su lugar, vamos a conectar un 10K Ohm a cada pin "D" (D0-D7) y tierra y luego un botón a los mismos pines y al riel de 5V. O puede usar un bus de resistencias y reducir mucho el recuento de piezas. Una matriz de botones de 3x4 (¡sin una salida matricial!) También ayudará. La imagen muestra la totalidad del circuito de entrada junto con la lógica del pegamento (esa parte es la siguiente).

Paso 7: Lógica de pegamento

Tenemos una última cosa que telegrafiar. Se llama "lógica de pegamento" porque se utiliza para decodificar señales de control para que todo funcione; es lo que mantiene unido el circuito. Cuando el procesador quiere escribir datos en la salida, tanto / IORQ como / WR (20 y 22 respectivamente) se reducen y los datos que se envían se afirman en el bus de datos. El pin de reloj en ambos flip-flops está activo alto, lo que significa que los datos se bloquean cuando el pin recibe una señal alta. Usamos una puerta NOR y cableamos / IORQ a una entrada de la puerta y / WR a la otra entrada. Cuando cualquiera es alto, lo que significa que los circuitos de E / S no se están seleccionando o no se está realizando una operación de escritura, la salida que alimenta el reloj del flip-flop permanece baja. Cuando ambas entradas son bajas, y solo cuando, la salida aumenta y el flip-flop retiene los datos.

Ahora necesitamos cablear el flip-flop de entrada. Podemos conectar el pin del reloj de la misma manera que el anterior, pero usando / IORQ y / RD. Pero a diferencia del otro flip-flop, también tenemos un pin / OE que debe tomarse bajo solo cuando / IORQ y / RD son bajos. Podríamos usar una puerta de quirófano. O simplemente podríamos tomar la señal que ya tenemos para el reloj e invertirla con una de las dos puertas de inversión que ya tenemos disponibles. En el momento de indicar este instructable, no tenía una puerta OR disponible, por lo que utilicé una de la última opción. Usar la última opción significaba que no necesitaba agregar partes adicionales de todos modos.

Paso 8: Programación

Si su cableado es correcto y mi explicación clara, todo lo que queda es programar la ROM. Hay algunas formas de hacerlo. Puede tomar el camino más fácil y pedir un nuevo chip de Digikey. Cuando ordene la pieza, tendrá la opción de cargar un archivo HEX y lo programarán antes de enviarlo. Utilice los archivos HEX u OBJ adjuntos a este instructivo y espere a que llegue por correo. La opción 2 es construir un programador con un Arduino o algo. Probé esa ruta y no pudo copiar ciertos datos correctamente y me tomó semanas darme cuenta de eso. Terminé haciendo la opción 3, que es programarlo a mano y activar interruptores para controlar la dirección y las líneas de datos.

Una vez convertido directamente al código OP del procesador, todo este programa descansa en solo 17 bytes de espacio de direcciones, por lo que programar a mano no fue tan terrible. El programa carga en el registro B de propósito general el valor de 00. El registro B se usa para almacenar un resultado de la suma anterior. Como el registro A es donde ocurren las matemáticas, no lo usaremos para almacenar datos.

Hablando del registro A, realizamos un comando IN, que lee la entrada y almacena los datos leídos en A. Luego, agregamos el contenido del registro B y mostramos el resultado.

Después de eso, el registro A se copia en el registro B. Y luego hacemos una serie de comandos de salto. Debido a que todos los saltos apuntan al byte inferior de las líneas de dirección, y debido a que el byte superior de la instrucción de salto se da en el segundo argumento y es "00", podemos forzar que cada salto sea seguido por un NOP. Hacemos esto para dar tiempo entre mostrar la salida y leer la entrada para evitar una entrada accidental. Cada salto usa diez ciclos de reloj y cada NOP usa cuatro. Si el bucle tarda demasiado para su gusto, puede aumentar la velocidad del reloj o puede reprogramarlo para usar un salto menos.

Paso 9: prueba

Si conectó todo correctamente y su ROM está programada correctamente, hay un último paso a seguir: conéctelo y vea si funciona. Presione un botón y espere unos segundos. Se necesitan 81 ciclos de reloj para que el programa alcance su primer ciclo y cada ciclo tarda 74 ciclos de reloj.

Si no funciona, verifique si hay cortocircuitos y pines desconectados (abiertos) y otros problemas de cableado. Si optó por no reiniciar el encendido, deberá realizar un reinicio manual antes de que el procesador haga algo. También puede conectar LED al bus de direcciones para ver si se comportan. Yo mismo estaba teniendo problemas con eso, así que los pegué directamente al bus de datos. Esto me permitió ver lo que se estaba comunicando entre el procesador y la ROM sin necesidad de preocuparme por si la ROM se estaba leyendo correctamente, lo que habría requerido diagramas de tiempo y simplemente no quería involucrarme en eso. Resulta haber sido una buena elección porque finalmente capté los códigos OP problemáticos que se almacenaron incorrectamente.

Recomendado: