Sisukord:

Ehitage arvuti, millel on elektroonika põhiteadmised: 9 sammu (piltidega)
Ehitage arvuti, millel on elektroonika põhiteadmised: 9 sammu (piltidega)

Video: Ehitage arvuti, millel on elektroonika põhiteadmised: 9 sammu (piltidega)

Video: Ehitage arvuti, millel on elektroonika põhiteadmised: 9 sammu (piltidega)
Video: Meeting #5 - 4/29/2022 | ETF team meeting and dialogue 2024, Juuli
Anonim
Ehitage arvuti, millel on elektroonika põhiteadmised
Ehitage arvuti, millel on elektroonika põhiteadmised

Kas olete kunagi tahtnud teeselda, et olete tõesti tark ja ehitada oma arvuti nullist? Kas te ei tea midagi sellest, mida on vaja minimaalse miinimumarvuti tegemiseks? Noh, see on lihtne, kui teate piisavalt elektroonikat, et mõned IC -d õigesti kokku panna. See õpetatav eeldab, et olete selles osas hea, ja veel mõned asjad. Ja kui ei, siis ei tohiks selle jälgimine siiski liiga keeruline olla, kui teate, kuidas leivalaudamist/prototüüpimist tehakse. Selle juhendi eesmärk on saada teile töötav "arvuti", teadmata nende toimimisest palju. Ma käsitlen juhtmestikku ja programmeerimise põhitõdesid ning pakun teile väga lühikest programmi. Nii et alustame.

Samm: osad ja asjad

Osad ja asjad
Osad ja asjad
Osad ja asjad
Osad ja asjad

"Arvuti" vajab: toiteallikat, sisendit, töötlemist, mälu ja väljundit. Tehniliselt on meil kõik need asjad olemas. Ma käsitlen neid asju selles järjekorras.

Toite jaoks vajate 5 -voldist (siin tähistatud kui 5 V) allikat. Soovitatav on see reguleeritud allikas, nii et te ei kogemata oma vooluringi osi praadiks. Meie sisendiks on nupud. Töötlemine on iseenesestmõistetav; kasutame protsessorit. Mälu koosneb ainult ROM -ist. RAM -i kasutamiseks piisab protsessori sisemistest üldotstarbelistest registritest. Väljundiks on LED -id.

1 LM7805C - 5V regulaator

1 ZYLOG Z80 - protsessor

1 AT28C64B - EEPROM

1 74LS273 - Octal D flip -flop

1 74HC374E - Octal D flip -flop

3 CD4001BE - Quad NOR värav

1 NE555 - Kellageneraator

2 1K oomi takisti

1 10K oomi takisti

1 10K oomi takisti võrk; 8 Bussed VÕI 8 Täiendavad 10K takistid

1 1uF kondensaator

1 100uF kondensaator

1 Vajutage nuppu

1 3x4 nupumaatriks VÕI 8 lisanuppu

8 LED - värvivalik ei loe

8 330 oomi takistid või takistite võrk

1 Tõeliselt suur leivalaud või mitu väikest

Palju ja palju traati

Minu skeemil on mul paigaldatud SRAM -pulk. Te ei pea isegi selle pärast muretsema. Lisasin selle ainult skeemile, et kajastada täpselt minu tegelikku vooluringi ja lisasin selle vooluringi edaspidiseks kasutamiseks. Skeemile on lisatud ka quad OR värav (74LS36). Kaks kasutamata värava sisendit on seotud VCC -ga ja nende väljundid jäetakse vedelema (joonistamata). Samuti pole joonistatud ega ülaltoodud toiteahelas kahte kondensaatorit.

Söödan reguleeritud 12V 5V regulaatorisse, et toita kogu leivaplaati. Läheb üsna soojaks, seega kinnitasin jahutamiseks jahutusradiaatori. Kui kasutate regulaatori toitmiseks vähem kui 12 V (kasutage vähemalt 7 V), peaks see töötama jahedamalt.

Z80 on koht, kus maagia juhtub. See võtab ROM -i salvestatud juhiseid ja täidab neid. EEPROM salvestab meie programmi protsessori jaoks.

Kaheksane klapp, mis on meie väljundseade, mis lukustab andmesiini andmed oma väljundisse. See võimaldab meil muuta bussis olevat teavet, mis on väga oluline samm, mida tehakse mitu korda juhise kohta, muutmata seda, mida kasutaja/vaataja näeb. Flip-flop ei saa juhtida väljund-LED-ide valgustamiseks vajalikku voolu, nii et need suunatakse kahte neljast NOR-värava kiibist, mis puhverdavad 8 andmeliini LED-ide juhtimiseks. Kuna nende väravate väljund on ümberpööratud, peame ka LED -id ümberpööratavaks juhtmeks ühendama, kuid jõuame selleni, kui jõuame selleni. Teist NOR -kiipi kasutatakse loogiliseks dekodeerimiseks, kuid kasutatakse ainult kolme väravat.

Sisendiks kasutatav kaheksasarvik on sisuliselt sama. Väljundklapid hoiavad oma väljundit kas kõrgel või madalal, nii et seda ei saa bussi juhtimiseks kasutada; see mahutaks bussi andmeid. Sisendiks kasutatav klapp asendab /RESET tihvti /EN-ga, mis enam-vähem eraldab kiibi (ja selle) väljundid, nii et see ei hoia andmeid (kolme oleku väljundid).

2. samm: toite-, kella- ja lähtestusahelate ühendamine

Toite-, kella- ja lähtestusahelate juhtmestik
Toite-, kella- ja lähtestusahelate juhtmestik
Toite-, kella- ja lähtestusahelate juhtmestik
Toite-, kella- ja lähtestusahelate juhtmestik
Toite-, kella- ja lähtestusahelate juhtmestik
Toite-, kella- ja lähtestusahelate juhtmestik

MÄRKUS. Kõikide osade jaoks ühendage esmalt juhtrööpad. Kui juhtmestik unustada, on kiipide ellujäämise tõenäosus palju väiksem.

Toiteahel on kõige lihtsam juhtmestik, millele järgnevad vastavalt lähtestus- ja kellaahelad. Pildil on 12V sisend paremal pool asuval toiteliinil. Pruun juhe, mis peidab enda alla kollast, toidab 12 V regulaatorisse. Regulaatori väljund toidab kõiki teisi leivaplaadil olevaid toiteplokke ja igal toiteplokil on ühine alus, sest nii töötab elektroonika.

Protsessor vajab töötamiseks kellaahelat. Ilma selleta istub ta seal oma esialgses olekus ja ei tee midagi. Kell juhib protsessori sisemisi nihkeregistreid, nii et see võib tekitada signaale asjade tegemiseks. Iga kella sisend sobib, isegi lihtne takisti ja nupp. Kuid juhiste täitmiseks kulub palju kellatsükleid. Käsk väljundisse kirjutamiseks võtab iseenesest 12 tsüklit. Tõenäoliselt ei taha te seal istuda ja 100+ korda nuppu vajutada, et saada ainult üks koodiahel (tegelikud numbrid on juhiste lõpus). Selleks on NE555. See teeb vahetamise teie eest ja teeb seda (suhteliselt) kiiresti.

Enne kui hakkate midagi juhtmega ühendama, võiksite edasi minna ja välja mõelda, kuidas soovite oma komponendid tahvlile paigutada. Minu kellaahel on paigutatud lihtsalt plaadi põhja, nii et see oleks teiste komponentide eest väljas. Eeldame, et teate, kuidas taimeriga põhikella teha. Kui te seda ei tee, siis otsige üles "555 Astable" ja järgige õpetust. Kasutage 1K takistit, et liikuda 5V rööpa ja taimeri (R1) tihvti 7 vahele ning 10K tihvti 7 ja tihvti 2 (R2) vahele. Siduge kindlasti lähtestusnõel, tihvt 4, 5V rööpa külge, et taimer saaks toimida. Panin oma väljundile LED -i, et saaksin kontrollida, kas kell tõesti töötas, kuid seda pole vaja.

Teine võimalus NE555 puhul on seadistada see NOT väravaks ja kasutada 1K takistit, et siduda väljund sisendiga tagasi. Tavaliselt soovitatakse selleks kasutada 3 taimerit, kuid leidsin, et ainult üks peaks hästi toimima. Lihtsalt teadke, et kui te seda teete, võngub see väga suure kiirusega ja on väga raske, isegi võimatu öelda, et väljund -LED -id vilguvad. Seda seadistust nimetatakse "ringostsillaatoriks".

Pange tähele, et me ei ühenda kella veel protsessoriga. Me valmistame seda lihtsalt ette. Pange tähele ka pildil kella kohal olevat loogikakiipi. See lisati hiljem ja see oli ainus poolmõistetav koht selle paigutamiseks. Seda kasutatakse RAM/ROM valimiseks. See juhend eirab RAM -i, nii et teil pole seda kiipi oma tahvlil.

Nüüd ühendame lähtestamisahela. Kõigepealt peate selle jaoks oma laual koha leidma. Valisin kohe kella kõrval. Lisage oma nupp tahvlile. Kasutage 1K takistit, et siduda nupu üks külg 5V rööpa külge. Meie RESET -tihvtid on aktiivsed madalal, mis tähendab, et peame neid kõrgel hoidma. Selleks on takisti. See ristmik on ka koht, kus lähtestusnõelad ühenduvad. Nupu teine pool läheb otse maapinnale. Kui soovite sisselülitamist lähtestada, lisage sellele ristmikule ka 10uF kondensaator. See hoiab lähtestusnõelte pinget piisavalt kaua madalal, et aktiveerida lähtestamisahel protsessoris ja flip-flopis.

Samm: ühendage Z80 juhtmega

Nüüd jõuame asja juurde. Me traatime metsalise, mis on Z80. Panin oma plaadile Z80 ülaossa samasse tahvlilõiku nagu lähtestusahel. Nagu varem öeldud, traatige esmalt toitepiirded. 5V läheb vasakul asuvasse tihvti 11 ja maapind on üks tihvt alla, kuid paremal. Võib -olla olete märganud ka kiibi paaritu laiust. See toob kaasa selle, et leivaplaadi ühel küljel on 3 avatud pistikut ja teisel küljel 2 pistikut. See muudab lisakraami juhtmete ühendamise vähem mugavaks, kui otsustate seda teha.

Järgmised tihvtide numbrid-eeldan, et teate, kuidas IC-l kontakte lugeda-on kasutamata sisendid ja need peavad olema seotud 5V rööpaga: 16, 17, 24, 25.

Mäletate meie kella? Selle väljund läheb z80 nööpnõelale 6. Lähtestusahel ühendatakse tihvtiga 26. Ilma muude komponentide puudumiseta plaadil on see nii palju kui ma saan teile z80 enda juhtmestikuga ühendust võtta. Rohkem juhtmeid sellega tehakse hiljem.

Kuna olin lasknud vooluringi ehitada juba enne, kui kaalusin selle õpetamise kirjutamist, hoian pilti järgmise sammuni.

Samm: ROM -i ühendamine

ROM -i juhtmestik
ROM -i juhtmestik

MÄRKUS. Kui soovite seda veel programmeerida, võite selle tahvlile paigutamisest loobuda (sellest lähemalt hiljem).

ROM -i jaoks asetasin selle paremal asuva Z80 kõrvale ja nihutasin selle ühe tihvtiga leivaplaadile alla. See võimaldas mul aadressibussi otse üle juhtida, kuid sellest hiljem. AT28C64B on EEPROM, mis tähendab, et seda saab programmeerida mitu korda, lülitades mõned tihvtid välja ja sisse. Me ei taha, et meie EEPROM programmeeriks end kogemata ümber, kui see on ahelas. Niisiis, kui olete toitepiirded ühendanud, ühendage juhtmestik 27 (/WE) 5V rööpaga, et kirjutusfunktsioon täielikult keelata.

Minu programm on nii väike, mul oli vaja ühendada ainult alumised 5 aadressiliini (A0-A4), kuid ühendasin A5, A6 ja A7 niikuinii, et saaksin suuremaid programme ilma lisatööta kirjutada. Täiendavad aadressirid (A8-A12) on seotud otse maaga, et vältida ujuvate sisendite soovimatut juurdepääsu kõrgematele aadressidele. Kui kasutamata aadressisisendid on seotud maaga ja kirjutuskontroll on seotud 5 V -ga, on ülejäänud juhtmete ühendamine üsna lihtne. Leidke protsessorilt A0 ja ühendage see ROM -ilt A0 -ga. Seejärel leidke protsessorilt A1 ja ühendage see ROM -iga A1 -ga. Tehke seda seni, kuni ühendate kõik aadressid kokku. Pildil on minu aadressibuss ROM -i sinise juhtmestikuga. RAM -ile suunatud aadressibuss on punase juhtmestikuga. Need juhtmed olid kõik eelnevalt lõigatud ja eemaldatud, kuna need olid leivaplaadi juhtmekomplektis ja sobivad ideaalselt selle juhtmestiku jaoks.

Kui olete aadressid juhtmega ühendanud (seda nimetatakse aadressibussiks), tehke täpselt sama toimingut tihvtide puhul, mis on märgistatud D0, seejärel D1, D2 jne. Tehke seda kõigi andmestikude (D0 - D7) puhul ja teil on andmesiin juhtmega. Oleme ROM -i juhtmestikuga peaaegu valmis. Leidke ROMi /CE (kiibi lubamise) tihvt ja ühendage see protsessori tihvtiga 19, /MREQ (mälu taotlus), seejärel leidke ROM /OE (väljundi lubamine) ja ühendage see protsessori kontaktiga 21, /RD (loe). Nüüd oleme lõpetanud. Kõiki neid tehakse hüppajajuhtmetega, kuna need peavad minema protsessori teisele poole ja leivaplaat ei paku piisavalt ruumi, et kasutada niimoodi korralikke juhtmeid.

Samm: väljundi ühendamine

Väljundi juhtmestik
Väljundi juhtmestik
Väljundi juhtmestik
Väljundi juhtmestik

Kuna see oli asustamata, valisin väljundiks Z80 -st vasakul asuva plaadiosa. Asetage plätud sinna ja ühendage need elektrirööpad. Pin 1, /MR (reset) saab ühendada otse protsessori lähtestusnõelaga, kuid võite selle 5V rööpa külge siduda. Seda tehes kuvatakse ainult rämpsandmeid kuni esimese kirjutamiseni. Pange tähele, kuidas kiibil on kella sisend tihvtil 11. See sisend on imelik, kuna see aktiveeritakse, kui tihvt läheb kõrgele. Pange tähele, et see tihvt EI OLE sama kell, mis juhib protsessorit. See kell lukustab andmesiinile kinnitatud andmed.

Mäletate, kuidas me ühendasime ROMil olevad D0 - D7 protsessori samade tihvtidega? Tehke selle kiibi puhul täpselt sama. Selle D0 läheb andmesiinile D0 -le ja nii edasi. "Q" -ga algavad tihvtid on väljundid. Enne nende ühendamist peame lisama rohkem kiipe. Ma kasutasin quad NOR väravaid, kuna mul on neid toru ja mul oli neid juba vaja, kuid mis tahes kiip töötab, kui ühendate selle õigesti. Oleksin võinud ühe värava kõigi sisendite maaga siduda ja teisi sisendeid kasutada sisenditena, kuid valisin lihtsuse huvides mõlemad sisendid kokku.

Asetasin kiibid flip-flopi alla, et oleks lihtsam otse ilma džemprita juhtmeid ühendada, kuid mul oli traat sel hetkel otsakorral, nii et see ei olnud tegelikult oluline. Flip-flopi Q0, Q1….. Q7 läheb üksikute väravate sisenditesse. Kuna igas pakendis/kiibis oli 4 väravat, vajasin 2 pakki ja kasutasin kõiki väravaid. Kui leiate flip-flopi versiooni, mis suudab LED-e juhtida ilma niimoodi puhverdamata, pole neid kahte kiipi vaja. Kui kasutate puhvrina väravaid, millel ei ole ümberpööratud väljundeid (JA/VÕI/XOR), saate valgusdioodid ühendada ootuspäraselt. Kui kasutate minuga samu osi ja/või väljundid on tagurpidi, tuleks LED -id juhtmega ühendada, nagu allpool kirjeldatud. Esimene pilt näitab väljundi IC -osa.

Kasutage 330 oomi takistit, et siduda positiivsed LED -id (anood) 5V rööpa külge ja ühendada negatiivne (katood) väravate väljundiga. Teisel pildil näete, et kasutasin kahte takisti siinit, mõlemal ainult viis sisemist takistit. Selliste LED -ide juhtmestik süttib, kui väljund on välja lülitatud. Me teeme seda, kuna sisend on sisse lülitatud. Veenduge kindlasti, et jälgite, millised väravad teie väljundid flip-flop-juhtseadme kaudu. Kui teie valgusdioodid pole hajutatud või nende järjekord on mõttetu, võib nende jälgimise kaotamine põhjustada hiljem segadust, kui küsite endalt, miks väljund on vale.

6. samm: sisendi juhtmestik

Sisendi juhtmestik
Sisendi juhtmestik

Võtke see 74HC374 klapp ja asetage see kuhugi. Minu oma oli kuskil Z80 all tahvli põhja poole. Kas mäletate viimast korda, kui ühendasime D0 D0 -ga ja D1 D1 -ga jne? Seekord ühendame Q0 kuni D0 ja Q1 kuni D1 ja nii edasi. Õnneks ei pea me seekord lisama puhverlaaste, haha. Selle asemel ühendame 10K oomi iga "D" tihvtiga (D0-D7) ja maandusega ning seejärel nupu samade tihvtide ja 5V rööpaga. Või võite kasutada takisti bussi ja vähendada oma osade arvu palju. Abiks on ka 3x4 nupumaatriks (ilma maatriksväljundita !!). Pilt näitab kogu sisendahelat koos liimiloogikaga (see osa on järgmine).

7. samm: liimi loogika

Meil on veel viimane asi juhtmeks teha. Seda nimetatakse "liimiloogikaks", sest seda kasutatakse juhtsignaalide dekodeerimiseks, et see kõik toimiks; see hoiab vooluringi koos. Kui protsessor soovib andmeid väljundisse kirjutada, lähevad mõlemad /IORQ ja /WR (vastavalt 20 ja 22) madalaks ning saadetavad andmed kinnitatakse andmesiinile. Kella nööpnõel mõlemal plätul on aktiivne kõrgel, mis tähendab, et andmed lukustuvad, kui tihvt saab kõrge signaali. Me kasutame värava ühele sisendile NOR väravat ja traati /IORQ ja teisele sisendile /WR. Kui kumbki on kõrge, see tähendab, et IO-ahelaid ei ole valitud või kirjutamisoperatsiooni ei tehta, jääb plätud kella toitev väljund madalaks. Kui mõlemad sisendid on madalad ja ainult siis, läheb väljund kõrgeks ja klapp salvestab andmed.

Nüüd peame juhtima sisend flip-flop. Võime kella nööpi ühendada umbes samamoodi nagu eelmist, kuid kasutades /IORQ ja /RD. Kuid erinevalt teisest flip-flopist on meil ka /OE tihvt, mis tuleb madalaks võtta ainult siis, kui /IORQ ja /RD on madalad. Võiksime kasutada VÕI väravat. Või võtame lihtsalt kella jaoks juba olemasoleva signaali ja pöörame selle ümber kahe olemasoleva ümberpööramise väravaga. Selle juhise avaldamise ajal ei olnud mul VÕI väravat saadaval, seega kasutasin viimast võimalust. Viimase võimaluse kasutamine tähendas, et ma ei pidanud niikuinii täiendavaid osi lisama.

8. samm: programmeerimine

Kui teie juhtmestik on õige ja minu selgitus selge, jääb üle ainult ROM -i programmeerimine. Selleks on mitu võimalust. Võite valida lihtsama tee ja tellida Digikeyst uue kiibi. Osa tellides on teil võimalus HEX -fail üles laadida ja nad programmeerivad selle enne saatmist. Kasutage selle juhendi juurde lisatud HEX- või OBJ -faile ja oodake, kuni see postiga jõuab. Teine võimalus on ehitada programmeerija Arduinoga või midagi sellist. Proovisin seda marsruuti ja teatud andmete korrektne kopeerimine ebaõnnestus ning mul kulus selle mõistmiseks nädalaid. Lõpuks tegin valiku 3, milleks on käsitsi programmeerimine ja aadress- ja andmeliinide juhtimiseks klapplülitid.

Kui see programm on otse protsessori OP -koodiks teisendatud, jääb see ainult 17 baiti aadressiruumi, nii et käsitsi programmeerimine ei olnud liiga kohutav. Programm laadib üldotstarbelisse registrisse B väärtuse 00. Registrit B kasutatakse eelmise lisamise tulemuse salvestamiseks. Kuna matemaatika toimub A -registris, ei kasuta me seda andmete salvestamiseks.

A -registrist rääkides täidame IN -käsu, mis loeb sisendi ja salvestame loetud andmed A -sse. Seejärel lisame registri B sisu ja väljastame tulemuse.

Pärast seda kopeeritakse register A registrisse B. Ja siis teeme hüppekäskude seeria. Kuna kõik hüpped osutavad aadressiridade alumisele baidile ja kuna hüppejuhise ülemine bait on antud teises argumendis ja see on "00", saame sundida iga hüpet järgima NOP -i. Me teeme seda, et anda aega väljundi näitamise ja sisendi lugemise vahel, et vältida juhuslikku sisestamist. Iga hüpe kasutab kümmet taktsüklit ja iga NOP nelja. Kui silmus võtab teie jaoks liiga kaua aega, saate kella kiirust suurendada või saate selle ümber programmeerida, et kasutada ühte hüpet vähem.

9. samm: testimine

Kui ühendasite kõik õigesti ja teie ROM on õigesti programmeeritud, on veel üks viimane samm: ühendage see ja vaadake, kas see töötab. Vajutage nuppu ja oodake mõni sekund. Programmi esimese tsüklini jõudmiseks kulub 81 taktsüklit ja iga tsükkel võtab 74 kellatsüklit.

Kui see ei tööta, kontrollige lühiseid ja ühendamata kontakte (avaneb) ning muid juhtmestiku probleeme. Kui loobusite sisselülitamise lähtestamisest, peate enne protsessori tegemist midagi käsitsi lähtestama. Samuti saate aadressibussi külge kinnitada valgusdioode, et näha, kas need käituvad. Mul endal oli sellega probleeme, nii et kleepisin need otse andmesiini külge. See võimaldas mul näha, mida protsessori ja ROM -i vahel edastati, ilma et peaksin muretsema, kas ROM -i loetakse õigesti, mis oleks nõudnud ajastusskeeme ja ma lihtsalt ei tahtnud seda kaasata. Selgus, et see oli hea valik, sest lõpuks tabasin valesti salvestatud problemaatilised OP -koodid.

Soovitan: