Inhoudsopgave:

Bouw een computer met basiskennis van elektronica - Ajarnpa
Bouw een computer met basiskennis van elektronica - Ajarnpa

Video: Bouw een computer met basiskennis van elektronica - Ajarnpa

Video: Bouw een computer met basiskennis van elektronica - Ajarnpa
Video: Zo bouw jij je eigen (gaming) PC! 2024, November
Anonim
Bouw een computer met basiskennis van elektronica
Bouw een computer met basiskennis van elektronica

Heb je ooit willen doen alsof je echt slim was en je eigen computer helemaal opnieuw bouwen? Weet je niets over wat er nodig is om een minimale computer te maken? Nou, het is gemakkelijk als je genoeg weet over elektronica om wat IC's correct bij elkaar te gooien. Deze instructable gaat ervan uit dat je goed bent in dat deel, plus een paar andere dingen. En zo niet, dan zou het toch niet zo moeilijk moeten zijn om te volgen als je weet hoe breadboarding/prototyping wordt gedaan. Het doel van deze instructible is om u een werkende "computer" te geven zonder veel te weten over hoe ze werken. Ik zal de bedrading en de basisprincipes van programmeren behandelen, evenals een heel kort programma voor je. Dus laten we beginnen.

Stap 1: Onderdelen en spullen

Onderdelen en spullen
Onderdelen en spullen
Onderdelen en spullen
Onderdelen en spullen

Een "computer" vereist: stroom, invoer, verwerking, geheugen en uitvoer. Technisch zullen we al deze dingen hebben. Ik zal deze dingen in die volgorde behandelen.

Voor stroom hebt u een 5 volt (hierna aangeduid als 5V) bron nodig. Het wordt aanbevolen dat het een gereguleerde bron is, zodat u niet per ongeluk onderdelen in uw circuit bakt. Onze input zal knoppen zijn. Verwerking spreekt voor zich; we gebruiken een processor. Het geheugen zal alleen uit ROM bestaan. De interne registers voor algemene doeleinden van de processor zijn voldoende om als RAM te gebruiken. Uitgang zal LED's zijn.

1 LM7805C - 5V-regelaar

1 ZYLOG Z80 - Processor

1 AT28C64B - EEPROM

1 74LS273 - Octal D teenslipper

1 74HC374E - Octal D Flip-Flop

3 CD4001BE - Viervoudige NOCH-poort

1 NE555 - Klokgenerator

2 1K Ohm Weerstand

1 10K Ohm Weerstand

1 10K Ohm weerstandsnetwerk; 8 Bussed OF 8 Extra 10K-weerstanden

1 1uF condensator

1 100uF condensator

1 drukknop

1 3x4 knopmatrix OF 8 extra drukknoppen

8 LED - Kleurkeuze maakt niet uit

8 330 Ohm Weerstanden of Weerstandsnetwerk

1 echt grote breadboard of meerdere kleine

Veel en veel draad

In mijn schema heb ik een stick van SRAM geïnstalleerd. Daar hoef je je zelfs geen zorgen over te maken. Ik heb het alleen aan het schema toegevoegd om mijn werkelijke circuit nauwkeurig weer te geven en ik heb het aan het circuit toegevoegd voor toekomstig gebruik. Ook toegevoegd aan het schema is een quad OR-poort (74LS36). De ingangen van de twee ongebruikte poorten zijn gekoppeld aan VCC en hun uitgangen blijven zwevend (niet getekend). Ook niet getekend of hierboven vermeld zijn twee condensatoren op het stroomcircuit.

Ik voer gereguleerde 12V in de 5V-regelaar om het hele breadboard te voeden. Het wordt nogal warm, dus ik heb een koellichaam aangesloten om het af te koelen. Als u minder dan 12V gebruikt om de regelaar te voeden (gebruik minimaal 7V), moet deze koeler draaien.

De Z80 is waar de magie gebeurt. Het neemt instructies die zijn opgeslagen in ROM en voert ze uit. De EEPROM slaat ons programma op zodat de processor het kan uitvoeren.

De octale flip-flop die ons uitvoerapparaat is dat de gegevens op de databus naar zijn eigen uitvoer vergrendelt. Dit stelt ons in staat om te veranderen wat er op de bus staat, wat een zeer belangrijke stap is die meerdere keren per instructie wordt gedaan, zonder te veranderen wat de gebruiker/kijker ziet. De flip-flop kan niet de stroom aansturen die nodig is om de uitgangs-LED's te verlichten, dus voeden ze zich in twee van de quad NOR-poortchips die fungeren als buffer voor de 8 datalijnen om de LED's aan te sturen. Omdat de uitgang van de poorten omgekeerd is, moeten we ook de LED's bedraden om ze te inverteren, maar daar komen we later op terug. De andere NOR-chip wordt gebruikt voor logische decodering, maar er worden slechts drie poorten gebruikt.

De octale flip-flop die voor invoer wordt gebruikt, is in wezen hetzelfde. De output-flip-flops houden hun output hoog of laag, zodat deze niet kan worden gebruikt om de bus aan te drijven; het zou gegevens op de bus bevatten. De flip-flop die voor invoer wordt gebruikt, vervangt de /RESET-pin door /EN, die min of meer de uitgangen van (en van) de chip loskoppelt, zodat deze geen gegevens vasthoudt (tri-state-uitgangen).

Stap 2: Bedrading van de stroom-, klok- en resetcircuits

De stroom-, klok- en resetcircuits bedraden
De stroom-, klok- en resetcircuits bedraden
De stroom-, klok- en resetcircuits bedraden
De stroom-, klok- en resetcircuits bedraden
De stroom-, klok- en resetcircuits bedraden
De stroom-, klok- en resetcircuits bedraden

OPMERKING: Voor alle onderdelen dient u eerst de stroomrails te bedraden. Van alle dingen die je moet vergeten om te bedraden, zullen de chips veel minder kans hebben om vergeten stroomaansluitingen te overleven.

Het stroomcircuit is het meest eenvoudige circuit om te bedraden, gevolgd door respectievelijk de reset- en klokcircuits. Op de foto zit de 12V ingang op de stekkerdoos helemaal rechts. De bruine draad, die eronder een gele verbergt, voedt de 12V naar de regelaar. De uitgang van de regelaar voedt elke andere stekkerdoos op het breadboard en elke stekkerdoos deelt een gemeenschappelijke basis, want zo werkt elektronica.

De processor heeft een klokcircuit nodig om te werken. Zonder dit zal het daar gewoon zitten in de geïnitialiseerde staat en niets doen. De klok bedient de interne schuifregisters van de processor, zodat hij de signalen kan genereren om dingen te doen. Elke klokinvoer is voldoende, zelfs een eenvoudige weerstand en drukknop. Maar er zijn veel klokcycli nodig om instructies uit te voeren. De instructie om naar de uitvoer te schrijven duurt 12 cycli op zich. Je wilt waarschijnlijk niet daar zitten en 100+ keer op een knop drukken om slechts één lus van de code te krijgen (de werkelijke cijfers staan aan het einde van de instructable). Daar is de NE555 voor. Het schakelt voor u en dat in een (relatief) snel tempo.

Voordat u begint met het bedraden van iets, wilt u misschien eerst uitzoeken hoe u uw componenten op het bord wilt hebben. Mijn klokcircuit is een beetje aan de onderkant van het bord geplaatst, zodat het uit de buurt is van andere componenten. We gaan ervan uit dat je weet hoe je een basisklok kunt maken met de timer. Als je dat niet doet, wil je "555 Astable" opzoeken en een tutorial volgen. Gebruik de 1K-weerstand om tussen de 5V-rail en pin 7 van de timer (R1) te gaan en de 10K tussen pin 7 en pin 2 (R2). Zorg ervoor dat u de reset-pin, pin 4, vastmaakt aan de 5V-rail zodat de timer kan werken. Ik heb een LED op de uitgang van de mijne gezet, zodat ik kon controleren of de klok inderdaad werkte, maar dat is niet nodig.

Een andere optie met de NE555 is om hem in te stellen als een NIET-poort en een weerstand van 1K te gebruiken om de uitgang weer aan de ingang te koppelen. Het wordt meestal aanbevolen om hiervoor 3 timers te gebruiken, maar ik vond dat slechts 1 goed zou moeten werken. Weet gewoon dat als je dit doet, het met een zeer hoge snelheid zal oscilleren en het heel moeilijk, zelfs onmogelijk zal zijn om te zien dat de output-LED's knipperen. Deze opstelling wordt een "ringoscillator" genoemd.

Houd er rekening mee dat we de klok nog niet met de processor verbinden. We maken het gewoon klaar. Let ook op de logische chip net boven de klok in de afbeelding. Het werd veel later toegevoegd en dat was de enige semi-redelijke plek om het te plaatsen. Het wordt gebruikt voor RAM/ROM-selectie. Deze instructable negeert RAM, dus je hebt deze chip niet op je bord.

Nu bedraden we het resetcircuit. Eerst moet je er een plekje op je bord voor vinden. Ik koos vlak naast de klok. Voeg uw knop toe aan het bord. Gebruik een weerstand van 1K om een kant van de knop aan de 5V-rail te binden. Onze RESET-pinnen zijn laag actief, wat betekent dat we ze hoog moeten houden. Daar is de weerstand voor. Dit knooppunt is ook waar de reset-pinnen aansluiten. De andere kant van de knop gaat rechtstreeks naar de grond. Als u de power-on-reset wilt, voegt u ook de 10uF-condensator toe aan deze kruising. Het houdt de spanning op de reset-pinnen lang genoeg laag om het resetcircuit in de processor en flip-flop te activeren.

Stap 3: Bedrading van de Z80

Nu komen we tot de kern van de zaak. We zullen het beest, de Z80, bedraden. Op mijn bord heb ik de Z80 bovenaan op hetzelfde deel van het bord geplaatst als het resetcircuit. Zoals eerder vermeld, bedraad eerst de stroomrails. 5V gaat naar pin 11 aan de linkerkant en aarde is één pin naar beneden, maar aan de rechterkant. Je hebt misschien ook de oneven breedte van de chip opgemerkt. Hierdoor heb je 3 open connectoren aan de ene kant op het breadboard en 2 aan de andere kant. Het maakt het alleen minder handig om extra dingen te bedraden als u ervoor kiest om dit te doen.

De volgende pinnummers - ik neem aan dat je weet hoe je pinnen op een IC moet tellen - zijn ongebruikte ingangen en moeten worden gekoppeld aan de 5V-rail: 16, 17, 24, 25.

Herinner je je onze klok nog? De uitgang gaat naar pin 6 op de z80. Het reset circuit sluit aan op pin 26. Zonder de andere componenten op het bord te hebben, is dit voor zover ik je kan krijgen met de bedrading van de z80 zelf. Meer bedrading die eraan wordt gedaan, zal in latere stappen worden gedaan.

Omdat ik het circuit al had laten bouwen voordat ik zelfs maar overwoog om dit instructable te schrijven, zal ik wachten met de foto tot de volgende stap.

Stap 4: Bedrading van de ROM

Bedrading van de ROM
Bedrading van de ROM

OPMERKING: Misschien wilt u wachten met het daadwerkelijk op het bord plaatsen als het nog moet worden geprogrammeerd (daarover later meer).

Voor de ROM plaatste ik het naast de Z80 aan de rechterkant en verplaatste het ook een pin naar beneden op het breadboard. Hierdoor kon ik de adresbus rechtstreeks aansluiten, maar daarover later meer. De AT28C64B is een EEPROM, wat betekent dat hij meerdere keren kan worden geprogrammeerd door enkele pinnen aan en uit te zetten. We willen niet dat onze EEPROM zichzelf per ongeluk herprogrammeert wanneer deze zich in het circuit bevindt. Dus zodra u uw stroomrails hebt aangesloten, sluit u pin 27 (/WE) aan op de 5V-rail om de schrijffunctie helemaal uit te schakelen.

Mijn programma is zo klein dat ik alleen de onderste 5 adreslijnen (A0-A4) nodig had, maar ik heb toch A5, A6 en A7 aangesloten zodat ik grotere programma's kan schrijven zonder extra werk. De extra adreslijnen (A8-A12) zijn rechtstreeks verbonden met aarde om ongewenste toegang tot de hogere adressen door zwevende ingangen te voorkomen. Met de ongebruikte adresingangen verbonden met aarde en de schrijfbesturing verbonden met 5V, is de bedrading van de rest vrij eenvoudig. Zoek A0 op de processor en sluit deze aan op A0 op de ROM. Zoek vervolgens A1 op de processor en sluit deze aan op A1 op de ROM. Doe dit totdat je alle adressen hebt aangesloten. In de afbeelding is mijn adresbus naar de ROM uitgevoerd in blauwe bedrading. De adresbus die naar het RAM gaat, is uitgevoerd in rode bedrading. Deze draden waren allemaal voorgesneden en gestript zoals ze in een breadboard-bedradingsset kwamen en waren perfect voor deze bedrading.

Nadat u de adressen hebt bedraad (dit wordt de adresbus genoemd), doet u precies hetzelfde voor de pinnen met het label D0, dan D1, D2, enz. Doe dit voor alle gegevenspinnen (D0 - D7) en u hebt uw databus bedraad. We zijn bijna klaar met het bedraden van de ROM. Zoek de /CE-pen (chip inschakelen) van de ROM en sluit deze aan op de processorpen 19, /MREQ (geheugenverzoek) en zoek vervolgens de ROM's /OE (uitvoer inschakelen) en sluit deze aan op processorpen 21, /RD (lezen). We zijn nu klaar. Al deze zijn gedaan met jumperdraden omdat ze naar de andere kant van de processor moeten en een breadboard biedt niet genoeg ruimte om zulke nette bedrading te gebruiken.

Stap 5: Bedrading van de uitgang

Bedrading van de uitgang
Bedrading van de uitgang
Bedrading van de uitgang
Bedrading van de uitgang

Omdat het niet bevolkt was, koos ik het gedeelte van het bord links van de Z80 voor de uitvoer. Plaats de flip-flop erop en sluit ze stroomrails aan. Pin 1, /MR (reset) kan rechtstreeks worden aangesloten op de reset-pin van de processor, maar u kunt deze op de 5V-rail laten hangen. Als u dit doet, worden alleen ongewenste gegevens weergegeven tot de eerste keer schrijven. Merk op hoe de chip een klokingang heeft op pin 11. Deze ingang is raar omdat deze wordt geactiveerd wanneer de pin hoog wordt. Merk ook op dat deze pin NIET dezelfde klok is die de processor aandrijft. Deze klok vergrendelt de op de databus bevestigde gegevens.

Weet je nog hoe we D0 - D7 op de ROM hebben aangesloten op dezelfde pinnen op de processor? Doe precies hetzelfde voor deze chip. Zijn D0 gaat naar D0 op de databus enzovoort. De pinnen die beginnen met een "Q" zijn uitgangen. Voordat we die bedraden, moeten we meer chips toevoegen. Ik heb de quad NOR-poorten gebruikt omdat ik er een buis van heb en ik er al een nodig had, maar ongeveer elke chip zal werken als je hem correct bedraden. Ik had één ingang op alle poorten aan aarde kunnen binden en de andere ingangen als, nou ja, ingangen kunnen gebruiken, maar ik koos ervoor om beide ingangen aan elkaar te koppelen voor de eenvoud.

Ik plaatste de chips onder de flip-flop om het gemakkelijker te maken om rechtstreeks te bekabelen zonder jumpers, maar ik had op dit moment bijna geen draad meer, dus het maakte uiteindelijk niet echt uit. De Q0, Q1….. Q7 op de flip-flop gaat naar de ingangen op de individuele poorten. Met 4 poorten in elk pakket/chip, had ik 2 pakketten nodig en gebruikte ik alle poorten. Als u een versie van de flip-flop vindt die de LED's kan aansturen zonder op deze manier gebufferd te hoeven worden, zijn deze twee chips niet nodig. Als u poorten als buffer gebruikt die geen geïnverteerde uitgangen hebben (AND/OR/XOR), dan kunt u de LED's bedraden zoals u zou verwachten. Als je dezelfde onderdelen als ik gebruikt en/of de uitgangen zijn omgekeerd, moeten de LED's worden aangesloten zoals hieronder beschreven. De eerste afbeelding toont het IC-gedeelte van de uitvoer.

Gebruik de weerstanden van 330 Ohm om de LED's positief (Anode) te verbinden met de 5V-rail en sluit de negatieve (kathode) aan op de uitgang van de poorten. Je kunt in de tweede afbeelding zien dat ik twee weerstandsbussen heb gebruikt, elk met slechts vijf interne weerstanden. Door de LED's op deze manier te bedraden, gaan ze branden als de uitgang uit is. We doen dit omdat de uitgang uit is als de ingang aan is. Zorg er absoluut voor dat u bijhoudt welke poorten uw uitgangen van de flip-flop-besturing hebben. Tenzij uw LED's verstrooid zijn of hun volgorde zinloos is, kan het uit het oog verliezen van hen later verwarring veroorzaken wanneer u zich afvraagt waarom de output verkeerd is.

Stap 6: Bedrading van de ingang

Bedrading van de ingang
Bedrading van de ingang

Neem die flip-flop 74HC374 en plaats hem ergens. De mijne was ergens onder de Z80 naar de onderkant van het bord. Weet je nog de laatste keer dat we D0 met D0 en D1 met D1 en zo verder verbonden? Deze keer verbinden we Q0 met D0 en Q1 met D1 enzovoort. Gelukkig hoeven we deze keer geen bufferchips toe te voegen, haha. In plaats daarvan gaan we een 10K Ohm aansluiten op elke "D" -pin (D0-D7) en aarde en vervolgens een knop op dezelfde pinnen en de 5V-rail. Of u kunt een weerstandsbus gebruiken en uw aantal onderdelen aanzienlijk verminderen. Een matrix van 3x4 knoppen (zonder een matrixuitgang!!) zal ook helpen. De afbeelding toont het geheel van het ingangscircuit samen met de lijmlogica (dat deel is de volgende).

Stap 7: Lijmlogica

We hebben nog een laatste ding te bedraden. Het wordt "lijmlogica" genoemd omdat het wordt gebruikt om besturingssignalen te decoderen om het allemaal te laten werken; het is wat het circuit bij elkaar houdt. Wanneer de processor gegevens naar de uitvoer wil schrijven, gaan zowel /IORQ als /WR (respectievelijk 20 en 22) laag en worden de verzonden gegevens op de gegevensbus bevestigd. De klokpen op beide flip-flops is actief hoog, wat betekent dat de gegevens worden vergrendeld wanneer de pen een hoog signaal ontvangt. We gebruiken een NOR-poort en draad /IORQ naar de ene ingang van de poort en /WR naar de andere ingang. Wanneer een van beide hoog is, wat betekent dat de IO-circuits niet worden geselecteerd of dat er geen schrijfbewerking wordt uitgevoerd, blijft de uitvoer die de klok van de flip-flop voedt laag. Wanneer beide ingangen laag zijn, en alleen wanneer, wordt de uitgang hoog en vergrendelt de flip-flop de gegevens.

Nu moeten we de input-flip-flop bedraden. We kunnen de klokpen op vrijwel dezelfde manier bedraden als de vorige, maar met behulp van /IORQ en /RD. Maar in tegenstelling tot de andere flip-flop hebben we ook een /OE-pin die alleen laag hoeft te worden genomen als /IORQ en /RD laag zijn. We kunnen een OK-poort gebruiken. Of we kunnen gewoon het signaal nemen dat we al hebben voor de klok en het omkeren met een van de twee inverterende poorten die we al beschikbaar hebben. Op het moment dat ik dit instructable vermeldde, had ik geen OR-poort beschikbaar, dus ik gebruikte een van de laatste optie. Door de laatste optie te gebruiken, hoefde ik sowieso geen extra onderdelen toe te voegen.

Stap 8: Programmeren

Mocht uw bedrading correct zijn en mijn uitleg duidelijk, dan hoeft u alleen nog maar de ROM te programmeren. Er zijn een paar manieren om dit aan te pakken. Je zou de gemakkelijke weg kunnen nemen en een nieuwe chip van Digikey kunnen bestellen. Wanneer je het onderdeel bestelt, heb je de mogelijkheid om een HEX-bestand te uploaden en ze zullen het programmeren voordat ze het verzenden. Gebruik de HEX- of OBJ-bestanden die bij deze instructable zijn gevoegd en wacht tot deze in de e-mail arriveert. Optie 2 is om een programmeur te bouwen met een Arduino of zoiets. Ik probeerde die route en het lukte niet om bepaalde gegevens correct te kopiëren en het kostte me weken om daar achter te komen. Uiteindelijk heb ik optie 3 gedaan, namelijk om het met de hand te programmeren en schakelaars om te draaien om de adres- en datalijnen te bedienen.

Eenmaal rechtstreeks geconverteerd naar de OP-code van de processor, rust dit hele programma in slechts 17 bytes aan adresruimte, dus handmatig programmeren was niet zo erg. Het programma laadt in register B voor algemene doeleinden de waarde 00. Register B wordt gebruikt voor het opslaan van een resultaat van de vorige toevoeging. Aangezien het A-register de plaats is waar wiskunde plaatsvindt, zullen we het niet gebruiken om gegevens op te slaan.

Over het A-register gesproken, we voeren een IN-commando uit, dat de invoer leest en de gelezen gegevens in A opslaat. Vervolgens voegen we de inhoud van register B toe en voeren het resultaat uit.

Daarna wordt register A gekopieerd naar register B. En dan doen we een reeks sprongcommando's. Omdat alle sprongen naar de onderste byte van de adresregels wijzen, en omdat de bovenste byte van de spronginstructie in het tweede argument wordt gegeven en "00" is, kunnen we ervoor zorgen dat elke sprong wordt gevolgd door een NOP. We doen dit om tijd te geven tussen het tonen van uitvoer en het lezen van invoer om onbedoelde invoer te voorkomen. Elke sprong gebruikt tien klokcycli en elke NOP gebruikt er vier. Als de lus naar uw wens te lang duurt, kunt u de kloksnelheid verhogen of deze opnieuw programmeren om één sprong minder te gebruiken.

Stap 9: Testen

Als je alles correct hebt aangesloten en je ROM correct is geprogrammeerd, is er nog een laatste stap: sluit hem aan en kijk of hij werkt. Druk op een knop en wacht een paar seconden. Het duurt 81 klokcycli voordat het programma zijn eerste lus bereikt en elke lus duurt 74 klokcycli.

Als het niet werkt, controleer dan op kortsluiting en niet-aangesloten pinnen (open) en andere bedradingsproblemen. Als u zich hebt afgemeld voor power-on reset, moet u een handmatige reset uitvoeren voordat de processor iets doet. U kunt ook LED's aan de adresbus bevestigen om te zien of ze zich gedragen. Ik had daar zelf problemen mee, dus ik heb ze in plaats daarvan rechtstreeks op de databus geplakt. Hierdoor kon ik zien wat er tussen de processor en ROM werd gecommuniceerd zonder me zorgen te hoeven maken of de ROM correct werd gelezen, waarvoor timingdiagrammen nodig zouden zijn en ik wilde daar gewoon niet bij betrokken raken. Blijkt een goede keuze te zijn geweest, want ik heb eindelijk de problematische OP-codes opgevangen die verkeerd waren opgeslagen.

Aanbevolen: