Innehållsförteckning:

Bygg en dator med grundläggande förståelse för elektronik: 9 steg (med bilder)
Bygg en dator med grundläggande förståelse för elektronik: 9 steg (med bilder)

Video: Bygg en dator med grundläggande förståelse för elektronik: 9 steg (med bilder)

Video: Bygg en dator med grundläggande förståelse för elektronik: 9 steg (med bilder)
Video: Störig granne 2024, Juli
Anonim
Bygg en dator med grundläggande förståelse för elektronik
Bygg en dator med grundläggande förståelse för elektronik

Har du någonsin velat låtsas att du var riktigt smart och bygga din egen dator från grunden? Vet du ingenting om vad som krävs för att göra en dator med minimikrav? Tja, det är lätt om du kan tillräckligt med elektronik för att kasta ihop några IC: er korrekt. Denna instruerbara antar att du är bra på den delen, plus några andra saker. Och om inte, borde det fortfarande inte vara för svårt att följa med om du vet hur breadboarding/prototyping görs. Syftet med denna instruerbara är att få dig en fungerande "dator" utan att veta mycket om hur de fungerar. Jag kommer att täcka kablar och grunderna i programmering, samt ge ett mycket kort program för dig. Så låt oss komma igång.

Steg 1: Delar och saker

Delar och grejer
Delar och grejer
Delar och grejer
Delar och grejer

En "dator" kräver: ström, ingång, bearbetning, minne och utmatning. Tekniskt sett kommer vi att ha alla dessa saker. Jag ska täcka dessa saker i den ordningen.

För ström behöver du en 5 volt (häri märkt som 5V) källa. Det rekommenderas att det är en reglerad källa så att du inte råkar steka delar i din krets. Vår input kommer att vara knappar. Bearbetning är självförklarande; vi använder en processor. Minnet kommer bara att bestå av ROM. Processorns interna register för allmänna ändamål kommer att räcka för att användas som RAM. Utgången kommer att vara lysdioder.

1 LM7805C - 5V regulator

1 ZYLOG Z80 - Processor

1 AT28C64B - EEPROM

1 74LS273 - Octal D flip -flop

1 74HC374E - Octal D Flip -Flop

3 CD4001BE - Quad NOR Gate

1 NE555 - Klockgenerator

2 1K Ohm motstånd

1 10K Ohm motstånd

1 10K Ohm motståndsnätverk; 8 Bussade ELLER 8 Ytterligare 10K motstånd

1 1uF kondensator

1 100uF kondensator

1 Tryckknapp

1 3x4 knappmatris ELLER 8 extra tryckknappar

8 LED - färgval spelar ingen roll

8 330 Ohm motstånd eller motståndsnätverk

1 Riktigt stort brödbräda eller flera små

Mycket och mycket tråd

I min schematik har jag en pinne SRAM installerad. Du behöver inte ens oroa dig för det. Jag lade bara till den i schemat för att exakt återspegla min faktiska krets och jag lade den till kretsen för framtida användning. Dessutom läggs till schematiken en fyr -ELLER -grind (74LS36). De två oanvända grindarnas ingångar är knutna till VCC och deras utgångar lämnas flytande (ej ritade). Inte heller ritade eller listade ovan är två kondensatorer på strömkretsen.

Jag matar in reglerad 12V i 5V -regulatorn för att mata hela brödbrädet. Det blir ganska varmt, så jag monterade ett kylfläns för att kyla det. Om du använder mindre än 12V för att mata regulatorn (använd minst 7V), bör den gå kallare.

Z80 är där magin händer. Den tar instruktioner lagrade i ROM och kör dem. EEPROM lagrar vårt program för processorn att köra.

Den oktala flip-flop som är vår utmatningsenhet som låser data på databussen till sin egen utgång. Detta gör att vi kan ändra vad som finns på bussen, vilket är ett mycket viktigt steg som görs flera gånger per instruktion, utan att ändra vad användaren/tittaren ser. Flip-floppen kan inte driva den ström som krävs för att tända de utgående lysdioderna, så de matas in i två av quad NOR gate-chipsen som fungerar för att buffra de 8 datalinjerna för att driva lysdioderna. Eftersom utgångarna från grindarna är inverterade måste vi också koppla in lysdioderna för att vända, men vi kommer till det när vi kommer till det. Det andra NOR -chipet används för logisk avkodning men endast tre grindar används.

Den oktala flip-flop som används för inmatning är i huvudsak samma sak. Utgångsvipporna håller sin effekt antingen hög eller låg så att den inte kan användas för att driva bussen; det skulle hålla data på bussen. Flip-floppen som används för ingång ersätter /RESET-stiftet med /EN, som mer eller mindre kopplar bort utgångarna från (och från) chipet så att det inte kommer att lagra data (tri-state-utgångar).

Steg 2: Anslut ström, klocka och återställ kretsar

Anslutning av ström, klocka och återställningskretsar
Anslutning av ström, klocka och återställningskretsar
Anslutning av ström, klocka och återställningskretsar
Anslutning av ström, klocka och återställningskretsar
Anslutning av ström, klocka och återställningskretsar
Anslutning av ström, klocka och återställningskretsar

OBS: För alla delar, dra först strömskenorna. Av allt att glömma att köra, kommer chipsen mycket mindre sannolikt att överleva glömda strömanslutningar.

Effektkretsen är den enklaste kretsen att koppla, följt av återställning respektive klockkretsar. På bilden finns 12V -ingången på strömuttaget längst till höger. Den bruna tråden, som gömmer en gul under den, matar 12V till regulatorn. Utgången från regulatorn matar varannan strömkabel på brödbrädet och varje strömkabel delar en gemensam grund eftersom det är så elektronik fungerar.

Processorn kräver en klockkrets för att fungera. Utan den kommer den bara att sitta där i sitt initialiserade tillstånd och göra ingenting. Klockan driver processornas interna skiftregister så att den kan generera signalerna för att göra saker. Varje klockingång kommer att göra, även ett enkelt motstånd och tryckknapp. Men det tar många klockcykler att utföra instruktioner. Instruktionen att skriva till utmatningen tar 12 cykler i sig. Du vill förmodligen inte sitta där och trycka på en knapp 100+ gånger för att få bara en slinga av koden (de faktiska siffrorna är i slutet av den instruerbara). Det är det NE555 är till för. Det gör bytet för dig och det gör det i en (relativt) snabb takt.

Innan du börjar ansluta något kanske du vill gå vidare och ta reda på hur du vill att dina komponenter ska ligga på tavlan. Min klockkrets är liksom bara placerad längst ner på brädet så det skulle vara ur vägen för andra komponenter. Vi antar att du vet hur man gör en grundläggande klocka med timern. Om du inte gör det vill du slå upp "555 Astable" och följa en handledning. Använd 1K -motståndet för att gå mellan 5V -skenan och stift 7 på timern (R1) och 10K mellan stift 7 och stift 2 (R2). Se till att knyta återställningsstiftet, stift 4, till 5V -skenan så att timern kan fungera. Jag satte en lysdiod på min utgång så jag kunde verifiera att klockan faktiskt fungerade, men det behövs inte.

Ett annat alternativ med NE555 är att ställa in den som en NOT -grind och använda ett 1K -motstånd för att binda utgången till ingången. Det rekommenderas vanligtvis att använda 3 timers för att göra detta, men jag fann att bara 1 borde fungera bra. Vet bara att om du gör detta kommer det att svänga med en mycket hög hastighet och det kommer att vara mycket svårt, omöjligt ens, att berätta att utgångs -lysdioderna blinkar. Denna inställning kallas en "ringoscillator".

Observera att vi inte ansluter klockan till processorn ännu. Vi gör det helt enkelt klart. Observera också logikchipet precis ovanför klockan i bilden. Det lades till senare och det var den enda halv-rimliga platsen kvar att placera den. Den används för val av RAM/ROM. Detta instruerbara ignorerar RAM så att du inte kommer att ha det här chipet på ditt kort.

Nu kopplar vi återställningskretsen. Först måste du hitta en plats på ditt bräde för det. Jag valde precis bredvid klockan. Lägg till din knapp på tavlan. Använd ett 1K -motstånd för att knyta ena sidan av knappen till 5V -skenan. Våra RESET -stift är aktiva låga, vilket betyder att vi måste hålla dem höga. Det är vad motståndet är till för. Denna korsning är också där återställningstapparna ansluts. Den andra sidan av knappen går rakt till marken. Om du vill återställa strömmen, lägg till 10uF-kondensatorn till denna korsning också. Det kommer att hålla spänningen på återställningsstiftet tillräckligt lång för att aktivera återställningskretsarna i processorn och vippan.

Steg 3: Anslutning av Z80

Nu kommer vi till nitty-gritty. Vi ska leda vilddjuret som är Z80. På mitt bräda satte jag Z80 högst upp på samma bräddel som återställningskretsen. Som tidigare nämnts, dra strömskenorna först. 5V går till stift 11 till vänster och marken är en stift nere men till höger. Du kanske också har märkt chipets udda bredd. Det gör att du har tre öppna kontakter på ena sidan på brödbrädet och 2 på den andra. Det gör det bara mindre bekvämt att koppla till ytterligare saker om du väljer att göra det.

Följande stiftnummer-jag antar att du vet hur man räknar stift på en IC-är oanvända ingångar och måste vara bundna till 5V-skenan: 16, 17, 24, 25.

Kommer du ihåg vår klocka? Dess utgång går till stift 6 på z80. Återställningskretsen ansluter till stift 26. Utan att ha de andra komponenterna på kortet är detta så långt jag kan få dig med kablarna till själva z80. Mer kabeldragning kommer att göras i senare steg.

Eftersom jag redan hade fått kretsen byggd innan jag ens övervägde att skriva detta instruerbart, kommer jag att hålla ut bilden tills nästa steg.

Steg 4: Anslutning av ROM

Anslutning av ROM
Anslutning av ROM

OBS: Du kanske vill vänta med att faktiskt placera det på brädet om det fortfarande behöver programmeras (mer om det senare).

För ROM placerade jag den bredvid Z80 till höger och förflyttade den också en nål ner på brödbrädet. Detta gjorde att jag kunde ansluta adressbussen direkt, men mer om det senare. AT28C64B är en EEPROM, vilket betyder att den kan programmeras flera gånger genom att slå av och på några stift. Vi vill inte att vår EEPROM av misstag omprogrammerar sig själv när den är i kretsen. Så när du har anslutit dina strömskenor kopplar du in stift 27 (/WE) till 5V -skenan för att helt avaktivera skrivfunktionen.

Mitt program är så litet, jag behövde bara de nedre 5 adressraderna (A0-A4) anslutna, men jag kopplade A5, A6 och A7 ändå så att jag kan skriva större program utan extra arbete. De extra adresslinjerna (A8-A12) är bundna direkt till marken för att förhindra oönskad åtkomst till de högre adresserna från flytande ingångar. Med de oanvända adressingångarna bundna till marken och skrivkontrollen kopplad till 5V är kabeldragning av resten ganska enkelt. Hitta A0 på processorn och koppla den till A0 på ROM. Hitta sedan A1 på processorn och koppla den till A1 på ROM. Gör detta tills du kopplar ihop alla adresser. På bilden görs min adressbuss till ROM i blå ledningar. Adressbussen som går till RAM -minnet görs med röda ledningar. Dessa ledningar var alla förklippta och avskalade när de kom i ett brödbrädeslednings kit och var perfekta för denna ledning.

När du har anslutit adresserna (detta kallas adressbussen) gör du exakt samma sak för stiften märkta D0, sedan D1, D2, etc. Gör detta för alla datastiften (D0 - D7) och du har din databuss kabelansluten. Vi är nästan klara med att koppla in ROM: n. Leta reda på ROM /CE (chip -aktivering) -nålen och anslut den till processorns pin 19, /MREQ (minnesförfrågan) och hitta sedan ROM's /OE (output enable) och anslut den till processorstift 21, /RD (läs). Vi är nu klara. Alla dessa är gjorda med bygelkablar eftersom de måste gå till andra sidan av processorn och en brödbräda ger inte tillräckligt med utrymme för att använda snygga kablar så.

Steg 5: Anslutning av utgången

Anslutning av utgången
Anslutning av utgången
Anslutning av utgången
Anslutning av utgången

Eftersom det var obefolkat valde jag den sektion ombord till vänster om Z80 för utmatningen. Placera vippan där och anslut strömskenorna. Pin 1, /MR (reset) kan anslutas direkt till processorns reset -pin, men du kan låta den vara bunden till 5V -skenan. Om du gör detta kommer det bara att visa skräpdata fram till första skrivningen. Lägg märke till hur chippet har en klockingång på stift 11. Denna ingång är konstig genom att den aktiveras när stiftet går högt. Observera också att denna pin INTE är samma klocka som driver processorn. Denna klocka spärrar de uppgifter som påstås på databussen.

Kommer du ihåg hur vi kopplade D0 - D7 på ROM till samma stift på processorn? Gör exakt samma sak för detta chip. Dess D0 går till D0 på databussen och så vidare. Stiften som börjar med en "Q" är utgångar. Innan vi kopplar dem måste vi lägga till fler marker. Jag använde quad NOR -grindarna eftersom jag har ett rör av dem och jag behövde redan ett, men ungefär vilket chip som helst fungerar om du kopplar det korrekt. Jag kunde ha bundit en ingång på alla portar till marken och använt de andra ingångarna som, väl, ingångar, men jag valde att koppla ihop båda ingångarna för enkelhetens skull.

Jag placerade chipsen under flip-floppen för att göra det lättare att köra direkt utan hoppare men jag fick slut på tråd vid denna tidpunkt så det spelade ingen roll i slutändan. Q0, Q1….. Q7 på vippan går till ingångarna på de enskilda grindarna. Med 4 grindar i varje paket/chip behövde jag 2 paket och använde alla grindar. Om du hittar en version av vippan som kan driva lysdioderna utan att behöva buffras så här, behövs inte dessa två marker. Om du använder grindar som en buffert som inte har inverterade utgångar (OCH/ELLER/XOR), kan du ansluta lysdioderna som du förväntar dig. Om du använder samma delar som jag och/eller utgångarna är inverterade bör lysdioderna vara anslutna enligt beskrivningen nedan. Den första bilden visar IC -delen av utdata.

Använd 330 Ohm -motstånden för att binda lysdioderna positiva (anod) till 5V -skenan och anslut den negativa (katoden) till portarnas utgång. Du kan se på den andra bilden att jag använde två motståndsbussar, var och en med bara fem interna motstånd. Anslutning av lysdioderna så här kommer att tända dem när utgången är avstängd. Vi gör detta eftersom utgången är avstängd när ingången är på. Se till att du håller reda på vilka portar dina utgångar har från vippkontrollen. Om inte dina lysdioder kommer att spridas eller deras ordning är meningslös, kan förlorad koll på dem orsaka förvirring senare när du frågar dig själv varför utgången är fel.

Steg 6: Anslut ingången

Anslutning av ingången
Anslutning av ingången

Ta den 74HC374 vippan och placera den någonstans. Min var någonstans nedanför Z80 mot botten av brädet. Kommer du ihåg förra gången när vi kopplade D0 till D0 och D1 till D1 och så vidare? Den här gången ansluter vi Q0 till D0 och Q1 till D1 och så vidare. Tack och lov behöver vi inte lägga till några buffertchips den här gången, haha. Istället ska vi ansluta en 10K Ohm till varje "D" -stift (D0-D7) och jorda och sedan en knapp till samma stift och 5V-skenan. Eller så kan du använda en motståndsbuss och minska din delräkning mycket. En 3x4 knappmatris (utan matrisutmatning !!) hjälper också. Bilden visar hela ingångskretsen tillsammans med limlogiken (den delen är nästa).

Steg 7: Lim logik

Vi har en sista sak att köra. Det kallas "limlogik" eftersom det används för att avkoda styrsignaler för att allt ska fungera; det är det som håller ihop kretsen. När processorn vill skriva data till utgången går både /IORQ och /WR (20 respektive 22) lågt och data som skickas hävdas på databussen. Klocknålen på båda flip-flopsna är aktiva höga, vilket innebär att data låses när stiftet tar emot en hög signal. Vi använder en NOR -grind och tråd /IORQ till en ingång på porten och /WR till den andra ingången. När endera är hög, vilket innebär att IO-kretsarna inte väljs eller att en skrivoperation inte utförs, förblir utmatningen som matar klockan på vippan låg. När båda ingångarna är låga, och bara när, går utmatningen hög och vippan spärrar data.

Nu måste vi koppla in flip-floppen för ingången. Vi kan koppla klockstiftet på ungefär samma sätt som det föregående, men med /IORQ och /RD. Men till skillnad från den andra vippan har vi också en /OE-stift som bara måste tas lågt när /IORQ och /RD är låga. Vi kan använda en ELLER -grind. Eller så kan vi bara ta den signal vi redan har för klockan och vända den med en av de två inverterande grindarna som vi redan har tillgängliga. Vid tidpunkten för att ange detta instruerbara hade jag inte en OR -grind tillgänglig, så jag använde en det senare alternativet. Att använda det senare alternativet innebar att jag inte behövde lägga till några ytterligare delar ändå.

Steg 8: Programmering

Skulle din ledning vara korrekt och min förklaring klar är det bara att få programmerat ROM: n. Det finns några sätt att gå tillväga. Du kan ta det enkla sättet och beställa ett nytt chip från Digikey. När du beställer delen har du möjlighet att ladda upp en HEX -fil och de kommer att programmera den innan de skickar den. Använd HEX- eller OBJ -filerna som bifogas den här instruktionsboken och vänta tills den kommer med posten. Alternativ 2 är att bygga en programmerare med en Arduino eller något. Jag försökte den routen och det gick inte att kopiera vissa data korrekt och det tog mig veckor att räkna ut det. Jag slutade med att göra alternativ 3, vilket är att programmera det för hand och vända omkopplare för att styra adress- och datalinjerna.

När det väl har konverterats direkt till OP -koden för processorn vilar hela detta program på bara 17 byte adressutrymme, så programmering för hand var inte så hemskt. Programmet laddar in i register B för allmänna ändamål värdet 00. Register B används för att lagra ett resultat av föregående tillägg. Eftersom A -registret är där matematik händer kommer vi inte att använda det för att lagra data.

På tal om A -registret utför vi ett IN -kommando, som läser indata och lagrar läsdata i A. Sedan lägger vi till innehållet i register B och matar ut resultatet.

Därefter kopieras register A till register B. Och sedan gör vi en serie hoppkommandon. Eftersom alla hopp pekar på adressradernas nedre byte och eftersom hoppinstruktionens övre byte ges i det andra argumentet och är "00" kan vi tvinga varje hopp att följas av en NOP. Vi gör detta för att ge tid mellan att visa utmatning och läsinmatning för att förhindra oavsiktlig inmatning. Varje hopp använder tio klockcykler och varje NOP använder fyra. Om slingan tar för lång tid för din smak kan du öka klockhastigheten eller programmera om den för att använda ett hopp mindre.

Steg 9: Testning

Om du har anslutit allt korrekt och din ROM är programmerad korrekt, finns det ett sista steg att ta: anslut den och se om den fungerar. Tryck på en knapp och vänta några sekunder. Det tar 81 klockcykler för att programmet ska nå sin första slinga och varje slinga tar 74 klockcykler.

Om det inte fungerar, kolla efter kortslutningar och oanslutna stift (öppnas) och andra problem med ledningar. Om du valde bort återställning vid start måste du göra en manuell återställning innan processorn gör något. Du kan också ansluta lysdioder till adressbussen för att se om de beter sig. Jag hade själv problem med det, så jag satte dem direkt på databussen istället. Detta tillät mig att se vad som kommunicerades mellan processorn och ROM utan att behöva oroa mig för om ROM -skivan lästes korrekt, vilket skulle ha krävt tidsdiagram och jag ville bara inte involvera det. Visar sig ha varit ett bra val eftersom jag äntligen fångade de problematiska OP -koder som lagrades fel.

Rekommenderad: