Kazalo:

Zgradite računalnik z osnovnim razumevanjem elektronike: 9 korakov (s slikami)
Zgradite računalnik z osnovnim razumevanjem elektronike: 9 korakov (s slikami)

Video: Zgradite računalnik z osnovnim razumevanjem elektronike: 9 korakov (s slikami)

Video: Zgradite računalnik z osnovnim razumevanjem elektronike: 9 korakov (s slikami)
Video: CS50 2015 - Week 9, continued 2024, Julij
Anonim
Zgradite računalnik z osnovnim razumevanjem elektronike
Zgradite računalnik z osnovnim razumevanjem elektronike

Ste se kdaj želeli pretvarjati, da ste res pametni in zgraditi svoj računalnik iz nič? Ali ne veste nič o tem, kaj je potrebno za izdelavo računalnika na minimum? No, če poznate dovolj elektronike, je enostavno sestaviti nekaj IC -jev pravilno. Ta pouk bo domneval, da ste v tem delu dobri, in še nekaj drugih stvari. In če ne, še vedno ne bi smelo biti težko slediti, če veste, kako poteka izdelava krona/izdelave prototipov. Namen tega navodila je, da dobite delujoč "računalnik", ne da bi vedeli veliko o tem, kako delujejo. Zajel bom ožičenje in osnove programiranja ter vam predstavil zelo kratek program. Pa začnimo.

1. korak: Deli in stvari

Deli in stvari
Deli in stvari
Deli in stvari
Deli in stvari

"Računalnik" zahteva: napajanje, vhod, obdelavo, pomnilnik in izhod. Tehnično bomo imeli vse te stvari. Te stvari bom obravnaval v tem vrstnem redu.

Za napajanje potrebujete 5 -voltni vir (v nadaljevanju označen kot 5V). Priporočljivo je, da je to reguliran vir, da ne boste pomotoma ocvrli delov v svojem vezju. Naš vnos bodo gumbi. Obdelava je samoumevna; uporabljamo procesor. Pomnilnik bo sestavljen samo iz ROM -a. Notranji registri splošnega namena procesorja bodo dovolj za uporabo kot RAM. Izhod bodo LED.

1 LM7805C - 5V regulator

1 ZYLOG Z80 - Procesor

1 AT28C64B - EEPROM

1 74LS273 - Jahalni natikač D

1 74HC374E - oktalni D natikač

3 CD4001BE - Quad NOR vrata

1 NE555 - Generator ure

2 1K ohmski upor

1 10K ohmski upor

1 10K ohmsko uporovno omrežje; 8 Bussed ALI 8 Dodatni 10K upori

1 1uF kondenzator

1 100uF kondenzator

1 Pritisnite gumb

1 Matrika gumbov 3x4 ALI 8 dodatnih gumbov

8 LED - izbira barve ni pomembna

8 330 ohmskih uporov ali uporovnega omrežja

1 Res velika plošča ali več majhnih

Veliko in veliko žice

V moji shemi imam nameščeno palico SRAM. Za to vam ni treba niti skrbeti. Dodal sem ga le shemi, da natančno odraža moje dejansko vezje, in sem ga dodal v vezje za prihodnjo uporabo. Shemi so dodana štirikolesna vrata OR (74LS36). Vhoda dveh neuporabljenih vrat sta vezana na VCC, njihovi izhodi pa lebdijo (niso vlečeni). Prav tako nista narisana niti navedena zgoraj dva kondenzatorja v napajalnem vezju.

V 5V regulator vstavljam regulirano 12V napajanje celotne plošče. Postane precej toplo, zato sem pritrdil hladilnik, da se ohladi. Če za napajanje regulatorja uporabljate manj kot 12 V (uporabite vsaj 7 V), bi moral delovati hladneje.

Z80 je tam, kjer se zgodi čarovnija. Prejema navodila, shranjena v ROM -u, in jih izvaja. EEPROM shrani naš program za izvedbo procesorja.

Oktalna flip-flop, ki je naša izhodna naprava, ki zaklene podatke na podatkovnem vodilu na svoj izhod. To nam omogoča, da spremenimo, kaj je na vodilu, kar je zelo pomemben korak, ki se izvede večkrat na navodila, ne da bi spremenili tisto, kar vidi uporabnik/gledalec. Natikači ne morejo poganjati toka, potrebnega za prižiganje izhodnih LED, zato se napajajo v dva od štirih NOR vratnih čipov, ki delujeta kot pufer za 8 podatkovnih linij za pogon LED. Ker so izhodi vrat obrnjeni, moramo tudi LED priključiti, da jih obrnemo, vendar bomo k temu prišli, ko pridemo do tega. Drugi čip NOR se uporablja za logično dekodiranje, vendar so uporabljena le tri vrata.

Oktalna flip-flop, ki se uporablja za vnos, je v bistvu ista stvar. Izhodne natikače držijo svoj izhod visoko ali nizko, zato ga ni mogoče uporabiti za pogon vodila; shranjeval bi podatke na avtobusu. Flip-flop, ki se uporablja za vnos, nadomesti pin /RESET z /EN, ki bolj ali manj odklopi izhode (in iz) čipa, tako da ne zadrži podatkov (izhodi v treh stanjih).

2. korak: Ožičenje tokokrogov za napajanje, uro in ponastavitev

Ožičenje tokokrogov za napajanje, uro in ponastavitev
Ožičenje tokokrogov za napajanje, uro in ponastavitev
Ožičenje tokokrogov za napajanje, uro in ponastavitev
Ožičenje tokokrogov za napajanje, uro in ponastavitev
Ožičenje tokokrogov za napajanje, uro in ponastavitev
Ožičenje tokokrogov za napajanje, uro in ponastavitev

OPOMBA: Za vse dele najprej priključite vodila. Od vseh stvari, ki jih morate pozabiti ožičiti, bo čipov veliko manj verjetno, da bodo preživeli pozabljene napajalne povezave.

Napajalno vezje je najpreprostejše vezje, ki mu sledita vezja za ponastavitev in ura. Na sliki je 12V vhod na napajalnem drogu skrajno desno. Rjava žica, ki pod seboj skriva rumeno, napaja 12V regulatorju. Izhod regulatorja napaja vsak drugi razdelilnik na plošči in vsak razdelilnik imata skupno točko, saj tako deluje elektronika.

Procesor za delovanje potrebuje vezje ure. Brez tega bo samo sedel v svojem inicializiranem stanju in ne bo storil ničesar. Ura upravlja notranje registre premikov procesorjev, tako da lahko generira signale za opravljanje stvari. Vsak vhod za uro bo primeren, tudi preprost upor in gumb. Toda za izvajanje navodil je potrebnih veliko ciklov ure. Navodilo za pisanje na izhod traja 12 ciklov. Verjetno ne želite sedeti in pritisniti gumb več kot 100 -krat, da dobite samo eno zanko kode (dejanske številke so na koncu navodil). Za to je NE555. Preklapljanje opravi namesto vas in to (relativno) hitro.

Preden začnete karkoli ožičiti, boste morda želeli ugotoviti, kako želite, da so vaše komponente postavljene na ploščo. Moje vezje ure je nekako postavljeno na dno plošče, tako da ne bi prišlo do drugih komponent. Predvidevali bomo, da veste, kako narediti osnovno uro s časovnikom. Če tega ne storite, boste želeli poiskati "555 Astable" in slediti vadnici. Uporabite upor 1K, da greste med tirnico 5V in zatič 7 časovnika (R1) ter 10K med zatičem 7 in nožico 2 (R2). Zagotovite, da je zatič za ponastavitev, nožica 4, pritrjen na tirnico 5V, da lahko časovnik deluje. Na svoj izhod sem postavil LED, da sem lahko preveril, ali ura dejansko deluje, vendar ni potrebna.

Druga možnost pri NE555 je, da ga nastavite kot vrata NE in uporabite 1K upor, da izhod povežete z vhodom. Običajno je priporočljivo uporabiti 3 časovnike za to, vendar sem ugotovil, da bi le 1 moral delovati v redu. Samo vedite, da bo v tem primeru nihalo z zelo veliko hitrostjo in da bo zelo težko, celo nemogoče povedati, da izhodne LED utripajo. Ta nastavitev se imenuje "obročni oscilator".

Upoštevajte, da ure še ne povezujemo s procesorjem. Preprosto ga pripravljamo. Upoštevajte tudi logični čip tik nad uro na sliki. Dodan je bil kasneje in to je bilo edino pol razumno mesto, ki ga je bilo mogoče postaviti. Uporablja se za izbiro RAM/ROM. Ta navodila ne upoštevajo RAM -a, zato tega čipa ne boste imeli na plošči.

Zdaj povežemo vezje za ponastavitev. Najprej morate za to poiskati mesto na deski. Odločil sem se tik ob uri. Dodajte svoj gumb na ploščo. Z 1K uporom privežite eno stran gumba na 5V vodilo. Naši zatiči RESET so aktivni nizko, kar pomeni, da jih moramo držati visoko. Za to je upor. To stičišče je tudi mesto, kjer se priključijo zatiči za ponastavitev. Druga stran gumba gre naravnost v tla. Če želite ponastavitev ob vklopu, temu kondenzatorju dodajte tudi 10uF kondenzator. Ohranila bo napetost na ponastavitvenih zatičih dovolj nizko, da bo aktivirala vezje za ponastavitev v procesorju in natikačih.

3. korak: Ožičenje Z80

Zdaj smo prišli do drobtine. Povezali bomo zver, ki je Z80. Na ploščo sem Z80 postavil na vrh na isti del plošče kot vezje za ponastavitev. Kot smo že omenili, najprej povežite napajalne tirnice. 5V gre na zatič 11 na levi, ozemljitev pa za en zatič navzdol, vendar na desni. Morda ste opazili tudi čudno širino čipa. Zaradi tega boste imeli 3 odprte priključke na eni strani na plošči in 2 na drugi. Zaradi tega je manj priročno povezovanje dodatnih stvari, če se tako odločite.

Naslednje številke pin-predvidevam, da veste, kako šteti zatiče na IC-so neuporabljeni vhodi in morajo biti vezani na 5V vodilo: 16, 17, 24, 25.

Se spomnite naše ure? Njegov izhod gre na pin 6 na z80. Tokokrog za ponastavitev se poveže s čepom 26. Brez drugih komponent na plošči je to, kolikor vam lahko povem s samim ožičenjem z80. Več ožičenja bo izvedeno v naslednjih korakih.

Ker sem vezje že zgradil, še preden sem sploh pomislil, da bi napisal to navodilo, bom sliko zadržal do naslednjega koraka.

4. korak: Ožičenje ROM -a

Ožičenje ROM -a
Ožičenje ROM -a

OPOMBA: Morda boste želeli zadržati, da bi ga dejansko postavili na ploščo, če ga je še treba programirati (več o tem kasneje).

Za ROM sem ga postavil poleg Z80 na desni in ga premaknil tudi z enim zatičem navzdol na ploščo. To mi je omogočilo, da neposredno povežem naslovno vodilo, o tem pa kasneje. AT28C64B je EEPROM, kar pomeni, da ga je mogoče večkrat programirati z izklopom in vklopom nekaterih zatičev. Ne želimo, da bi se naš EEPROM pomotoma reprogramiral, ko je v tokokrogu. Torej, ko priključite napajalne tirnice, priključite žico 27 (/WE) na 5V tirnico, da popolnoma onemogočite funkcijo pisanja.

Moj program je tako majhen, potreboval sem le priključenih spodnjih 5 naslovnih vrstic (A0-A4), vendar sem vseeno ožičil A5, A6 in A7, da lahko pišem večje programe brez dodatnega dela. Dodatne naslovne vrstice (A8-A12) so vezane neposredno na tla, da se prepreči neželen dostop do višjih naslovov iz plavajočih vnosov. Ker so neuporabljeni vhodi naslova vezani na tla in krmiljenje pisanja vezano na 5V, je ožičenje preostalih precej preprosto. Poiščite A0 na procesorju in ga povežite z A0 na ROM -u. Nato poiščite A1 na procesorju in ga povežite z A1 na ROM -u. To storite, dokler ne povežete vseh naslovov skupaj. Na sliki je moje naslovno vodilo do ROM -a izvedeno v modrem ožičenju. Naslovno vodilo, ki gre v RAM, je izvedeno v rdečem ožičenju. Vse te žice so bile vnaprej izrezane in odstranjene, ko so prišle v kompletu za ožičenje, in so bile kot nalašč za to ožičenje.

Ko ožičite naslove (to se imenuje vodilo naslovov), naredite popolnoma enako za nožice z oznako D0, nato D1, D2 itd. To storite za vse podatkovne zatiče (D0 - D7) in podatkovno vodilo ožičeno. Skoraj smo končali z ožičenjem ROM -a. Poiščite nožico ROM -a /CE (omogočanje čipa) in jo povežite z vtičem procesorja 19, /MREQ (zahteva po pomnilniku), nato pa poiščite ROM -e /OE (omogočanje izhoda) in ga povežite z vtičem procesorja 21, /RD (preberite). Zdaj smo končali. Vse to se naredi s skakalnimi žicami, ker morajo iti na drugo stran procesorja in plošča ne ponuja dovolj prostora za uporabo čistega ožičenja.

5. korak: Ožičenje izhoda

Ožičenje izhoda
Ožičenje izhoda
Ožičenje izhoda
Ožičenje izhoda

Ker ni bil naseljen, sem za izhod izbral del plošče levo od Z80. Nataknite natikače in jih priključite na vodila. Pin 1, /MR (reset) se lahko poveže neposredno s ponastavljenim zatičem procesorja, lahko pa ga pustite privezanega na 5V tirnico. S tem boste le prikazali neželene podatke do prvega zapisa. Opazite, kako ima čip vhod za uro na zatiču 11. Ta vhod je čuden, ker se aktivira, ko je pin visoko. Upoštevajte tudi, da ta pin ni ista ura, ki poganja procesor. Ta ura zaklene podatke, zapisane na podatkovnem vodilu.

Se spomnite, kako smo D0 - D7 na ROM -u povezali z istimi nožicami na procesorju? Naredite enako za ta čip. Njegov D0 gre na D0 na podatkovnem vodilu itd. Zatiči, ki se začnejo z "Q", so izhodi. Preden jih priključimo, moramo dodati več žetonov. Uporabil sem štirikolesna vrata NOR, ker jih imam cev in sem jih že potreboval, vendar bo kateri koli čip deloval, če ga pravilno povežete. Lahko bi en vhod na vseh vratih privezal na tla, druge vhode pa uporabil kot vhode, vendar sem se odločil, da oba vhoda povežem zaradi preprostosti.

Žetone sem postavil pod flip-flop, da sem olajšal neposredno povezovanje brez skakalcev, vendar mi je na tej točki zmanjkalo žice, tako da na koncu ni bilo pomembno. Q0, Q1….. Q7 na flip-flopu grejo na vhode na posameznih vratih. S 4 vrati v vsakem paketu/čipu sem potreboval 2 paketa in uporabil vsa vrata. Če najdete različico flip-flopa, ki lahko poganja LED diode, ne da bi potrebovali takšen medpomnilnik, ta dva čipa nista potrebna. Če vrata uporabljate kot vmesnik, ki nima obrnjenih izhodov (AND/OR/XOR), lahko LED priklopite tako, kot bi pričakovali. Če uporabljate iste dele kot jaz in/ali so izhodi obrnjeni, je treba LED ožičiti, kot je opisano spodaj. Prva slika prikazuje del izhoda IC.

Uporabite upore 330 Ohm, da povežete pozitivne LED diode (anodo) na 5V tirnico in negativno (katodo) povežete z izhodom vrat. Na drugi sliki lahko vidite, da sem uporabil dve vodili uporov, od katerih ima vsaka le pet notranjih uporov. S takšnim ožičenjem LED diod zasvetijo, ko je izhod izklopljen. To naredimo, ker je izhod izklopljen, ko je vhod vklopljen. Poskrbite, da boste iz kontrolnika flip-flop spremljali, katera vrata imate. Razen če bodo vaše LED diode razpršene ali je njihov vrstni red nesmiseln, lahko izguba sledenja pozneje povzroči zmedo, ko se vprašate, zakaj je izhod napačen.

6. korak: Ožičenje vhoda

Ožičenje vhoda
Ožičenje vhoda

Vzemite natikač 74HC374 in ga postavite nekam. Moj je bil nekje pod Z80 proti dnu plošče. Se spomnite, kdaj smo nazadnje priključili D0 na D0 in D1 na D1 itd? Tokrat povežemo Q0 na D0 in Q1 na D1 itd. K sreči nam tokrat ni treba dodati nobenih vmesnih čipov, haha. Namesto tega bomo na vsak "D" zatič (D0-D7) in ozemljitev priklopili 10K ohmov, nato pa gumb na iste zatiče in 5V vodilo. Lahko pa uporabite uporno vodilo in močno zmanjšate število svojih delov. Pomagala bo tudi matrika gumbov 3x4 (brez matričnega izhoda !!). Slika prikazuje celoto vhodnega vezja skupaj z logiko lepljenja (ta del je naslednji).

7. korak: Lepilo logike

Imamo še zadnjo stvar. Imenuje se "logika lepljenja", ker se uporablja za dekodiranje krmilnih signalov, da vse deluje; to drži vezje skupaj. Ko procesor želi zapisati podatke na izhod, se /IORQ in /WR (20 oziroma 22) znižata, podatki, ki se pošiljajo, pa se uveljavijo na podatkovnem vodilu. Zatič ure na obeh japonkah je aktiven visoko, kar pomeni, da se podatki zaprejo, ko pin prejme visok signal. Za en vhod vrat uporabljamo vrata NOR in žico /IORQ, za drugi vhod pa /WR. Kadar je eno od visokih vrednosti, kar pomeni, da IO vezja niso izbrana ali da se ne izvaja operacija pisanja, ostane izhod, ki napaja uro flip-flopa, nizek. Ko sta oba vhoda nizka in samo takrat, se izhod dvigne in flip-flop zaklene podatke.

Zdaj moramo ožičiti vhodni flip-flop. Zatič ure lahko priključimo na podoben način kot prejšnji, vendar z uporabo /IORQ in /RD. Toda za razliko od drugih flip-flopov imamo tudi /OE zatič, ki ga je treba znižati le, če sta /IORQ in /RD nizka. Uporabili bi lahko vrata OR. Ali pa lahko preprosto vzamemo signal, ki ga že imamo za uro, in ga obrnemo z enim od dveh obrnjenih vrat, ki jih že imamo na voljo. V času, ko sem navedel ta navodila, nisem imel na voljo vrat OR, zato sem uporabil eno zadnjo možnost. Z uporabo zadnje možnosti mi ni bilo treba dodati nobenih dodatnih delov.

8. korak: Programiranje

Če je vaše ožičenje pravilno in je moja razlaga jasna, preostane samo programiranje ROM -a. Za to obstaja nekaj načinov. Lahko bi šli na enostaven način in naročili nov čip pri Digikeyju. Ko naročite del, boste imeli možnost naložiti datoteko HEX, ki jo bodo programirali, preden jo pošljejo. Uporabite datoteke HEX ali OBJ, priložene temu navodilu, in počakajte, da prispejo po pošti. Možnost 2 je, da zgradite programerja z Arduinom ali kaj podobnega. Poskusil sem to pot in ni uspel pravilno kopirati določenih podatkov, zato sem potreboval nekaj tednov, da sem to ugotovil. Na koncu sem naredil možnost 3, to je, da jo ročno programiram in obrnem stikala za nadzor naslovov in podatkovnih vrstic.

Ko je ta program pretvorjen neposredno v OP kodo procesorja, leži le v 17 bajtih naslovnega prostora, zato ročno programiranje ni bilo preveč grozno. Program naloži v register splošne namene B vrednost 00. Register B se uporablja za shranjevanje rezultata prejšnjega dodajanja. Ker je v registru A matematika, ga ne bomo uporabljali za shranjevanje podatkov.

Ko že govorimo o registru A, izvedemo ukaz IN, ki prebere vnos, in prebrane podatke shranimo v A. Nato dodamo vsebino registra B in iznesemo rezultat.

Nato se register A kopira v register B. Nato izvedemo vrsto ukazov za skok. Ker vsi skoki kažejo na spodnji bajt naslovnih vrstic in ker je zgornji bajt ukaza za preskok podan v drugem argumentu in je "00", lahko vsakemu skoku prisilimo, da mu sledi NOP. To naredimo tako, da damo čas med prikazom izhoda in branjem vnosa, da preprečimo nenamerni vnos. Vsak skok uporablja deset ciklov ure, vsak NOP pa štiri. Če zanka po vašem okusu traja predolgo, lahko povečate hitrost ure ali pa jo znova programirate, da uporabite en skok manj.

9. korak: Testiranje

Če ste vse pravilno povezali in je ROM pravilno programiran, morate narediti še zadnji korak: priključite ga in preverite, ali deluje. Pritisnite gumb in počakajte nekaj sekund. Program potrebuje 81 ciklov ure, da doseže svojo prvo zanko, vsaka zanka pa 74 ciklov ure.

Če ne deluje, preverite kratke hlače in nepovezane zatiče (odpre se) ter druge težave z ožičenjem. Če ste onemogočili ponastavitev ob vklopu, boste morali ročno ponastaviti, preden procesor kaj naredi. Na naslovno vodilo lahko priključite tudi LED diode, da preverite, ali se obnašajo. Tudi sam sem imel težave s tem, zato sem jih namesto tega prilepil neposredno na podatkovno vodilo. To mi je omogočilo, da sem videl, kaj se sporoča med procesorjem in ROM -om, ne da bi me bilo treba skrbeti, če se ROM pravilno bere, kar bi zahtevalo časovne diagrame in tega preprosto nisem želel vpletati. Izkazalo se je, da je bila dobra izbira, ker sem končno ujel problematične kode OP, ki so bile shranjene nepravilno.

Priporočena: