Cuprins:

Construiți un computer cu o înțelegere de bază a electronicii: 9 pași (cu imagini)
Construiți un computer cu o înțelegere de bază a electronicii: 9 pași (cu imagini)

Video: Construiți un computer cu o înțelegere de bază a electronicii: 9 pași (cu imagini)

Video: Construiți un computer cu o înțelegere de bază a electronicii: 9 pași (cu imagini)
Video: FEMEIA De 399 De ANI ! #shorts 2024, Iulie
Anonim
Construiți un computer cu o înțelegere de bază a electronicii
Construiți un computer cu o înțelegere de bază a electronicii

Ai dorit vreodată să te prefaci că ești cu adevărat inteligent și să-ți construiești propriul computer de la zero? Nu știți nimic despre ceea ce este necesar pentru a crea un computer cu un minim minim? Ei bine, este ușor dacă știți suficient despre electronice pentru a arunca unele IC-uri împreună corect. Acest instructiv va presupune că sunteți bun la acea parte, plus câteva alte lucruri. Și dacă nu, tot nu ar trebui să fie prea dificil de urmat dacă știți cum se face breadboarding / prototipuri. Scopul acestui instructiv este de a vă oferi un „computer” funcțional fără a ști multe despre modul în care funcționează. Voi acoperi cablarea și elementele de bază ale programării, precum și vă voi oferi un program foarte scurt. Deci sa începem.

Pasul 1: Piese și chestii

Piese și chestii
Piese și chestii
Piese și chestii
Piese și chestii

Un „computer” necesită: putere, intrare, procesare, memorie și ieșire. Tehnic vom avea toate aceste lucruri. Voi acoperi aceste lucruri în această ordine.

Pentru putere, veți avea nevoie de o sursă de 5 volți (denumită aici 5V). Este recomandat să fie o sursă reglementată, astfel încât să nu prăjiți accidental piesele din circuitul dvs. Introducerea noastră va fi butoane. Prelucrarea se explică de la sine; folosim un procesor. Memoria va consta doar din ROM. Registrele interne de uz general ale procesorului vor fi suficiente pentru a fi utilizate ca memorie RAM. Ieșirea va fi LED-uri.

1 LM7805C - Regulator 5V

1 ZYLOG Z80 - Procesor

1 AT28C64B - EEPROM

1 74LS273 - Flip-flop Octal D

1 74HC374E - Flip-flop Octal D

3 CD4001BE - Poarta Quad NOR

1 NE555 - Generator de ceas

2 Rezistor 1K Ohm

1 rezistor de 10K Ohm

1 rețea de rezistență de 10K Ohm; 8 Autobuze SAU 8 rezistențe suplimentare de 10K

1 condensator 1uF

1 condensator 100uF

1 Buton

1 Matrice de butoane 3x4 SAU 8 butoane suplimentare

8 LED - Alegerea culorii nu contează

8 rezistențe de 330 Ohm sau rețea de rezistențe

1 Pânză cu adevărat mare sau mai multe mici

Multă și multă sârmă

În schema mea am instalat un stick de SRAM. Nici nu trebuie să vă faceți griji cu privire la asta. L-am adăugat doar la schemă pentru a reflecta cu exactitate circuitul meu real și l-am adăugat la circuit pentru utilizare ulterioară. De asemenea, la schemă este adăugată o poartă quad OR (74LS36). Intrările celor două porți neutilizate sunt legate de VCC, iar ieșirile lor sunt lăsate plutitoare (nu sunt trase). De asemenea, nu sunt trase și nici enumerate mai sus nu sunt doi condensatori pe circuitul de alimentare.

Alimentez regulatorul de 12V în regulatorul de 5V pentru a alimenta întreaga placă. Se încălzește destul de bine, așa că am atașat un radiator pentru a-l răci. Dacă utilizați mai puțin de 12V pentru a alimenta regulatorul (utilizați cel puțin 7V), acesta ar trebui să funcționeze mai rece.

Z80 este locul unde se întâmplă magia. Acesta ia instrucțiuni stocate în ROM și le execută. EEPROM stochează programul nostru pentru ca procesorul să fie executat.

Flip-flopul octal, care este dispozitivul nostru de ieșire, care leagă datele de pe magistrala de date la propria sa ieșire. Acest lucru ne permite să schimbăm ce este pe autobuz, care este un pas foarte important făcut de mai multe ori pe instrucțiune, fără a schimba ceea ce vede utilizatorul / vizualizatorul. Flip-flop-ul nu poate conduce curentul necesar pentru aprinderea LED-urilor de ieșire, astfel încât acestea se alimentează în două dintre cipurile de poartă quad NOR care acționează pentru tamponarea celor 8 linii de date pentru acționarea LED-urilor. Deoarece ieșirea porților este inversată, trebuie să conectăm și LED-urile pentru a fi inversate, dar vom ajunge la asta când vom ajunge la asta. Celălalt cip NOR este utilizat pentru decodarea logică, dar sunt utilizate doar trei porți.

Flip-flopul octal utilizat pentru intrare este în esență același lucru. Flip-flop-urile de ieșire își păstrează ieșirea fie ridicată, fie joasă, astfel încât să nu poată fi folosită pentru a conduce autobuzul; ar păstra date în autobuz. Flip-flop-ul folosit pentru intrare înlocuiește pinul / RESET cu / EN, care mai mult sau mai puțin deconectează ieșirile (și de la) cipului, astfel încât să nu rețină date (ieșiri tri-state).

Pasul 2: Cablarea circuitelor de alimentare, ceas și resetare

Cablarea circuitelor de alimentare, ceas și resetare
Cablarea circuitelor de alimentare, ceas și resetare
Cablarea circuitelor de alimentare, ceas și resetare
Cablarea circuitelor de alimentare, ceas și resetare
Cablarea circuitelor de alimentare, ceas și resetare
Cablarea circuitelor de alimentare, ceas și resetare

NOTĂ: Pentru toate piesele, conectați mai întâi șinele de alimentare. Dintre toate lucrurile pe care trebuie să le uitați să conectați, cipurile vor fi mult mai puțin susceptibile să supraviețuiască conexiunilor de alimentare uitate.

Circuitul de alimentare este cel mai simplu circuit de cablat, urmat de circuitele de resetare și respectiv de ceas. În imagine, intrarea de 12V se află pe banda electrică din extrema dreaptă. Firul maro, ascunzând unul galben sub el, alimentează 12V către regulator. Ieșirea regulatorului alimentează fiecare altă bandă de alimentare de pe panou și fiecare bandă de alimentare are un teren comun, deoarece așa funcționează electronica.

Procesorul necesită un circuit de ceas pentru a funcționa. Fără ea, va sta doar acolo în starea inițială și nu va face nimic. Ceasul operează registrele de deplasare interne ale procesorului, astfel încât să poată genera semnale pentru a face lucruri. Orice intrare de ceas va face, chiar și un rezistor simplu și un buton. Dar este nevoie de multe cicluri de ceas pentru a executa instrucțiuni. Instrucțiunea de a scrie la ieșire durează 12 cicluri în sine. Probabil că nu doriți să stați acolo și să apăsați un buton de peste 100 de ori pentru a obține o singură buclă a codului (numerele reale sunt la sfârșitul instructabilului). Pentru asta este NE555. Face comutarea pentru dvs. și o face într-un ritm (relativ) rapid.

Înainte de a începe să conectați ceva, poate doriți să mergeți mai departe și să aflați cum doriți ca componentele dvs. să fie așezate pe placă. Circuitul meu de ceas este cam așezat în partea de jos a plăcii, astfel încât să fie în afara celorlalte componente. Vom presupune că știți cum să creați un ceas de bază cu temporizatorul. Dacă nu, veți dori să căutați „555 Astable” și să urmați un tutorial. Folosiți rezistorul 1K pentru a merge între șina de 5V și pinul 7 al temporizatorului (R1) și 10K între pinul 7 și pinul 2 (R2). Asigurați-vă că legați știftul de resetare, știftul 4, la șina de 5V, astfel încât temporizatorul să funcționeze. Am pus un LED pe ieșirea mea pentru a putea verifica dacă ceasul funcționează, dar nu este necesar.

O altă opțiune cu NE555 este să o configurați ca o poartă NOT și să utilizați un rezistor de 1K pentru a lega ieșirea înapoi la intrare. De obicei, este recomandat să utilizați 3 temporizatoare pentru a face acest lucru, dar am constatat că doar 1 ar trebui să funcționeze bine. Știți doar că, dacă faceți acest lucru, va oscila la o viteză foarte mare și va fi foarte dificil, chiar imposibil, să spuneți că LED-urile de ieșire clipesc. Această configurație se numește „oscilator inelar”.

Rețineți că nu conectăm ceasul la procesor încă. Pur și simplu o pregătim. De asemenea, rețineți cipul logic chiar deasupra ceasului din imagine. A fost adăugat mult mai târziu și a fost singurul loc semi-rezonabil rămas pentru a-l amplasa. Este folosit pentru selectarea RAM / ROM. Această instrucțiune ignoră memoria RAM, deci nu veți avea acest cip pe placa dvs.

Acum conectăm circuitul de resetare. Mai întâi trebuie să găsiți un loc pe tablă pentru acesta. Am ales chiar lângă ceas. Adăugați butonul pe tablă. Folosiți un rezistor de 1K pentru a lega o parte a butonului de șina de 5V. Pinii RESET sunt activi jos, ceea ce înseamnă că trebuie să-i menținem sus. Pentru asta este rezistorul. Această joncțiune este, de asemenea, unde se conectează pinii de resetare. Cealaltă parte a butonului merge direct la sol. Dacă doriți resetarea la pornire, adăugați și condensatorul 10uF la această joncțiune. Acesta va menține tensiunea pe pinii de resetare suficient de scăzută pentru a activa circuitele de resetare din procesor și flip-flop.

Pasul 3: Cablarea Z80

Acum ajungem la nitty-gritty. Vom sârma bestia care este Z80. Pe placa mea, am pus Z80 în partea de sus pe aceeași secțiune a plăcii cu circuitul de resetare. După cum sa menționat anterior, conectați mai întâi șinele de alimentare. 5V merge la pinul 11 din stânga și solul este cu un pin în jos, dar în dreapta. Este posibil să fi observat și lățimea ciudată a cipului. Vă va face să aveți 3 conectori deschiși pe o parte pe panou și 2 pe cealaltă. Este mai puțin convenabil să conectați lucruri suplimentare numai dacă alegeți să faceți acest lucru.

Următoarele numere de pini - presupun că știi cum să numere pini pe un IC - sunt intrări neutilizate și trebuie să fie legate de șina de 5V: 16, 17, 24, 25.

Îți amintești ceasul nostru? Ieșirea sa merge la pinul 6 pe z80. Circuitul de resetare se conectează la pinul 26. Fără a avea celelalte componente de pe placă, acest lucru este cât de cât vă pot obține cu cablarea z80 în sine. Mai multe cabluri vor fi realizate în etapele ulterioare.

Deoarece am avut deja construit circuitul înainte de a mă gândi chiar să scriu acest lucru instructabil, voi rămâne cu imaginea până la pasul următor.

Pasul 4: Cablarea ROM-ului

Cablarea ROM-ului
Cablarea ROM-ului

NOTĂ: Poate doriți să vă opriți dacă îl așezați de fapt pe tablă dacă mai este nevoie de programat (mai multe despre asta mai târziu).

Pentru ROM, l-am așezat lângă Z80 în dreapta și l-am deplasat, de asemenea, cu un pin în jos pe tablă. Acest lucru mi-a permis să conectez direct autobuzul de adrese, dar mai multe despre asta mai târziu. AT28C64B este o EEPROM, ceea ce înseamnă că poate fi programat de mai multe ori prin oprirea și pornirea unor pini. Nu vrem ca EEPROM-ul nostru să se reprogrameze din greșeală atunci când se află în circuit. Deci, după ce ați conectat șinele de alimentare, conectați știftul 27 (/ WE) la șina de 5V pentru a dezactiva caracteristica de scriere cu totul.

Programul meu este atât de mic, încât aveam nevoie doar de cele 5 linii de adrese inferioare (A0-A4) conectate, dar am conectat oricum A5, A6 și A7, astfel încât să pot scrie programe mai mari, fără a mai lucra. Liniile de adrese suplimentare (A8-A12) sunt legate direct la sol pentru a preveni accesul nedorit la adresele superioare de la intrări plutitoare. Cu intrările de adresă neutilizate legate de sol și controlul de scriere legat de 5V, cablarea restului este destul de simplă. Găsiți A0 pe procesor și conectați-l la A0 pe ROM. Apoi găsiți A1 pe procesor și conectați-l la A1 pe ROM. Faceți acest lucru până când ați conectat toate adresele împreună. În imagine, autobuzul meu de adrese către ROM este realizat în cabluri albastre. Autobuzul de adresă care merge spre RAM se face în cabluri roșii. Aceste fire au fost toate tăiate și dezbrăcate, deoarece au venit într-un kit de cablare pentru panouri și au fost perfecte pentru acest cablaj.

După ce obțineți adresele prin cablu (aceasta se numește magistrala de adrese), faceți exact același lucru pentru pinii etichetați D0, apoi D1, D2 etc. Faceți acest lucru pentru toți pinii de date (D0 - D7) și aveți magistrala de date cablată. Aproape am terminat de conectat ROM-ul. Găsiți pinul ROM / CE (chip enable) și conectați-l la pinul procesorului 19, / MREQ (cerere de memorie) și apoi găsiți ROM-ul / OE (activare ieșire) și conectați-l la pinul procesor 21, / RD (citit). Acum am terminat. Toate acestea sunt făcute cu fire jumper, deoarece trebuie să meargă pe cealaltă parte a procesorului, iar o placă de măsurare nu oferă suficient spațiu pentru a utiliza astfel de cabluri.

Pasul 5: Cablarea ieșirii

Cablarea ieșirii
Cablarea ieșirii
Cablarea ieșirii
Cablarea ieșirii

Deoarece era nepopulat, am ales secțiunea plăcii din stânga Z80 pentru ieșire. Așezați flip-flopul acolo și conectați-le șinele de alimentare. Pinul 1, / MR (reset) se poate conecta direct la pinul de resetare al procesorului, dar îl puteți lăsa legat de șina de 5V. Dacă faceți acest lucru, se va afișa doar datele nedorite până la prima scriere. Observați cum cipul are o intrare de ceas pe pinul 11. Această intrare este ciudată prin faptul că este activată când pinul se ridică. De asemenea, rețineți că acest pin NU este același ceas care conduce procesorul. Acest ceas blochează datele afirmate pe magistrala de date.

Vă amintiți cum am conectat D0 - D7 pe ROM la aceiași pini de pe procesor? Faceți exact același lucru pentru acest cip. D0-ul său merge la D0 pe magistrala de date și așa mai departe. Pinii care încep cu un „Q” sunt ieșiri. Înainte de a le conecta, trebuie să adăugăm mai multe jetoane. Am folosit porțile NOR quad pentru că am un tub din ele și aveam deja nevoie de unul, dar despre orice cip va funcționa dacă îl conectați corect. Aș fi putut lega o intrare pe toate porțile de masă și să folosesc celelalte intrări ca, de asemenea, intrări, dar am ales să conectez ambele intrări împreună pentru simplitate.

Am așezat jetoanele sub flip-flop pentru a face mai ușor să conectez direct fără jumperi, dar în acest moment nu mai aveam sârmă, așa că nu a contat cu adevărat în cele din urmă. Q0, Q1….. Q7 de pe flip-flop merge la intrările de pe porțile individuale. Cu 4 porți în fiecare pachet / cip, aveam nevoie de 2 pachete și am folosit toate porțile. Dacă găsiți o versiune a flip-flop-ului care poate acționa LED-urile fără a avea nevoie de tampon astfel, aceste două cipuri nu sunt necesare. Dacă utilizați porțile ca tampon care nu are ieșiri inversate (ȘI / SAU / XOR), atunci puteți conecta LED-urile așa cum v-ați aștepta. Dacă utilizați aceleași părți ca mine și / sau ieșirile sunt inversate, LED-urile ar trebui să fie conectate conform descrierii de mai jos. Prima imagine arată porțiunea IC a ieșirii.

Folosiți rezistențele de 330 Ohm pentru a lega LED-urile pozitive (anod) la șina de 5V și conectați negativul (catodul) la ieșirea porților. Puteți vedea în a doua imagine că am folosit două autobuze de rezistență, fiecare cu doar cinci rezistențe interne. Cablarea LED-urilor astfel le va face să se aprindă atunci când ieșirea este oprită. Facem acest lucru deoarece ieșirea este oprită când intrarea este activată. Asigurați-vă absolut că urmăriți care sunt porțile ieșirilor dvs. de pe controlul flip-flop. Cu excepția cazului în care LED-urile dvs. vor fi împrăștiate sau ordinea lor nu are sens, pierderea urmelor lor poate provoca confuzie ulterior atunci când vă întrebați de ce ieșirea este greșită.

Pasul 6: Cablarea intrării

Cablarea intrării
Cablarea intrării

Luați acel flip-flop 74HC374 și plasați-l undeva. Al meu se afla undeva sub Z80 spre partea de jos a plăcii. Vă amintiți ultima dată când am conectat D0 la D0 și D1 la D1 și așa mai departe? De această dată conectăm Q0 la D0 și Q1 la D1 și așa mai departe. Din fericire, nu trebuie să adăugăm cipuri tampon de data aceasta, haha. În schimb, vom conecta un 10K Ohm la fiecare pin "D" (D0-D7) și la masă și apoi un buton la aceiași pini și la șina de 5V. Sau puteți utiliza o magistrală de rezistență și puteți reduce numărul de piese. O matrice de butoane 3x4 (fără o ieșire matriciată !!) va ajuta și ea. Imaginea arată întregul circuit de intrare împreună cu logica lipiciului (acea parte este următoarea).

Pasul 7: Glue Logic

Avem un ultim lucru de legat. Se numește „logică de lipici”, deoarece este utilizată pentru decodarea semnalelor de control, pentru ca totul să funcționeze; este ceea ce ține circuitul împreună. Când procesorul dorește să scrie date la ieșire, ambele / IORQ și / WR (respectiv 20 și 22) scad și datele trimise sunt afirmate pe magistrala de date. Pinul ceasului de pe ambele flip-flop-uri este activ ridicat, ceea ce înseamnă că datele sunt blocate atunci când pinul primește un semnal înalt. Folosim o poartă NOR și sârmă / IORQ la o intrare a porții și / WR la cealaltă intrare. Când oricare dintre ele este ridicat, adică circuitele IO nu sunt selectate sau nu se efectuează o operație de scriere, ieșirea care alimentează ceasul flip-flop-ului rămâne scăzută. Când ambele intrări sunt scăzute și numai când, ieșirea crește și flip-flopul blochează datele.

Acum trebuie să conectăm flip-flop-ul de intrare. Putem conecta pinul ceasului în același mod ca anterior, dar folosind / IORQ și / RD. Dar, spre deosebire de celelalte flip-flop, avem și un pin / OE care trebuie scăzut doar atunci când / IORQ și / RD sunt scăzute. Am putea folosi o poartă SAU. Sau am putea pur și simplu să luăm semnalul pe care îl avem deja pentru ceas și să-l inversăm cu una dintre cele două porți de inversare pe care le avem deja disponibile. La momentul declarării acestui instructiv, nu aveam o poartă SAU disponibilă, așa că am folosit una din ultima opțiune. Folosirea ultimei opțiuni a însemnat că nu trebuia să adaug niciun fel de piese suplimentare.

Pasul 8: Programare

În cazul în care cablajul dvs. este corect și explicația mea este clară, nu mai rămâne decât să programați ROM-ul. Există câteva modalități de a face acest lucru. Ați putea să luați calea ușoară și să comandați un nou cip de pe Digikey. Când comandați piesa, veți avea opțiunea de a încărca un fișier HEX și îl vor programa înainte de al expedia. Utilizați fișierele HEX sau OBJ atașate la acest instructable și așteptați doar să sosească prin poștă. Opțiunea 2 este de a construi un programator cu un Arduino sau ceva de genul acesta. Am încercat acea rutare și nu am reușit să copiez anumite date corect și mi-au trebuit săptămâni să-mi dau seama. Am ajuns să fac opțiunea 3, care este să o programez manual și să comutăm comutatoarele pentru a controla adresa și liniile de date.

Odată convertit direct în codul OP al procesorului, acest întreg program se bazează pe doar 17 octeți de spațiu de adrese, astfel încât programarea manuală nu a fost prea îngrozitoare. Programul încarcă în registrul de uz general B valoarea 00. Registrul B este utilizat pentru stocarea unui rezultat al adăugării anterioare. Deoarece registrul A este locul în care se întâmplă matematica, nu îl vom folosi pentru a stoca date.

Apropo de registrul A, executăm o comandă IN, care citește intrarea și stocăm datele citite în A. Apoi adăugăm conținutul registrului B și scoatem rezultatul.

După aceea, registrul A este copiat în registrul B. Și apoi facem o serie de comenzi de salt. Deoarece toate salturile indică octetul inferior al liniilor de adresă și deoarece octetul superior al instrucțiunii de salt este dat în al doilea argument și este „00”, putem forța fiecare salt să fie urmat de un NOP. Facem acest lucru pentru a da timp între afișarea ieșirii și citirea intrării pentru a preveni intrarea accidentală. Fiecare salt folosește zece cicluri de ceas și fiecare NOP folosește patru. Dacă bucla durează prea mult pentru dorința dvs., puteți crește viteza ceasului sau o puteți reprograma pentru a utiliza un salt mai puțin.

Pasul 9: Testarea

Dacă ați conectat totul corect și ROM-ul dvs. este programat corect, trebuie să faceți un ultim pas: conectați-l și vedeți dacă funcționează. Apăsați un buton și așteptați câteva secunde. Este nevoie de 81 de cicluri de ceas pentru ca programul să ajungă la prima sa buclă și fiecare buclă durează 74 de cicluri de ceas.

Dacă nu funcționează, verificați dacă există scurți și pini neconectați (se deschide) și alte probleme de cablare. Dacă ați renunțat la resetarea la pornire, va trebui să faceți o resetare manuală înainte ca procesorul să facă ceva. De asemenea, puteți atașa LED-uri la magistrala de adrese pentru a vedea dacă se comportă. Am avut eu probleme cu asta, așa că le-am lipit direct de magistrala de date. Acest lucru mi-a permis să văd ce se comunica între procesor și ROM fără a fi nevoie să-mi fac griji dacă ROM-ul ar fi citit corect, ceea ce ar fi necesitat diagrame de sincronizare și pur și simplu nu am vrut să mă implic. S-a dovedit a fi o alegere bună pentru că am prins în cele din urmă codurile OP problematice care au fost stocate incorect.

Recomandat: