Innholdsfortegnelse:

Bygg en datamaskin med grunnleggende forståelse av elektronikk: 9 trinn (med bilder)
Bygg en datamaskin med grunnleggende forståelse av elektronikk: 9 trinn (med bilder)

Video: Bygg en datamaskin med grunnleggende forståelse av elektronikk: 9 trinn (med bilder)

Video: Bygg en datamaskin med grunnleggende forståelse av elektronikk: 9 trinn (med bilder)
Video: Обнаружение скрытого UAP? | Выжить в черной дыре с Ави Лоэбом Obnaruzheniye skrytogo UAP? Avi Loebom 2024, November
Anonim
Bygg en datamaskin med grunnleggende forståelse av elektronikk
Bygg en datamaskin med grunnleggende forståelse av elektronikk

Har du noen gang ønsket å late som om du var virkelig smart og bygge din egen datamaskin fra bunnen av? Vet du ingenting om hva som kreves for å lage en datamaskin med et minimum? Vel, det er enkelt hvis du vet nok om elektronikk til å kaste noen ICer riktig. Denne instruksen vil anta at du er god på den delen, pluss et par andre ting. Og hvis ikke, bør det fortsatt ikke være for vanskelig å følge med hvis du vet hvordan breadboarding/prototyping gjøres. Hensikten med denne instruksjonsboken er å skaffe deg en fungerende "datamaskin" uten å vite mye om hvordan de fungerer. Jeg vil dekke ledninger og grunnleggende programmering, samt gi et veldig kort program for deg. Så la oss komme i gang.

Trinn 1: Deler og ting

Deler og ting
Deler og ting
Deler og ting
Deler og ting

En "datamaskin" krever: strøm, inngang, prosessering, minne og utgang. Teknisk vil vi ha alle disse tingene. Jeg skal dekke disse tingene i den rekkefølgen.

For strøm trenger du en 5 volt (heretter merket som 5V) kilde. Det anbefales at det er en regulert kilde, slik at du ikke ved et uhell steker deler i kretsen din. Vår innspill vil være knapper. Behandlingen er selvforklarende; vi bruker en prosessor. Minne vil bare bestå av ROM. Prosessorens interne generelle registre vil være nok til å brukes som RAM. Utgang vil være lysdioder.

1 LM7805C - 5V regulator

1 ZYLOG Z80 - Prosessor

1 AT28C64B - EEPROM

1 74LS273 - Octal D Flip -Flop

1 74HC374E - Octal D Flip -Flop

3 CD4001BE - Quad NOR Gate

1 NE555 - Klokkegenerator

2 1K Ohm motstand

1 10K Ohm motstand

1 10K Ohm motstandsnettverk; 8 Bussed ELLER 8 Ytterligere 10K motstander

1 1uF kondensator

1 100uF kondensator

1 Trykknapp

1 3x4 knappematrise ELLER 8 ekstra trykknapper

8 LED - Fargevalg spiller ingen rolle

8 330 Ohm motstander eller motstandsnettverk

1 Virkelig stort brødbrett eller flere små

Mange og mange ledninger

I skjematikken min har jeg en pinne med SRAM installert. Du trenger ikke engang bekymre deg for det. Jeg la den bare til skjematisk for å gjenspeile den faktiske kretsen min, og jeg la den til kretsen for fremtidig bruk. Det er også lagt til skjematisk en quad OR -gate (74LS36). De to ubrukte portenes innganger er knyttet til VCC og utgangene deres blir flytende (ikke trukket). Det er heller ikke tegnet eller oppført ovenfor to kondensatorer på strømkretsen.

Jeg mater regulert 12V til 5V regulatoren for å mate hele brødbrettet. Det blir ganske varmt, så jeg festet en kjøleribbe for å kjøle det ned. Hvis du bruker mindre enn 12V til å mate regulatoren (bruk minst 7V), bør den kjøre kjøligere.

Z80 er der magien skjer. Den tar instruksjoner lagret i ROM og kjører dem. EEPROM lagrer programmet vårt for prosessoren å kjøre.

Den oktale flip-flop som er vår utgangsenhet som låser dataene på databussen til sin egen utgang. Dette lar oss endre hva som er på bussen, som er et veldig viktig trinn som er gjort flere ganger per instruksjon, uten å endre hva brukeren/seeren ser. Flipp-floppen kan ikke drive strømmen som kreves for å tenne ut-LED-ene, så de mates inn i to av de fire NOR-gate-brikkene som fungerer for å buffer de 8 datalinjene for å drive LED-ene. Siden utgangene til portene er inverterte, må vi også koble LED -lampene til å være inverterte, men vi kommer til det når vi kommer til det. Den andre NOR -brikken brukes til logisk dekoding, men bare tre porter brukes.

Den oktale flip-floppen som brukes for input, er egentlig det samme. Utgangsvippene holder utgangene høye eller lave, så den kan ikke brukes til å kjøre bussen. den vil holde data på bussen. Flip-floppen som brukes for inngang erstatter /RESET-pinnen med /EN, som mer eller mindre kobler utgangene til (og fra) brikken slik at den ikke vil lagre data (tri-state-utganger).

Trinn 2: Koble til strøm, klokke og tilbakestill kretser

Koble til strøm, klokke og tilbakestill kretser
Koble til strøm, klokke og tilbakestill kretser
Koble til strøm, klokke og tilbakestill kretser
Koble til strøm, klokke og tilbakestill kretser
Koble til strøm, klokke og tilbakestill kretser
Koble til strøm, klokke og tilbakestill kretser

MERK: For alle deler, koble til strømskinnene først. Av alle ting å glemme å koble til, er det mye mindre sannsynlig at sjetongene overlever glemte strømtilkoblinger.

Strømkretsen er den enkleste kretsen å koble, etterfulgt av henholdsvis tilbakestillings- og klokkekretser. På bildet er 12V -inngangen på strømlisten helt til høyre. Den brune ledningen, som skjuler en gul under den, mater 12V til regulatoren. Utgangen fra regulatoren mater hver annen strømstripe på brødbrettet, og hver strømkabel deler en felles grunn fordi det er slik elektronikk fungerer.

Prosessoren krever en klokkekrets for å fungere. Uten den vil den bare sitte der i sin initialiserte tilstand og ikke gjøre noe. Klokken driver prosessorenes interne skiftregistre, slik at den kan generere signaler for å gjøre ting. Enhver klokkeinngang vil gjøre, til og med en enkel motstand og trykknapp. Men det tar mange klokkesykluser å utføre instruksjoner. Instruksjonen om å skrive til utgangen tar 12 sykluser i seg selv. Du vil sannsynligvis ikke sitte der og trykke på en knapp 100+ ganger for å få bare en sløyfe med koden (faktiske tall er på slutten av instruksjonsboken). Det er det NE555 er til for. Det gjør byttet for deg, og det gjør det med en (relativt) rask hastighet.

Før du begynner å koble til noe, kan det være lurt å gå videre og finne ut hvordan du vil at komponentene skal legges ut på brettet. Klokkekretsen min er ganske enkelt satt på bunnen av brettet, så det ville være i veien for andre komponenter. Vi antar at du vet hvordan du lager en grunnleggende klokke med timeren. Hvis du ikke gjør det, vil du slå opp "555 Astable" og følge en veiledning. Bruk 1K -motstanden til å gå mellom 5V -skinnen og pinne 7 på timeren (R1) og 10K mellom pinne 7 og pinne 2 (R2). Sørg for å knytte tilbakestillingspinnen, pin 4, til 5V -skinnen slik at timeren kan fungere. Jeg satte en LED på min utgang, slik at jeg kunne bekrefte at klokken faktisk fungerte, men det er ikke nødvendig.

Et annet alternativ med NE555 er å sette den opp som en NOT -port og bruke en 1K -motstand for å knytte utgangen tilbake til inngangen. Det anbefales vanligvis å bruke 3 tidtakere for å gjøre dette, men jeg fant ut at bare 1 burde fungere fint. Bare vet at hvis du gjør dette, vil det svinge med en veldig høy hastighet, og det vil være veldig vanskelig, umulig til og med, å si at utgangs -LEDene blinker. Dette oppsettet kalles en "ringoscillator".

Vær oppmerksom på at vi ikke har koblet klokken til prosessoren ennå. Vi gjør det rett og slett klart. Legg også merke til logikkbrikken like over klokken i bildet. Det ble lagt til senere, og det var det eneste semi-rimelige stedet igjen for å plassere det. Den brukes til valg av RAM/ROM. Denne instruksjonsboken ignorerer RAM, så du vil ikke ha denne brikken på brettet ditt.

Nå leder vi tilbakestillingskretsen. Først må du finne et sted på brettet ditt for det. Jeg valgte rett ved siden av klokken. Legg til knappen på tavlen. Bruk en 1K -motstand for å knytte den ene siden av knappen til 5V -skinnen. RESET -pinnene våre er lave, noe som betyr at vi må holde dem høyt. Det er det motstanden er til for. Dette krysset er også der tilbakestillingspinnene kobles til. Den andre siden av knappen går rett til bakken. Hvis du vil tilbakestille oppstart, kan du også legge til 10uF-kondensatoren i dette krysset. Det vil holde spenningen på tilbakestillingspinnene lave lenge nok til å aktivere tilbakestillingskretsene i prosessoren og vippen.

Trinn 3: Koble til Z80

Nå kommer vi til det grusomme. Vi skal føre dyret som er Z80. På brettet mitt satte jeg Z80 øverst på den samme delen av brettet som tilbakestillingskretsen. Som nevnt tidligere, koble strømskinnene først. 5V går til pinne 11 til venstre og bakken er en pinne ned, men til høyre. Du har kanskje også lagt merke til den brede bredden på brikken. Det vil føre til at du har 3 åpne kontakter på den ene siden på brødbrettet og 2 på den andre. Det gjør det bare mindre praktisk å koble til flere ting hvis du velger å gjøre det.

Følgende pinnummer-jeg antar at du vet hvordan du teller pinner på en IC-er ubrukte innganger og må være knyttet til 5V-skinnen: 16, 17, 24, 25.

Husker du klokken vår? Utgangen går til pin 6 på z80. Tilbakestillingskretsen kobles til pin 26. Uten å ha de andre komponentene på brettet, er dette så langt jeg kan komme deg med ledningene til selve z80. Flere ledninger til det vil bli gjort i senere trinn.

Fordi jeg allerede hadde fått kretsen bygget før jeg selv vurderte å skrive dette instruerbart, vil jeg holde på bildet til neste trinn.

Trinn 4: Koble til ROM -en

Kabling av ROM
Kabling av ROM

MERK: Det kan være lurt å holde det igjen å faktisk plassere det på brettet hvis det fortsatt må programmeres (mer om det senere).

For ROM -en plasserte jeg den ved siden av Z80 til høyre og fortrengte den også en pinne ned på brødbrettet. Dette tillot meg å koble adressebussen direkte over, men mer om det senere. AT28C64B er en EEPROM, noe som betyr at den kan programmeres flere ganger ved å slå noen pinner av og på. Vi vil ikke at vår EEPROM ved et uhell skal omprogrammere seg selv når den er i kretsen. Så når du har koblet til strømskinnene, koble wire pin 27 (/WE) til 5V -skinnen for å deaktivere skrivefunksjonen helt.

Programmet mitt er så lite, jeg trengte bare de nedre 5 adresselinjene (A0-A4) tilkoblet, men jeg koblet til A5, A6 og A7 uansett slik at jeg kan skrive større programmer uten ekstra arbeid. De ekstra adresselinjene (A8-A12) er bundet direkte til bakken for å forhindre uønsket tilgang til de høyere adressene fra flytende innganger. Med de ubrukte adresseinngangene knyttet til bakken og skrivekontrollen knyttet til 5V, er kabling av resten ganske grei. Finn A0 på prosessoren og koble den til A0 på ROM. Finn deretter A1 på prosessoren og koble den til A1 på ROM. Gjør dette til du kobler alle adressene sammen. På bildet er adressebussen min til ROM utført i blå ledninger. Adressebussen som går til RAM er gjort i røde ledninger. Disse ledningene var alle forhåndskutt og fjernet da de kom i et brødbrettledningssett og var perfekte for denne ledningen.

Etter at du har koblet adressene (dette kalles adressebussen), gjør du nøyaktig det samme for pinnene merket D0, deretter D1, D2, etc. Gjør dette for alle datapinnene (D0 - D7), og du har din databuss kablet. Vi er nesten ferdige med å koble ROM -en. Finn ROM /CE (chip aktivering) pin og koble den til prosessorens pin 19, /MREQ (minneforespørsel), og finn deretter ROM's /OE (output enable) og koble den til prosessor pin 21, /RD (les). Vi er nå ferdige. Alle disse er gjort med jumper -ledninger fordi de må gå til den andre siden av prosessoren, og et brødbrett gir ikke nok plass til å bruke ryddig kabling.

Trinn 5: Koble til utgangen

Kabling av utgangen
Kabling av utgangen
Kabling av utgangen
Kabling av utgangen

Fordi den var upopulert, valgte jeg brettet til venstre for Z80 for utgangen. Plasser vippen der og koble dem til strømskinner. Pin 1, /MR (reset) kan kobles direkte til reset -pin på prosessoren, men du kan la den være knyttet til 5V -skinnen. Hvis du gjør dette, vil det bare føre til at det viser søppeldata til første skriving. Legg merke til hvordan brikken har en klokkeinngang på pinne 11. Denne inngangen er rar ved at den aktiveres når pinnen går høyt. Vær også oppmerksom på at denne pinnen IKKE er den samme klokken som driver prosessoren. Denne klokken låser dataene som er hevdet på databussen.

Husker du hvordan vi koblet D0 - D7 på ROM til de samme pinnene på prosessoren? Gjør det samme for denne brikken. D0 går til D0 på databussen og så videre. Pinnene som begynner med en "Q" er utganger. Før vi kabler dem, må vi legge til flere sjetonger. Jeg brukte quad NOR -portene fordi jeg har et rør av dem, og jeg trengte det allerede, men omtrent hvilken som helst chip vil fungere hvis du kobler den riktig. Jeg kunne ha bundet en inngang på alle portene til bakken og brukt de andre inngangene som vel, innganger, men jeg valgte å koble begge inngangene sammen for enkelhets skyld.

Jeg plasserte sjetongene under flip-floppen for å gjøre det lettere å koble direkte uten hoppere, men jeg hadde lite ledning på dette tidspunktet, så det spilte egentlig ingen rolle til slutt. Q0, Q1….. Q7 på vippen går til inngangene på de enkelte portene. Med 4 porter i hver pakke/brikke, trengte jeg 2 pakker og brukte alle porter. Hvis du finner en versjon av flip-flop som kan drive lysdiodene uten å måtte bufres slik, er disse to sjetongene ikke nødvendig. Hvis du bruker porter som en buffer som ikke har inverterte utganger (AND/OR/XOR), kan du koble LEDene som du forventer. Hvis du bruker de samme delene som meg og/eller utgangene er inverterte, bør lysdiodene kobles til som beskrevet nedenfor. Det første bildet viser IC -delen av utgangen.

Bruk 330 Ohm -motstandene til å knytte lysdiodene positive (anode) til 5V -skinnen og koble den negative (katoden) til utgangen til portene. Du kan se på det andre bildet at jeg brukte to motstandsbusser, hver med bare fem interne motstander. Kabling av lysdiodene slik vil få dem til å lyse når utgangen er slått av. Vi gjør dette fordi utgangen er slått av når inngangen er på. Sørg for at du holder oversikt over hvilke porter utgangene dine har fra vippekontrollen. Med mindre lysdiodene dine blir spredt eller rekkefølgen deres er meningsløs, kan det føre til forvirring senere når du spør deg selv om utgangen er feil.

Trinn 6: Koble til inngangen

Kabling av inngangen
Kabling av inngangen

Ta den 74HC374 flip-floppen og legg den et sted. Min var et sted under Z80 mot bunnen av brettet. Husker du sist da vi koblet D0 til D0 og D1 til D1 og så videre? Denne gangen kobler vi Q0 til D0 og Q1 til D1 og så videre. Heldigvis trenger vi ikke legge til noen buffermarker denne gangen, haha. I stedet skal vi koble en 10K Ohm til hver "D" -pinne (D0-D7) og jordet og deretter en knapp til de samme pinnene og 5V-skinnen. Eller du kan bruke en motstandsbuss og redusere delen din mye. En 3x4 knappmatrise (uten matriset utgang !!) vil også hjelpe. Bildet viser hele inngangskretsen sammen med limlogikken (den delen er neste).

Trinn 7: Lim logikk

Vi har en siste ting å koble. Det kalles "limlogikk" fordi det brukes til å dekode styresignaler for å få det hele til å fungere; det er det som holder kretsen sammen. Når prosessoren ønsker å skrive data til utgangen, går både /IORQ og /WR (henholdsvis 20 og 22) lavt, og dataene som sendes, blir hevdet på databussen. Klokkepinnen på begge flip-flops er høy aktiv, noe som betyr at dataene låses når pinnen mottar et høyt signal. Vi bruker en NOR -port og wire /IORQ til en inngang på porten og /WR til den andre inngangen. Når en av dem er høy, noe som betyr at IO-kretsene ikke blir valgt eller at en skriveoperasjon ikke blir utført, forblir utgangen som mater klokken til vippen, lav. Når begge inngangene er lave, og bare når, går utgangen høyt og vippen låser dataene.

Nå må vi koble inngangsvippa. Vi kan koble klokkenålen på omtrent samme måte som den forrige, men ved å bruke /IORQ og /RD. Men i motsetning til den andre flip-floppen, har vi også en /OE-pin som bare må tas lavt når /IORQ og /RD er lave. Vi kan bruke en ELLER -port. Eller vi kan bare ta signalet vi allerede har for klokken og snu det med en av de to inverteringsportene vi allerede har tilgjengelig. På tidspunktet for å oppgi dette instruerbare, hadde jeg ikke en OR -port tilgjengelig, så jeg brukte det sistnevnte alternativet. Ved å bruke det siste alternativet betydde jeg at jeg ikke trengte å legge til flere deler uansett.

Trinn 8: Programmering

Skulle ledningene være riktige og forklaringen min klar, er det bare å få ROM -en programmert. Det er noen få måter å gå frem på. Du kan ta den enkle måten og bestille en ny brikke fra Digikey. Når du bestiller delen, har du muligheten til å laste opp en HEX -fil, og de vil programmere den før de sender den. Bruk HEX- eller OBJ -filene som er vedlagt denne instruksjonsboken, og vent bare på at den kommer i posten. Alternativ 2 er å bygge en programmerer med en Arduino eller noe. Jeg prøvde den ruten, og den klarte ikke å kopiere visse data riktig, og det tok meg uker å finne ut av det. Jeg endte opp med å gjøre alternativ 3, som er å programmere det for hånd og vende brytere for å kontrollere adressen og datalinjene.

Når det er konvertert direkte til OP -koden til prosessoren, hviler hele dette programmet på bare 17 byte adresserom, så programmering for hånd var ikke så forferdelig. Programmet laster inn i registeret B for generelle formål, verdien 00. Register B brukes til å lagre et resultat av forrige tillegg. Siden A -registret er der matematikk skjer, vil vi ikke bruke det til å lagre data.

Når vi snakker om A -registeret, utfører vi en IN -kommando som leser inngangen og lagrer lesedataene i A. Deretter legger vi til innholdet i register B og sender ut resultatet.

Etter det blir register A kopiert til register B. Og så gjør vi en rekke hoppkommandoer. Fordi alle hoppene peker på den nedre byten til adresselinjene, og fordi den øvre byten i hoppinstruksjonen er gitt i det andre argumentet og er "00", kan vi tvinge hvert hopp til å bli fulgt av en NOP. Vi gjør dette for å gi tid mellom å vise utdata og leseinngang for å forhindre utilsiktet inngang. Hvert hopp bruker ti klokkesykluser, og hvert NOP bruker fire. Hvis sløyfen tar for lang tid etter eget ønske, kan du øke klokkehastigheten, eller du kan omprogrammere den for å bruke ett hopp mindre.

Trinn 9: Testing

Hvis du koblet alt riktig og ROM -en er programmert riktig, er det et siste trinn å ta: koble den til og se om den fungerer. Trykk på en knapp og vent noen sekunder. Det tar 81 klokkesykluser for programmet å nå sin første sløyfe, og hver sløyfe tar 74 klokkesykluser.

Hvis det ikke fungerer, må du se etter shorts og ikke -tilkoblede pinner (åpner) og andre ledningsproblemer. Hvis du har valgt å slutte å starte, må du gjøre en manuell tilbakestilling før prosessoren gjør noe. Du kan også feste lysdioder til adressebussen for å se om de oppfører seg. Jeg hadde problemer med det selv, så jeg satte dem direkte på databussen i stedet. Dette tillot meg å se hva som ble kommunisert mellom prosessoren og ROM uten å måtte bekymre meg om ROM -en ble lest riktig, noe som ville ha krevd tidsdiagrammer, og jeg ville bare ikke involvere det. Det viser seg å ha vært et godt valg fordi jeg endelig fanget de problematiske OP -kodene som ble lagret feil.

Anbefalt: