Table des matières:

Construire un ordinateur avec une compréhension de base de l'électronique : 9 étapes (avec des images)
Construire un ordinateur avec une compréhension de base de l'électronique : 9 étapes (avec des images)

Vidéo: Construire un ordinateur avec une compréhension de base de l'électronique : 9 étapes (avec des images)

Vidéo: Construire un ordinateur avec une compréhension de base de l'électronique : 9 étapes (avec des images)
Vidéo: Les composants de l'ordinateur - Technologie 2024, Juillet
Anonim
Construire un ordinateur avec une compréhension de base de l'électronique
Construire un ordinateur avec une compréhension de base de l'électronique

Avez-vous déjà voulu prétendre que vous étiez vraiment intelligent et construire votre propre ordinateur à partir de zéro ? Vous ne savez rien de ce qu'il faut pour faire un ordinateur au strict minimum ? Eh bien, c'est facile si vous en savez assez sur l'électronique pour assembler correctement certains circuits intégrés. Cette instructable supposera que vous êtes bon à cette partie, ainsi que quelques autres choses. Et si ce n'est pas le cas, cela ne devrait pas être trop difficile à suivre si vous savez comment se fait la maquette/le prototypage. Le but de cette instructible est de vous procurer un "ordinateur" fonctionnel sans en savoir beaucoup sur leur fonctionnement. Je couvrirai le câblage et les bases de la programmation, ainsi que vous fournirai un programme très court. Alors, commençons.

Étape 1: Pièces et éléments

Pièces et trucs
Pièces et trucs
Pièces et trucs
Pièces et trucs

Un "ordinateur" nécessite: puissance, entrée, traitement, mémoire et sortie. Techniquement, nous aurons toutes ces choses. Je couvrirai ces choses dans cet ordre.

Pour l'alimentation, vous aurez besoin d'une source de 5 volts (appelée ici 5V). Il est recommandé qu'il s'agisse d'une source réglementée afin de ne pas faire frire accidentellement des pièces de votre circuit. Notre entrée sera des boutons. Le traitement est explicite; nous utilisons un processeur. La mémoire ne sera constituée que de ROM. Les registres internes à usage général du processeur suffiront à être utilisés comme RAM. La sortie sera des LED.

1 LM7805C - Régulateur 5V

1 ZYLOG Z80 - Processeur

1 AT28C64B - EEPROM

1 74LS273 - Tongs Octal D

1 74HC374E - Tongs Octal D

3 CD4001BE - Porte NOR quadruple

1 NE555 - Générateur d'horloge

2 résistances 1K Ohm

1 résistance 10K Ohm

1 réseau de résistances 10K Ohm; 8 Bussed OU 8 résistances 10K supplémentaires

1 condensateur 1uF

1 condensateur 100uF

1 bouton poussoir

1 matrice de boutons 3x4 OU 8 boutons-poussoirs supplémentaires

8 LED - Le choix des couleurs n'a pas d'importance

8 résistances 330 Ohm ou réseau de résistances

1 très grande planche à pain ou plusieurs petites

Beaucoup et beaucoup de fil

Dans mon schéma, j'ai installé un bâton de SRAM. Vous n'avez même pas besoin de vous en soucier. Je l'ai seulement ajouté au schéma pour refléter avec précision mon circuit réel et je l'ai ajouté au circuit pour une utilisation future. Une porte OU quadruple (74LS36) est également ajoutée au schéma. Les entrées des deux portes inutilisées sont liées à VCC et leurs sorties laissées flottantes (non dessinées). Deux condensateurs sur le circuit d'alimentation ne sont pas non plus dessinés ni répertoriés ci-dessus.

J'alimente en 12V régulé le régulateur 5V pour alimenter toute la planche à pain. Il fait plutôt chaud, j'ai donc attaché un dissipateur de chaleur pour le refroidir. Si vous utilisez moins de 12V pour alimenter le régulateur (utilisez au moins 7V), il devrait fonctionner plus frais.

Le Z80 est l'endroit où la magie opère. Il prend les instructions stockées dans la ROM et les exécute. L'EEPROM stocke notre programme pour le processeur à exécuter.

La bascule octale qui est notre périphérique de sortie qui verrouille les données du bus de données vers sa propre sortie. Cela nous permet de changer ce qui se trouve sur le bus, ce qui est une étape très importante effectuée plusieurs fois par instruction, sans changer ce que l'utilisateur/le spectateur voit. La bascule ne peut pas piloter le courant requis pour allumer les LED de sortie, elles alimentent donc deux des puces de porte NOR quadruple qui agissent pour tamponner les 8 lignes de données pour piloter les LED. Comme les sorties des portes sont inversées, nous devons également câbler les LED à inverser, mais nous y reviendrons lorsque nous y viendrons. L'autre puce NOR est utilisée pour le décodage logique mais seules trois portes sont utilisées.

La bascule octale utilisée pour l'entrée est essentiellement la même chose. Les bascules de sortie maintiennent leur sortie haute ou basse afin qu'elle ne puisse pas être utilisée pour piloter le bus; il contiendrait des données sur le bus. La bascule utilisée pour l'entrée remplace la broche /RESET par /EN, qui déconnecte plus ou moins les sorties de (et de) la puce afin qu'elle ne conserve pas de données (sorties à trois états).

Étape 2: Câblage des circuits d'alimentation, d'horloge et de réinitialisation

Câblage des circuits d'alimentation, d'horloge et de réinitialisation
Câblage des circuits d'alimentation, d'horloge et de réinitialisation
Câblage des circuits d'alimentation, d'horloge et de réinitialisation
Câblage des circuits d'alimentation, d'horloge et de réinitialisation
Câblage des circuits d'alimentation, d'horloge et de réinitialisation
Câblage des circuits d'alimentation, d'horloge et de réinitialisation

REMARQUE: Pour toutes les pièces, câblez d'abord les rails d'alimentation. De toutes les choses à oublier de câbler, les puces auront beaucoup moins de chances de survivre aux connexions électriques oubliées.

Le circuit d'alimentation est le circuit le plus simple à câbler, suivi respectivement des circuits de réinitialisation et d'horloge. Sur la photo, l'entrée 12V se trouve sur la multiprise à l'extrême droite. Le fil marron, cachant un jaune en dessous, alimente le 12V au régulateur. La sortie du régulateur alimente toutes les autres multiprises sur la maquette et chaque multiprise partage un terrain d'entente car c'est ainsi que fonctionne l'électronique.

Le processeur nécessite un circuit d'horloge pour fonctionner. Sans cela, il restera simplement là dans son état initialisé et ne fera rien. L'horloge fait fonctionner les registres à décalage internes du processeur afin qu'elle puisse générer les signaux pour faire des choses. N'importe quelle entrée d'horloge fera l'affaire, même une simple résistance et un bouton-poussoir. Mais il faut de nombreux cycles d'horloge pour exécuter des instructions. L'instruction d'écriture sur la sortie prend 12 cycles en elle-même. Vous ne voulez probablement pas vous asseoir là et appuyer sur un bouton plus de 100 fois pour obtenir une seule boucle du code (les chiffres réels sont à la fin de l'instructable). C'est à cela que sert le NE555. Il effectue la commutation pour vous et à un rythme (relativement) rapide.

Avant de commencer à câbler quoi que ce soit, vous voudrez peut-être aller de l'avant et déterminer comment vous voulez que vos composants soient disposés sur la carte. Mon circuit d'horloge est un peu juste placé au bas de la carte afin qu'il soit à l'écart des autres composants. Nous supposerons que vous savez comment faire une horloge de base avec la minuterie. Si vous ne le faites pas, vous voudrez rechercher "555 Astable" et suivre un tutoriel. Utilisez la résistance de 1K pour passer entre le rail 5V et la broche 7 de la minuterie (R1) et le 10K entre la broche 7 et la broche 2 (R2). Assurez-vous d'attacher la broche de réinitialisation, la broche 4, au rail 5V afin que la minuterie puisse fonctionner. J'ai mis une LED sur la sortie de la mienne pour pouvoir vérifier que l'horloge fonctionnait bien, mais ce n'est pas nécessaire.

Une autre option avec le NE555 consiste à le configurer comme une porte NON et à utiliser une résistance de 1K pour lier la sortie à l'entrée. Il est généralement recommandé d'utiliser 3 minuteries pour ce faire, mais j'ai trouvé qu'une seule devrait fonctionner correctement. Sachez simplement que si vous faites cela, il oscillera à une vitesse très élevée et il sera très difficile, voire impossible, de dire que les LED de sortie clignotent. Cette configuration est appelée « oscillateur en anneau ».

Notez que nous ne connectons pas encore l'horloge au processeur. Nous le préparons simplement. Notez également la puce logique juste au-dessus de l'horloge dans l'image. Il a été ajouté bien plus tard et c'était le seul endroit semi-raisonnable qui restait pour le placer. Il est utilisé pour la sélection RAM/ROM. Cette instructable ignore la RAM, vous n'aurez donc pas cette puce sur votre carte.

Nous allons maintenant câbler le circuit de réinitialisation. Vous devez d'abord lui trouver une place sur votre tableau. J'ai choisi juste à côté de l'horloge. Ajoutez votre bouton au tableau. Utilisez une résistance de 1K pour attacher un côté du bouton au rail 5V. Nos broches RESET sont actives bas, ce qui signifie que nous devons les maintenir haut. C'est à ça que sert la résistance. Cette jonction est également l'endroit où les broches de réinitialisation se connectent. L'autre côté du bouton va directement au sol. Si vous souhaitez réinitialiser la mise sous tension, ajoutez également le condensateur de 10 uF à cette jonction. Il maintiendra la tension sur les broches de réinitialisation suffisamment longtemps pour activer le circuit de réinitialisation dans le processeur et la bascule.

Étape 3: Câblage du Z80

Passons maintenant aux choses sérieuses. On va câbler la bête qu'est le Z80. Sur ma carte, j'ai mis le Z80 en haut sur la même section de carte que le circuit de réinitialisation. Comme indiqué précédemment, câblez d'abord les rails d'alimentation. 5V va à la broche 11 sur la gauche et la masse est une broche vers le bas mais sur la droite. Vous avez peut-être également remarqué la largeur étrange de la puce. Cela vous fera avoir 3 connecteurs ouverts d'un côté sur la planche à pain et 2 de l'autre. Il est seulement moins pratique de câbler des éléments supplémentaires si vous choisissez de le faire.

Les numéros de broches suivants - je suppose que vous savez compter les broches sur un circuit intégré - sont des entrées inutilisées et doivent être liées au rail 5V: 16, 17, 24, 25.

Rappelez-vous notre horloge? Sa sortie va à la broche 6 sur le z80. Le circuit de réinitialisation se connecte à la broche 26. Sans avoir les autres composants sur la carte, c'est tout ce que je peux vous faire avec le câblage du z80 lui-même. Plus de câblage sera fait dans les étapes ultérieures.

Parce que j'avais déjà fait construire le circuit avant même d'envisager d'écrire ce instructable, je vais attendre la photo jusqu'à la prochaine étape.

Étape 4: Câblage de la ROM

Câblage de la ROM
Câblage de la ROM

REMARQUE: vous voudrez peut-être ne pas le placer sur la carte s'il doit encore être programmé (nous en parlerons plus tard).

Pour la ROM, je l'ai placé à côté du Z80 sur la droite et je l'ai également déplacé d'une broche vers le bas sur la maquette. Cela m'a permis de câbler le bus d'adresse directement, mais nous en reparlerons plus tard. L'AT28C64B est une EEPROM, ce qui signifie qu'il peut être programmé plusieurs fois en désactivant et en activant certaines broches. Nous ne voulons pas que notre EEPROM se reprogramme accidentellement lorsqu'elle est dans le circuit. Ainsi, une fois que vos rails d'alimentation sont connectés, connectez la broche 27 (/WE) au rail 5V pour désactiver complètement la fonction d'écriture.

Mon programme est si petit que je n'avais besoin que des 5 lignes d'adresse inférieures (A0-A4) connectées, mais j'ai quand même câblé A5, A6 et A7 pour pouvoir écrire des programmes plus gros sans travail supplémentaire. Les lignes d'adresses supplémentaires (A8-A12) sont reliées directement à la terre pour empêcher tout accès indésirable aux adresses supérieures à partir d'entrées flottantes. Avec les entrées d'adresse inutilisées liées à la terre et le contrôle d'écriture lié à 5 V, le câblage du reste est plutôt simple. Trouvez A0 sur le processeur et connectez-le à A0 sur la ROM. Recherchez ensuite A1 sur le processeur et connectez-le à A1 sur la ROM. Faites-le jusqu'à ce que vous ayez câblé toutes les adresses ensemble. Dans l'image, mon bus d'adresse vers la ROM se fait en câblage bleu. Le bus d'adresse allant à la RAM se fait en câblage rouge. Ces fils étaient tous pré-coupés et dénudés car ils étaient livrés dans un kit de câblage de maquette et étaient parfaits pour ce câblage.

Après avoir câblé les adresses (c'est ce qu'on appelle le bus d'adresse), faites exactement la même chose pour les broches étiquetées D0, puis D1, D2, etc. Faites cela pour toutes les broches de données (D0 - D7) et vous avez votre bus de données câblé. Nous avons presque fini de câbler la ROM. Recherchez la broche /CE (activation de la puce) de la ROM et connectez-la à la broche 19 du processeur, /MREQ (demande de mémoire), puis recherchez la /OE (activation de la sortie) de la ROM et connectez-la à la broche 21 du processeur, /RD (lecture). Nous avons maintenant terminé. Tout cela est fait avec des fils de liaison car ils doivent aller de l'autre côté du processeur et une planche à pain n'offre pas assez de place pour utiliser un câblage soigné comme celui-ci.

Étape 5: Câblage de la sortie

Câblage de la sortie
Câblage de la sortie
Câblage de la sortie
Câblage de la sortie

Parce qu'il n'était pas peuplé, j'ai choisi la section de carte à gauche du Z80 pour la sortie. Placez la bascule dessus et connectez-les aux rails d'alimentation. La broche 1, /MR (réinitialisation) peut se connecter directement à la broche de réinitialisation du processeur, mais vous pouvez la laisser attachée au rail 5V. Faire cela ne fera qu'afficher les données indésirables jusqu'à la première écriture. Remarquez comment la puce a une entrée d'horloge sur la broche 11. Cette entrée est étrange dans la mesure où elle est activée lorsque la broche devient haute. Notez également que cette broche n'est PAS la même horloge qui pilote le processeur. Cette horloge verrouille les données affirmées sur le bus de données.

Rappelez-vous comment nous avons connecté D0 - D7 sur la ROM aux mêmes broches sur le processeur ? Faites exactement la même chose pour cette puce. Son D0 passe à D0 sur le bus de données et ainsi de suite. Les broches qui commencent par un "Q" sont des sorties. Avant de les câbler, nous devons ajouter plus de puces. J'ai utilisé les portes NOR quad car j'en ai un tube et j'en avais déjà besoin, mais à peu près n'importe quelle puce fonctionnera si vous la câblez correctement. J'aurais pu lier une entrée sur toutes les portes à la terre et utiliser les autres entrées comme, eh bien, entrées, mais j'ai choisi de câbler les deux entrées ensemble pour plus de simplicité.

J'ai placé les puces sous la bascule pour faciliter le câblage direct sans cavaliers, mais je manquais de fil à ce stade, donc cela n'avait pas vraiment d'importance à la fin. Le Q0, Q1….. Q7 sur la bascule va aux entrées sur les portes individuelles. Avec 4 portes dans chaque paquet/puce, j'avais besoin de 2 paquets et j'ai utilisé toutes les portes. Si vous trouvez une version de la bascule qui peut piloter les LED sans avoir besoin d'un tampon comme celui-ci, ces deux puces ne sont pas nécessaires. Si vous utilisez des portes comme tampon qui n'ont pas de sorties inversées (ET/OU/XOR), vous pouvez alors câbler les LED comme vous vous en doutez. Si vous utilisez les mêmes pièces que moi et/ou que les sorties sont inversées, les LED doivent être câblées comme décrit ci-dessous. La première image montre la partie IC de la sortie.

Utilisez les résistances de 330 Ohm pour relier les LED positives (Anode) au rail 5V et connectez le négatif (cathode) à la sortie des portes. Vous pouvez voir dans la deuxième image que j'ai utilisé deux bus de résistances, chacun avec seulement cinq résistances internes. Le câblage des LED comme celui-ci les fera s'allumer lorsque la sortie est éteinte. Nous faisons cela parce que la sortie est désactivée lorsque l'entrée est activée. Assurez-vous absolument de garder une trace des portes de vos sorties de la commande de la bascule. À moins que vos LED ne soient dispersées ou que leur ordre n'ait aucun sens, les perdre de vue peut causer de la confusion plus tard lorsque vous vous demandez pourquoi la sortie est erronée.

Étape 6: Câblage de l'entrée

Câblage de l'entrée
Câblage de l'entrée

Prenez cette bascule 74HC374 et placez-la quelque part. Le mien était quelque part en dessous du Z80 vers le bas de la planche. Vous vous souvenez de la dernière fois où nous avons connecté D0 à D0 et D1 à D1 et ainsi de suite ? Cette fois, nous connectons Q0 à D0 et Q1 à D1 et ainsi de suite. Heureusement, nous n'avons pas besoin d'ajouter de puces tampon cette fois, haha. Au lieu de cela, nous allons connecter un 10K Ohm à chaque broche "D" (D0-D7) et à la masse, puis un bouton aux mêmes broches et au rail 5V. Ou vous pouvez utiliser un bus de résistance et réduire considérablement votre nombre de pièces. Une matrice de boutons 3x4 (sans sortie matricielle !!) sera également utile. L'image montre l'intégralité du circuit d'entrée avec la logique de collage (cette partie est la suivante).

Étape 7: Coller la logique

Nous avons une dernière chose à câbler. C'est ce qu'on appelle la "logique de la colle" car elle est utilisée pour décoder les signaux de contrôle pour que tout fonctionne; c'est ce qui maintient le circuit ensemble. Lorsque le processeur veut écrire des données sur la sortie, /IORQ et /WR (20 et 22 respectivement) passent à l'état bas et les données envoyées sont affirmées sur le bus de données. La broche d'horloge des deux bascules est active au niveau haut, ce qui signifie que les données sont verrouillées lorsque la broche reçoit un signal haut. Nous utilisons une porte NOR et filons /IORQ à une entrée de la porte et /WR à l'autre entrée. Lorsque l'un ou l'autre est haut, ce qui signifie que les circuits IO ne sont pas sélectionnés ou qu'une opération d'écriture n'est pas effectuée, la sortie alimentant l'horloge de la bascule reste basse. Lorsque les deux entrées sont au niveau bas, et seulement lorsque, la sortie passe au niveau haut et la bascule verrouille les données.

Maintenant, nous devons câbler la bascule d'entrée. Nous pouvons câbler la broche d'horloge de la même manière que précédemment, mais en utilisant /IORQ et /RD. Mais contrairement à l'autre bascule, nous avons également une broche /OE qui doit être prise au niveau bas uniquement lorsque /IORQ et /RD sont bas. Nous pourrions utiliser une porte OU. Ou nous pourrions simplement prendre le signal que nous avons déjà pour l'horloge et l'inverser avec l'une des deux portes d'inversion dont nous disposons déjà. Au moment de déclarer cette instructable, je n'avais pas de porte OU disponible, j'ai donc utilisé l'une de cette dernière option. L'utilisation de cette dernière option signifiait que je n'avais de toute façon pas besoin d'ajouter de pièces supplémentaires.

Étape 8: Programmation

Si votre câblage est correct et mon explication claire, il ne reste plus qu'à programmer la ROM. Il y a plusieurs façons de s'y prendre. Vous pouvez choisir la solution de facilité et commander une nouvelle puce sur Digikey. Lorsque vous commandez la pièce, vous aurez la possibilité de télécharger un fichier HEX et ils le programmeront avant de l'expédier. Utilisez les fichiers HEX ou OBJ joints à cette instructable et attendez qu'il arrive par la poste. L'option 2 consiste à créer un programmeur avec un Arduino ou quelque chose du genre. J'ai essayé cette déroute et il n'a pas réussi à copier certaines données correctement et il m'a fallu des semaines pour le comprendre. J'ai fini par choisir l'option 3, qui consiste à le programmer à la main et à basculer les commutateurs pour contrôler l'adresse et les lignes de données.

Une fois converti directement en code OP du processeur, ce programme entier repose sur seulement 17 octets d'espace d'adressage, donc la programmation à la main n'était pas trop horrible. Le programme charge dans le registre général B la valeur 00. Le registre B est utilisé pour stocker un résultat de l'addition précédente. Comme le registre A est l'endroit où les mathématiques se produisent, nous ne l'utiliserons pas pour stocker des données.

En parlant du registre A, nous exécutons une commande IN, qui lit l'entrée, et stocke les données lues dans A. Ensuite, nous ajoutons le contenu du registre B et affichons le résultat.

Après cela, le registre A est copié dans le registre B. Et puis nous effectuons une série de commandes de saut. Parce que tous les sauts pointent vers l'octet inférieur des lignes d'adresse, et parce que l'octet supérieur de l'instruction de saut est donné dans le deuxième argument et est "00", nous pouvons forcer chaque saut à être suivi d'un NOP. Nous faisons cela pour donner du temps entre l'affichage de la sortie et la lecture de l'entrée afin d'éviter une entrée accidentelle. Chaque saut utilise dix cycles d'horloge et chaque NOP en utilise quatre. Si la boucle prend trop de temps à votre goût, vous pouvez augmenter la vitesse d'horloge ou vous pouvez la reprogrammer pour utiliser un saut de moins.

Étape 9: Tester

Si vous avez tout câblé correctement et que votre ROM est correctement programmée, il reste une dernière étape à franchir: branchez-la et voyez si elle fonctionne. Appuyez sur un bouton et attendez quelques secondes. Il faut 81 cycles d'horloge pour que le programme atteigne sa première boucle et chaque boucle prend 74 cycles d'horloge.

Si cela ne fonctionne pas, recherchez les courts-circuits et les broches non connectées (ouvertes) et autres problèmes de câblage. Si vous avez désactivé la réinitialisation à la mise sous tension, vous devrez effectuer une réinitialisation manuelle avant que le processeur ne fasse quoi que ce soit. Vous pouvez également connecter des LED au bus d'adresse pour voir si elles se comportent. J'avais moi-même des problèmes avec cela, alors je les ai collés directement sur le bus de données à la place. Cela m'a permis de voir ce qui était communiqué entre le processeur et la ROM sans avoir à me soucier de la lecture correcte de la ROM, ce qui aurait nécessité des chronogrammes et je ne voulais tout simplement pas m'en mêler. Il s'avère que c'était un bon choix car j'ai finalement détecté les codes OP problématiques qui étaient mal stockés.

Conseillé: