Spisu treści:

Zbuduj komputer z podstawową znajomością elektroniki: 9 kroków (ze zdjęciami)
Zbuduj komputer z podstawową znajomością elektroniki: 9 kroków (ze zdjęciami)

Wideo: Zbuduj komputer z podstawową znajomością elektroniki: 9 kroków (ze zdjęciami)

Wideo: Zbuduj komputer z podstawową znajomością elektroniki: 9 kroków (ze zdjęciami)
Wideo: CO ZROBIĆ PO ZŁOŻENIU KOMPUTERA? | Instalacja Windows, sterowniki, BIOS 🧐 2024, Grudzień
Anonim
Zbuduj komputer z podstawową znajomością elektroniki
Zbuduj komputer z podstawową znajomością elektroniki

Czy kiedykolwiek chciałeś udawać, że jesteś naprawdę mądry i zbudować własny komputer od podstaw? Czy nie wiesz nic o tym, czego potrzeba, aby stworzyć komputer o minimalnym poziomie? Cóż, jest to łatwe, jeśli wiesz wystarczająco dużo o elektronice, aby poprawnie połączyć niektóre układy scalone. Ta instrukcja zakłada, że jesteś dobry w tej części, plus kilka innych rzeczy. A jeśli nie, to nadal nie powinno być zbyt trudne do śledzenia, jeśli wiesz, jak robi się prototypowanie/prototypowanie. Celem tej instrukcji jest uzyskanie działającego „komputera” bez wiedzy o tym, jak działają. Omówię okablowanie i podstawy programowania, a także przedstawię dla Ciebie bardzo krótki program. Więc zacznijmy.

Krok 1: Części i rzeczy

Części i akcesoria
Części i akcesoria
Części i akcesoria
Części i akcesoria

„Komputer” wymaga: zasilania, wejścia, przetwarzania, pamięci i wyjścia. Technicznie rzecz biorąc, będziemy mieli wszystkie te rzeczy. Omówię te rzeczy w tej kolejności.

Do zasilania będziesz potrzebować źródła 5 V (oznaczonego tutaj jako 5 V). Zaleca się, aby było to regulowane źródło, aby przypadkowo nie usmażyć części w obwodzie. Naszym wkładem będą przyciski. Przetwarzanie nie wymaga wyjaśnień; używamy procesora. Pamięć będzie składać się tylko z pamięci ROM. Wewnętrzne rejestry ogólnego przeznaczenia procesora będą wystarczające do wykorzystania jako pamięć RAM. Wyjściem będą diody LED.

1 regulator LM7805C - 5V

1 ZYLOG Z80 - Procesor

1 AT28C64B - EEPROM

1 74LS273 - Japonka Octal D

1 74HC374E - ósemkowa przerzutka w kształcie litery D

3 CD4001BE - bramka poczwórna NOR

1 NE555 – Generator zegara

Rezystor 2 1K Ohm

1 rezystor 10K Ohm

1 sieć rezystorowa 10K Ohm; 8 Bussed LUB 8 Dodatkowe rezystory 10K

1 kondensator 1uF

1 kondensator 100uF

1 przycisk

1 matryca przycisków 3x4 LUB 8 dodatkowych przycisków

8 diod LED - wybór koloru nie ma znaczenia

8 Rezystory 330 Ohm lub sieć rezystorowa

1 naprawdę duża deska do krojenia chleba lub wiele małych

Wiele i wiele drutu

Na moim schemacie mam zainstalowany pendrive SRAM. Nie musisz się nawet o to martwić. Dodałem go tylko do schematu, aby dokładnie odzwierciedlić mój rzeczywisty obwód i dodałem go do obwodu do wykorzystania w przyszłości. Do schematu dodano również poczwórną bramkę OR (74LS36). Dwa nieużywane wejścia bramek są powiązane z VCC, a ich wyjścia pozostają pływające (nie są rysowane). Również nie narysowane ani wymienione powyżej są dwa kondensatory w obwodzie zasilania.

Podaję regulowane 12V do regulatora 5V, aby zasilić całą płytkę stykową. Robi się dość ciepło, więc dołączyłem radiator, aby go schłodzić. Jeśli używasz mniej niż 12V do zasilania regulatora (użyj co najmniej 7V), powinien działać chłodniej.

W Z80 dzieje się magia. Pobiera instrukcje przechowywane w pamięci ROM i wykonuje je. EEPROM przechowuje nasz program do wykonania przez procesor.

Ósemkowy flip-flop, który jest naszym urządzeniem wyjściowym, które blokuje dane na szynie danych do własnego wyjścia. Pozwala nam to zmieniać to, co znajduje się w autobusie, co jest bardzo ważnym krokiem wykonywanym wiele razy na instrukcję, bez zmiany tego, co widzi użytkownik/widz. Flip-flop nie może zasilać prądu wymaganego do zapalenia wyjściowych diod LED, więc zasilają dwa z poczwórnych układów bramek NOR, które działają w celu buforowania 8 linii danych w celu sterowania diodami LED. Ponieważ wyjścia bramek są odwrócone, musimy również podłączyć diody LED do odwrócenia, ale dojdziemy do tego, kiedy do tego dojdziemy. Drugi układ NOR służy do dekodowania logiki, ale używane są tylko trzy bramki.

Przerzutnik ósemkowy używany do wprowadzania danych jest zasadniczo tym samym. Przerzutniki wyjściowe utrzymują swoje wyjście na wysokim lub niskim poziomie, więc nie mogą być używane do sterowania szyną; przechowuje dane w autobusie. Przerzutnik używany do wejścia zastępuje pin /RESET przez /EN, który mniej więcej rozłącza wyjścia (i od) chipa, więc nie przechowuje danych (wyjścia trójstanowe).

Krok 2: Okablowanie obwodów zasilania, zegara i resetowania

Okablowanie obwodów zasilania, zegara i resetowania
Okablowanie obwodów zasilania, zegara i resetowania
Okablowanie obwodów zasilania, zegara i resetowania
Okablowanie obwodów zasilania, zegara i resetowania
Okablowanie obwodów zasilania, zegara i resetowania
Okablowanie obwodów zasilania, zegara i resetowania

UWAGA: W przypadku wszystkich części najpierw okablować szyny zasilające. Ze wszystkich rzeczy, o których należy zapomnieć o okablowaniu, jest znacznie mniej prawdopodobne, że chipy przetrwają zapomniane połączenia zasilania.

Obwód zasilania jest najprostszym do podłączenia obwodem, a następnie odpowiednio obwody resetowania i zegara. Na zdjęciu wejście 12V znajduje się na listwie zasilającej po prawej stronie. Brązowy przewód, chowając pod sobą żółty, podaje napięcie 12V do regulatora. Wyjście regulatora zasila każdą inną listwę zasilającą na płytce stykowej i każda listwa zasilająca ma wspólną masę, ponieważ tak działa elektronika.

Procesor wymaga do działania obwodu zegara. Bez tego będzie po prostu siedzieć w stanie inicjalizacji i nic nie robi. Zegar obsługuje wewnętrzne rejestry przesuwne procesora, dzięki czemu może generować sygnały do wykonania rzeczy. Wystarczy dowolne wejście zegara, nawet prosty rezystor i przycisk. Jednak wykonanie instrukcji zajmuje wiele cykli zegara. Sama instrukcja zapisu na wyjściu zajmuje 12 cykli. Prawdopodobnie nie chcesz siedzieć i naciskać przycisku ponad 100 razy, aby uzyskać tylko jedną pętlę kodu (rzeczywiste liczby znajdują się na końcu instrukcji). Po to właśnie jest NE555. Przełącza za Ciebie i robi to w (stosunkowo) szybkim tempie.

Zanim zaczniesz cokolwiek okablować, możesz iść dalej i dowiedzieć się, jak chcesz ułożyć komponenty na płycie. Mój obwód zegara jest po prostu umieszczony na dole płyty, aby nie przeszkadzał innym komponentom. Zakładamy, że wiesz, jak zrobić podstawowy zegar za pomocą timera. Jeśli tego nie zrobisz, będziesz chciał wyszukać „555 Astable” i postępować zgodnie z samouczkiem. Użyj rezystora 1K, aby przejść między szyną 5V a pinem 7 timera (R1) i 10K między pinem 7 a pinem 2 (R2). Upewnij się, że związałeś pin resetujący, pin 4, z szyną 5 V, aby timer mógł działać. Umieściłem diodę LED na moim wyjściu, abym mógł sprawdzić, czy zegar rzeczywiście działa, ale nie jest potrzebny.

Inną opcją z NE555 jest ustawienie go jako bramki NOT i użycie rezystora 1K, aby związać wyjście z powrotem z wejściem. Zwykle zaleca się użycie do tego 3 timerów, ale stwierdziłem, że tylko 1 powinien działać dobrze. Po prostu wiedz, że jeśli to zrobisz, będzie oscylować z bardzo dużą prędkością i będzie bardzo trudne, a nawet niemożliwe, aby stwierdzić, że diody wyjściowe migają. Ta konfiguracja nazywana jest „oscylatorem pierścieniowym”.

Zauważ, że nie podłączamy jeszcze zegara do procesora. Po prostu to przygotowujemy. Zwróć także uwagę na układ logiczny znajdujący się tuż nad zegarem na obrazku. Został dodany znacznie później i było to jedyne pół-rozsądne miejsce, w którym można go umieścić. Służy do wyboru pamięci RAM/ROM. Ta instrukcja ignoruje pamięć RAM, więc nie będziesz mieć tego układu na swojej płycie.

Teraz podłączamy obwód resetowania. Najpierw musisz znaleźć na to miejsce na swojej planszy. Wybrałem tuż obok zegara. Dodaj swój przycisk do tablicy. Użyj rezystora 1K, aby związać jedną stronę przycisku z szyną 5V. Nasze piny RESET są aktywne nisko, co oznacza, że musimy je trzymać wysoko. Po to jest rezystor. To złącze jest również miejscem, w którym łączą się styki resetowania. Druga strona przycisku trafia prosto na ziemię. Jeśli chcesz zresetować zasilanie, dodaj również kondensator 10uF do tego złącza. Utrzyma napięcie na stykach resetowania wystarczająco długo, aby aktywować obwód resetowania w procesorze i przerzutniku.

Krok 3: Okablowanie Z80

Teraz dochodzimy do sedna sprawy. Podłączymy bestię, którą jest Z80. Na mojej płycie umieściłem Z80 na górze w tej samej części płyty, co obwód resetowania. Jak wspomniano wcześniej, najpierw należy okablować szyny zasilające. 5V idzie do pinu 11 po lewej stronie, a masa jest o jeden pin w dół, ale po prawej stronie. Być może zauważyłeś również nieparzystą szerokość chipa. Spowoduje to, że po jednej stronie płytki stykowej będą 3 otwarte złącza, a po drugiej 2. To tylko sprawia, że podłączenie dodatkowych elementów jest mniej wygodne, jeśli zdecydujesz się to zrobić.

Poniższe numery pinów - zakładam, że wiesz, jak liczyć piny w układzie scalonym - są nieużywanymi wejściami i muszą być podłączone do szyny 5 V: 16, 17, 24, 25.

Pamiętasz nasz zegar? Jego wyjście idzie na pin 6 w z80. Obwód resetowania łączy się z pinem 26. Bez innych komponentów na płycie, to jest tak daleko, jak mogę uzyskać z okablowaniem samego z80. Więcej okablowania zostanie wykonane w późniejszych krokach.

Ponieważ miałem już zbudowany obwód, zanim nawet rozważyłem napisanie tej instrukcji, wstrzymam się z obrazem do następnego kroku.

Krok 4: okablowanie ROM

Okablowanie ROM
Okablowanie ROM

UWAGA: Możesz wstrzymać się z faktycznym umieszczeniem go na planszy, jeśli nadal wymaga programowania (więcej o tym później).

W przypadku pamięci ROM umieściłem ją obok Z80 po prawej stronie, a także przesunęłam o jedną szpilkę w dół na płytce stykowej. To pozwoliło mi bezpośrednio podłączyć magistralę adresową, ale o tym później. AT28C64B jest pamięcią EEPROM, co oznacza, że można ją zaprogramować wielokrotnie, wyłączając i włączając niektóre piny. Nie chcemy, aby nasz EEPROM przypadkowo przeprogramował się, gdy jest w obwodzie. Więc po podłączeniu szyn zasilających, podłącz pin 27 (/WE) do szyny 5 V, aby całkowicie wyłączyć funkcję zapisu.

Mój program jest tak mały, że potrzebowałem tylko 5 dolnych linii adresowych (A0-A4), ale i tak podłączyłem A5, A6 i A7, więc mogę pisać większe programy bez dodatkowej pracy. Dodatkowe linie adresowe (A8-A12) są podłączone bezpośrednio do masy, aby zapobiec niepożądanemu dostępowi do wyższych adresów z wejść pływających. Z nieużywanymi wejściami adresowymi powiązanymi z ziemią i kontrolą zapisu powiązanym z 5 V, okablowanie reszty jest raczej proste. Znajdź A0 na procesorze i podłącz go do A0 w pamięci ROM. Następnie znajdź A1 na procesorze i podłącz go do A1 na ROM. Rób to, dopóki nie połączysz wszystkich adresów razem. Na obrazku moja magistrala adresowa do ROM jest wykonana w niebieskim okablowaniu. Magistrala adresowa prowadząca do pamięci RAM jest wykonana w kolorze czerwonym. Wszystkie te przewody zostały wstępnie przycięte i pozbawione izolacji, ponieważ pojawiły się w zestawie okablowania płytki stykowej i były idealne do tego okablowania.

Po podłączeniu adresów (nazywa się to magistralą adresową), wykonaj dokładnie to samo dla pinów oznaczonych D0, następnie D1, D2 itd. Zrób to dla wszystkich pinów danych (D0 - D7) i masz swoje przewodowa magistrala danych. Prawie skończyliśmy podłączanie ROMu. Znajdź pin /CE ROM (chip enable) i podłącz go do styku 19 procesora, /MREQ (żądanie pamięci), a następnie znajdź /OE ROM (włączanie wyjścia) i podłącz go do styku 21 procesora, /RD (odczyt). Teraz skończyliśmy. Wszystko to odbywa się za pomocą przewodów połączeniowych, ponieważ muszą przejść na drugą stronę procesora, a płytka stykowa nie zapewnia wystarczająco dużo miejsca, aby zastosować takie schludne okablowanie.

Krok 5: Okablowanie wyjścia

Okablowanie wyjścia
Okablowanie wyjścia
Okablowanie wyjścia
Okablowanie wyjścia

Ponieważ była niezamieszkana, jako wyjście wybrałem sekcję płytki po lewej stronie Z80. Umieść tam flip-flop i połącz je z szynami zasilającymi. Pin 1, /MR (reset) można podłączyć bezpośrednio do pinu resetowania procesora, ale można go pozostawić podpiętym do szyny 5V. Spowoduje to wyświetlanie niepotrzebnych danych tylko do pierwszego zapisu. Zwróć uwagę, że układ ma wejście zegara na pinie 11. To wejście jest dziwne, ponieważ jest aktywowane, gdy pin przechodzi w stan wysoki. Zauważ również, że ten pin NIE jest tym samym zegarem, który steruje procesorem. Zegar ten blokuje dane dostarczone do magistrali danych.

Pamiętasz jak podłączyliśmy D0 - D7 na ROM do tych samych pinów na procesorze? Zrób dokładnie to samo dla tego chipa. Jego D0 idzie do D0 na magistrali danych i tak dalej. Piny zaczynające się od „Q” są wyjściami. Zanim je podłączymy, musimy dodać więcej żetonów. Użyłem bramek quad NOR, ponieważ mam ich rurkę i już potrzebowałem, ale każdy układ będzie działał, jeśli prawidłowo go okablowasz. Mogłem powiązać jedno wejście na wszystkich bramkach z masą i użyć innych wejść jako, cóż, wejść, ale dla uproszczenia zdecydowałem się połączyć oba wejścia.

Umieściłem żetony poniżej flip-flop, aby ułatwić bezpośrednie podłączenie bez zworek, ale w tym momencie brakowało mi drutu, więc ostatecznie nie miało to znaczenia. Q0, Q1….. Q7 na przerzutniku trafiają do wejść na poszczególnych bramkach. Mając 4 bramki w każdym opakowaniu/chip, potrzebowałem 2 opakowań i wykorzystałem wszystkie bramki. Jeśli znajdziesz wersję flip-flop, która może sterować diodami LED bez potrzeby buforowania w ten sposób, te dwa układy nie są potrzebne. Jeśli używasz bramek jako bufora, które nie mają odwróconych wyjść (AND/OR/XOR), możesz podłączyć diody LED zgodnie z oczekiwaniami. Jeśli używasz tych samych części co ja i/lub wyjścia są odwrócone, diody LED powinny być połączone w sposób opisany poniżej. Pierwszy obraz przedstawia część IC wyjścia.

Użyj rezystorów 330 Ohm, aby związać dodatnie diody LED (Anoda) z szyną 5 V i podłączyć ujemny (katodę) do wyjścia bramek. Na drugim obrazku widać, że użyłem dwóch szyn rezystorowych, każda z tylko pięcioma wewnętrznymi rezystorami. Okablowanie diod LED w ten sposób sprawi, że będą świecić, gdy wyjście jest wyłączone. Robimy to, ponieważ wyjście jest wyłączone, gdy wejście jest włączone. Upewnij się, że śledzisz, które bramki są twoimi wyjściami z kontrolera flip-flop. O ile diody LED nie zostaną rozproszone lub ich kolejność nie ma znaczenia, utrata ich śledzenia może spowodować później zamieszanie, gdy zadajesz sobie pytanie, dlaczego wyjście jest nieprawidłowe.

Krok 6: Okablowanie wejścia

Okablowanie wejścia
Okablowanie wejścia

Weź ten flip-flop 74HC374 i połóż go gdzieś. Mój znajdował się gdzieś poniżej Z80 w kierunku dolnej części planszy. Pamiętasz ostatni raz, kiedy połączyliśmy D0 z D0 i D1 z D1 i tak dalej? Tym razem łączymy Q0 z D0, Q1 z D1 i tak dalej. Na szczęście tym razem nie musimy dodawać żadnych chipów buforujących, haha. Zamiast tego podłączymy 10K Ohm do każdego pinu "D" (D0-D7) i masy, a następnie przycisk do tych samych pinów i szyny 5V. Możesz też użyć szyny rezystorowej i znacznie zmniejszyć liczbę części. Pomoże też matryca przycisków 3x4 (bez wyjścia matrycowego!!). Obraz przedstawia cały obwód wejściowy wraz z logiką kleju (ta część jest następna).

Krok 7: Logika klejenia

Mamy jeszcze jedną rzecz do przekazania. Nazywa się to „logiką kleju”, ponieważ służy do dekodowania sygnałów sterujących, aby wszystko działało; to utrzymuje obwód razem. Gdy procesor chce zapisać dane na wyjściu, zarówno /IORQ, jak i /WR (odpowiednio 20 i 22) stają się niskie, a wysyłane dane są potwierdzane na szynie danych. Pin zegara na obu przerzutnikach jest aktywny w stanie wysokim, co oznacza, że dane są blokowane, gdy pin odbiera wysoki sygnał. Używamy bramki NOR i podłączamy /IORQ do jednego wejścia bramki i /WR do drugiego wejścia. Gdy albo jest wysoki, co oznacza, że obwody IO nie są wybrane lub nie jest wykonywana operacja zapisu, wyjście zasilające zegar przerzutnika pozostaje niskie. Gdy oba wejścia są w stanie niskim i tylko wtedy, gdy wyjście staje się wysokie, a przerzutnik zatrzaskuje dane.

Teraz musimy podłączyć przerzutnik wejściowy. Możemy podłączyć pin zegara w podobny sposób jak poprzedni, ale używając /IORQ i /RD. Ale w przeciwieństwie do innych flip-flopów, mamy również pin /OE, który musi być niski tylko wtedy, gdy /IORQ i /RD są niskie. Moglibyśmy użyć bramki OR. Albo możemy po prostu wziąć sygnał, który już mamy dla zegara i odwrócić go za pomocą jednej z dwóch bramek odwracających, które już mamy. W momencie podania tej instrukcji nie miałem dostępnej bramki OR, więc użyłem jednej z tych drugich opcji. Użycie tej drugiej opcji oznaczało, że i tak nie musiałem dodawać żadnych dodatkowych części.

Krok 8: Programowanie

Jeśli twoje okablowanie jest poprawne, a moje wyjaśnienie jasne, pozostaje tylko zaprogramować ROM. Można to zrobić na kilka sposobów. Możesz pójść na łatwiznę i zamówić nowy chip z Digikey. Kiedy zamawiasz część, będziesz mieć możliwość przesłania pliku HEX i zaprogramują go przed wysłaniem. Użyj plików HEX lub OBJ dołączonych do tej instrukcji i poczekaj, aż dotrze ona pocztą. Opcja 2 to zbudowanie programatora z Arduino czy coś takiego. Wypróbowałem tę trasę i nie udało się poprawnie skopiować niektórych danych, a rozgryzienie tego zajęło mi tygodnie. Skończyło się na opcji 3, która polega na zaprogramowaniu go ręcznie i przełączeniu przełączników, aby kontrolować linie adresu i danych.

Po przekonwertowaniu bezpośrednio na kod OP procesora, cały ten program spoczywa tylko w 17 bajtach przestrzeni adresowej, więc ręczne programowanie nie było zbyt okropne. Program ładuje do rejestru ogólnego przeznaczenia B wartość 00. Rejestr B służy do przechowywania wyniku poprzedniego dodawania. Ponieważ rejestr A jest miejscem, w którym dzieje się matematyka, nie będziemy go używać do przechowywania danych.

Mówiąc o rejestrze A, wykonujemy polecenie IN, które odczytuje dane wejściowe i przechowuje odczytane dane w A. Następnie dodajemy zawartość rejestru B i wyprowadzamy wynik.

Następnie rejestr A jest kopiowany do rejestru B. Następnie wykonujemy serię poleceń skoku. Ponieważ wszystkie skoki wskazują na niższy bajt linii adresowych, a górny bajt instrukcji skoku jest podany w drugim argumencie i wynosi "00", możemy wymusić, aby po każdym skoku następował NOP. Robimy to, aby dać czas między pokazywaniem danych wyjściowych a odczytaniem danych wejściowych, aby zapobiec przypadkowemu wprowadzeniu. Każdy skok wykorzystuje dziesięć cykli zegara, a każdy NOP wykorzystuje cztery. Jeśli pętla trwa zbyt długo, jak chcesz, możesz zwiększyć szybkość zegara lub przeprogramować ją, aby użyć jednego skoku mniej.

Krok 9: Testowanie

Jeśli wszystko zostało prawidłowo podłączone, a ROM jest poprawnie zaprogramowany, należy wykonać jeden ostatni krok: podłączyć go i sprawdzić, czy działa. Naciśnij przycisk i poczekaj kilka sekund. Program potrzebuje 81 cykli zegara, aby osiągnąć swoją pierwszą pętlę, a każda pętla zajmuje 74 cykle zegara.

Jeśli to nie działa, sprawdź, czy nie ma zwarć i niepodłączonych pinów (otwiera się) oraz innych problemów z okablowaniem. Jeśli zrezygnowałeś z resetowania po włączeniu, będziesz musiał wykonać reset ręczny, zanim procesor cokolwiek zrobi. Możesz również podłączyć diody LED do szyny adresowej, aby sprawdzić, czy się zachowują. Sam miałem z tym problemy, więc zamiast tego przykleiłem je bezpośrednio do magistrali danych. To pozwoliło mi zobaczyć, co jest komunikowane między procesorem a pamięcią ROM, bez konieczności martwienia się o to, czy pamięć ROM jest odczytywana poprawnie, co wymagałoby diagramów czasowych, a po prostu nie chciałem się w to angażować. Okazuje się, że był to dobry wybór, ponieważ w końcu wyłapałem problematyczne kody OP, które były nieprawidłowo przechowywane.

Zalecana: