Съдържание:

Изградете компютър с основно разбиране за електрониката: 9 стъпки (със снимки)
Изградете компютър с основно разбиране за електрониката: 9 стъпки (със снимки)

Видео: Изградете компютър с основно разбиране за електрониката: 9 стъпки (със снимки)

Видео: Изградете компютър с основно разбиране за електрониката: 9 стъпки (със снимки)
Видео: Жена се върна от 3800 г., за да предупреди 2024, Юли
Anonim
Изградете компютър с основно разбиране за електрониката
Изградете компютър с основно разбиране за електрониката

Искали ли сте някога да се преструвате, че сте наистина умни и да изградите свой собствен компютър от нулата? Не знаете ли нищо за това, което е необходимо, за да направите компютър на минимум? Е, лесно е, ако знаете достатъчно за електрониката, за да съберете правилно някои интегрални схеми. Тази инструкция ще приеме, че сте добри в тази част, плюс няколко други неща. И ако не, все пак не би трябвало да е твърде трудно да го следвате, ако знаете как се прави макет/прототипиране. Целта на тази инструкция е да ви осигури работещ „компютър“, без да знаете много за това как работят. Ще разгледам окабеляването и основите на програмирането, както и ще ви представя много кратка програма. Така че нека започнем.

Стъпка 1: Части и неща

Части и неща
Части и неща
Части и неща
Части и неща

"Компютърът" изисква: захранване, вход, обработка, памет и изход. Технически ще имаме всички тези неща. Ще разгледам тези неща в този ред.

За захранване ще ви е необходим източник от 5 волта (тук обозначен като 5 V). Препоръчва се той да бъде регулиран източник, за да не изпържите случайно части във вашата верига. Нашият вход ще бъде бутони. Обработката е ясна; използваме процесор. Паметта ще се състои само от ROM. Вътрешните регистри на общото предназначение на процесора ще бъдат достатъчни за използване като RAM. Изходът ще бъде светодиоди.

1 LM7805C - 5V регулатор

1 ZYLOG Z80 - Процесор

1 AT28C64B - EEPROM

1 74LS273 - Джапанки с осмична форма D

1 74HC374E - Октална D джапанка

3 CD4001BE - Quad NOR Gate

1 NE555 - Часовник

2 1K Ohm резистор

1 10K ом резистор

1 10K омова резисторна мрежа; 8 шини ИЛИ 8 допълнителни 10K резистора

1 1uF кондензатор

1 100uF кондензатор

1 Натиснете бутона

1 Матрица с бутони 3x4 ИЛИ 8 допълнителни бутона

8 LED - Изборът на цвят няма значение

8 330 ома резистори или резисторна мрежа

1 Наистина голям макет или няколко малки

Много и много тел

В моята схема имам инсталирана пръчка SRAM. Не е нужно дори да се притеснявате за това. Добавих го само към схемата, за да отразя точно моята действителна схема и го добавих към схемата за бъдеща употреба. Към схемата е добавен и четириъгълен ИЛИ порта (74LS36). Входовете на двете неизползвани порти са свързани към VCC, а изходите им остават плаващи (не са изтеглени). Също така не са нарисувани, нито изброени по -горе, има два кондензатора на захранващата верига.

Захранвам регулираните 12V в 5V регулатора, за да захранвам цялата платка. Става доста топло, затова прикачих радиатор, за да го охладя. Ако използвате по -малко от 12V за захранване на регулатора (използвайте поне 7V), той трябва да работи по -хладно.

Z80 е мястото, където се случва магията. Той приема инструкции, съхранявани в ROM и ги изпълнява. EEPROM съхранява нашата програма за изпълнение от процесора.

Окталното тригер, което е нашето изходно устройство, което прихваща данните от шината за данни към собствения си изход. Това ни позволява да променим какво има в шината, което е много важна стъпка, извършена многократно на инструкция, без да променя това, което потребителят/зрителят вижда. Джапанката не може да управлява тока, необходим за осветяване на изходните светодиоди, така че те се подават в два от четирите чипа NOR порта, които действат за буфериране на 8-те линии за данни за задвижване на светодиодите. Тъй като изходът на портите е обърнат, ние също трябва да свържем светодиодите, за да бъде обърнат, но ще стигнем до това, когато стигнем до това. Другият NOR чип се използва за логическо декодиране, но се използват само три порта.

Окталното джапанка, използвано за въвеждане, е по същество едно и също нещо. Изходните джапанки държат изхода си висок или нисък, така че не може да се използва за управление на шината; той ще съхранява данни в шината. Джапанката, използвана за въвеждане, заменя щифта /RESET с /EN, което повече или по-малко прекъсва изходите на (и от) чипа, така че да не задържа данни (триизходни изходи).

Стъпка 2: Окабеляване на веригите за захранване, часовник и нулиране

Окабеляване на вериги за захранване, часовник и нулиране
Окабеляване на вериги за захранване, часовник и нулиране
Окабеляване на вериги за захранване, часовник и нулиране
Окабеляване на вериги за захранване, часовник и нулиране
Окабеляване на вериги за захранване, часовник и нулиране
Окабеляване на вериги за захранване, часовник и нулиране

ЗАБЕЛЕЖКА: За всички части първо свържете проводниците. От всичко, което трябва да забравите за свързване, чиповете ще имат много по -малка вероятност да преживеят забравени връзки за захранване.

Захранващата верига е най -простата верига за свързване, последвана от веригите за нулиране и часовник съответно. На снимката входът 12V е на лентата за захранване вдясно. Кафявият проводник, криещ жълт под него, подава 12V към регулатора. Изходът на регулатора захранва всяка друга захранваща лента на макета и всяка захранваща лента споделя общо, защото така работи електрониката.

Процесорът изисква тактова верига, за да работи. Без него той просто ще седи там в първоначалното си състояние и няма да прави нищо. Часовникът управлява регистрите за вътрешна смяна на процесорите, така че може да генерира сигнали за извършване на неща. Всеки часовник вход ще направи, дори и обикновен резистор и бутон. Но за изпълнението на инструкциите са необходими много цикли на часовника. Инструкцията за запис на изхода отнема 12 цикъла сама по себе си. Вероятно не искате да седнете там и да натиснете бутон 100+ пъти, за да получите само един цикъл от кода (действителните числа са в края на инструкцията). За това е NE555. Той извършва превключването вместо вас и го прави с (относително) бърза скорост.

Преди да започнете да окабелявате нещо, може да искате да продължите и да разберете как искате вашите компоненти да бъдат разположени на дъската. Моята верига за часовник е просто поставена в долната част на дъската, така че да не бъде на пътя на други компоненти. Ще приемем, че знаете как да направите основен часовник с таймера. Ако не го направите, ще искате да потърсите „555 Astable“и да следвате урок. Използвайте 1K резистора, за да преминете между 5V шината и щифт 7 на таймера (R1) и 10K между щифт 7 и щифт 2 (R2). Уверете се, че сте свързали щифта за нулиране, щифт 4 към 5V шината, за да може таймерът да работи. Сложих светодиод на изхода на моя, за да мога да проверя дали часовникът действително е работил, но не е необходим.

Друг вариант с NE555 е да го настроите като НЕ порта и да използвате 1K резистор, за да свържете изхода обратно към входа. Обикновено се препоръчва да използвате 3 таймера, за да направите това, но открих, че само 1 трябва да работи добре. Просто знайте, че ако направите това, той ще се колебае с много висока скорост и ще бъде много трудно, дори невъзможно да се каже, че изходните светодиоди мигат. Тази настройка се нарича „пръстен осцилатор“.

Имайте предвид, че все още не свързваме часовника с процесора. Просто го подготвяме. Обърнете внимание и на логическия чип точно над часовника в изображението. Той беше добавен по-късно и това беше единственото полуразумно място, останало да го постави. Използва се за избор на RAM/ROM. Тази инструкция игнорира RAM, така че няма да имате този чип на дъската си.

Сега свързваме веригата за нулиране. Първо трябва да намерите място на дъската си за това. Избрах точно до часовника. Добавете своя бутон към дъската. Използвайте 1K резистор, за да свържете едната страна на бутона към 5V шината. Нашите щифтове за RESET са активни ниско, което означава, че трябва да ги държим високо. За това е резисторът. Това кръстовище е и мястото, където се свързват щифтовете за нулиране. Другата страна на бутона отива право към земята. Ако искате нулиране при включване, добавете и 10uF кондензатор към това кръстовище. Той ще поддържа напрежението на щифтовете за нулиране достатъчно ниско, за да активира веригата за нулиране в процесора и джапанката.

Стъпка 3: Окабеляване на Z80

Сега стигаме до мръсотията. Ще свържем звяра, който е Z80. На дъската си поставих Z80 в горната част на същата секция на платката като веригата за нулиране. Както бе посочено по -рано, първо свържете проводниците на захранващите релси. 5V отива към щифт 11 отляво и земята е с един щифт надолу, но отдясно. Може би сте забелязали и нечетната ширина на чипа. Това ще доведе до 3 отворени конектора от едната страна на макета и 2 от другата. Това прави по -малко удобно свързването на допълнителни неща, ако решите да го направите.

Следните номера на щифтове-предполагам, че знаете как да броите щифтове на IC-са неизползвани входове и трябва да бъдат свързани към 5V шината: 16, 17, 24, 25.

Помните ли часовника ни? Неговият изход отива към пин 6 на z80. Схемата за нулиране се свързва към щифт 26. Без да има останалите компоненти на платката, това е доколкото мога да ви разбера с окабеляването на самия z80. По -нататъшното окабеляване ще бъде направено в следващите стъпки.

Тъй като вече бях изградил веригата, преди дори да помислих да напиша тази инструкция, ще задържа снимката до следващата стъпка.

Стъпка 4: Окабеляване на ROM

Окабеляване на ROM
Окабеляване на ROM

ЗАБЕЛЕЖКА: Може да искате да спрете действителното му поставяне на дъската, ако все още се нуждае от програмиране (повече за това по -късно).

За ROM -а го поставих до Z80 вдясно и също го изместих с един щифт надолу върху макета. Това ми позволи да свържа адресната шина директно, но повече за това по -късно. AT28C64B е EEPROM, което означава, че може да се програмира няколко пъти чрез изключване и включване на някои пинове. Не искаме нашият EEPROM случайно да се препрограмира, когато е във веригата. Така че, след като закачите захранващите си шини, свържете щифт 27 (/WE) към 5V шината, за да деактивирате напълно функцията за запис.

Програмата ми е толкова малка, имах нужда само от свързване на долните 5 адресни реда (A0-A4), но така или иначе свързах A5, A6 и A7, за да мога да пиша по-големи програми без допълнителна работа. Допълнителните адресни линии (A8-A12) са обвързани директно със земята, за да се предотврати нежелан достъп до по-високите адреси от плаващи входове. С неизползваните входни адреси, свързани към земята и контрола за запис, свързан към 5V, свързването на останалите е доста просто. Намерете A0 на процесора и го свържете към A0 на ROM. След това намерете A1 на процесора и го свържете към A1 на ROM. Правете това, докато не свържете всички адреси заедно. На изображението моята адресна шина към ROM е направена в синьо окабеляване. Адресната шина, преминаваща към RAM, се извършва в червено окабеляване. Всички тези проводници бяха предварително нарязани и оголени, тъй като се предлагаха в комплект за окабеляване на макет и бяха идеални за това окабеляване.

След като получите свързаните адреси (това се нарича адресна шина), направете абсолютно същото за щифтовете с етикет D0, след това D1, D2 и т.н. Направете това за всички пинове за данни (D0 - D7) и имате своя кабелна шина за данни. Почти свършихме свързването на ROM. Намерете щифта на ROM /CE (чип активиране) и го свържете към процесорния щифт 19, /MREQ (заявка за памет) и след това намерете ROM /OE (изход за активиране) и го свържете към процесорен пин 21, /RD (четене). Сега сме готови. Всичко това се прави с джъмперни проводници, защото те трябва да отидат от другата страна на процесора и макет не предлага достатъчно място за използване на чисти кабели по този начин.

Стъпка 5: Окабеляване на изхода

Окабеляване на изхода
Окабеляване на изхода
Окабеляване на изхода
Окабеляване на изхода

Тъй като не беше населен, избрах секцията на дъската вляво от Z80 за изхода. Поставете джапанката там и ги свържете към захранващите шини. Pin 1, /MR (нулиране) може да се свърже директно с нулиращия щифт на процесора, но можете да го оставите вързан към 5V шината. Това ще доведе само до показване на нежелани данни до първото записване. Забележете как чипът има вход за часовник на щифт 11. Този вход е странен, тъй като се активира, когато щифтът се издигне високо. Също така имайте предвид, че този щифт НЕ е същият часовник, който задвижва процесора. Този часовник блокира данните, утвърдени на шината за данни.

Спомняте ли си как свързваме D0 - D7 на ROM към същите щифтове на процесора? Направете абсолютно същото за този чип. Неговият D0 отива в D0 на шината за данни и така нататък. Пиновете, които започват с "Q", са изходи. Преди да ги свържем, трябва да добавим още чипове. Използвах четири порта NOR, защото имам тръба от тях и вече имах нужда от такава, но за всеки чип ще работи, ако го свържете правилно. Можех да свържа един вход на всички врати към земята и да използвам останалите входове като входове, но избрах да свържа двата входа заедно за простота.

Поставих чиповете под джапанката, за да улесня директното свързване без джъмпери, но в този момент нямах достатъчно тел, така че в крайна сметка нямаше значение. Q0, Q1….. Q7 на джапанката отива към входовете на отделните порти. С 4 порта във всеки пакет/чип имах нужда от 2 пакета и използвах всички порти. Ако намерите версия на джапанката, която може да управлява светодиодите, без да се нуждае от буфериране по този начин, тези два чипа не са необходими. Ако използвате порти като буфер, който няма обърнати изходи (AND/OR/XOR), тогава можете да свържете светодиодите, както бихте очаквали. Ако използвате същите части като мен и/или изходите са обърнати, светодиодите трябва да бъдат свързани, както е описано по -долу. Първото изображение показва IC частта на изхода.

Използвайте резисторите 330 Ohm, за да свържете положителните светодиоди (анод) към 5V шината и да свържете отрицателния (катод) към изхода на портите. Можете да видите на второто изображение, че използвах две резисторни шини, всяка от които само с пет вътрешни резистора. Окабеляването на светодиодите по този начин ще ги накара да светнат, когато изходът е изключен. Правим това, защото изходът е изключен, когато входът е включен. Уверете се, че следите кои врати извеждате от контрола за джапанки. Освен ако светодиодите ви не бъдат разпръснати или поръчката им е безсмислена, загубата на следите им може да причини объркване по -късно, когато се запитате защо изходът е грешен.

Стъпка 6: Окабеляване на входа

Окабеляване на входа
Окабеляване на входа

Вземете този джапанка 74HC374 и го поставете някъде. Моят беше някъде под Z80 към дъното на дъската. Помните ли последния път, когато свързвахме D0 към D0 и D1 към D1 и така нататък? Този път свързваме Q0 към D0 и Q1 към D1 и така нататък. За щастие този път не е нужно да добавяме буферни чипове, хаха. Вместо това ще свържем 10K Ohm към всеки "D" щифт (D0-D7) и маса и след това бутон към същите щифтове и 5V релсата. Или можете да използвате резисторна шина и да намалите много броя на частите си. Матрица с бутони 3x4 (без матричен изход !!) също ще помогне. Изображението показва цялата входна верига заедно с логиката на лепилото (тази част е следващата).

Стъпка 7: Лепилна логика

Имаме едно последно нещо, което да свържем. Нарича се „логика на лепилото“, защото се използва за декодиране на управляващи сигнали, за да работи всичко; това е, което държи веригата заедно. Когато процесорът иска да запише данни към изхода, и /IORQ и /WR (съответно 20 и 22) се понижават и изпратените данни се утвърждават на шината за данни. Часовникът на двата джапанки е активен високо, което означава, че данните се блокират, когато щифтът получава висок сигнал. Използваме NOR порта и проводник /IORQ към единия вход на портата и /WR към другия вход. Когато едно от двете е високо, което означава, че IO схемите не са избрани или не се извършва операция за запис, изходът, подаващ часовника на джапанката, остава нисък. Когато и двата входа са ниски и само когато, изходът става висок и джапанката блокира данните.

Сега трябва да свържем входния тригер. Можем да свържем щифта на часовника по почти същия начин като предишния, но използвайки /IORQ и /RD. Но за разлика от други джапанки, ние също имаме /OE щифт, който трябва да бъде свален само когато /IORQ и /RD са ниски. Бихме могли да използваме ИЛИ порта. Или можем просто да вземем сигнала, който вече имаме за часовника, и да го обърнем с една от двете инвертиращи порти, които вече имаме на разположение. По време на заявяването на тази инструкция не разполагах с ИЛИ порта, така че използвах последната опция. Използването на последната опция означаваше, че така или иначе не е нужно да добавям допълнителни части.

Стъпка 8: Програмиране

Ако окабеляването ви е правилно и обяснението ми е ясно, остава само да програмирате ROM. Има няколко начина да направите това. Можете да поемете по лесния начин и да поръчате нов чип от Digikey. Когато поръчвате частта, ще имате възможност да качите HEX файл и те ще го програмират, преди да го изпратят. Използвайте HEX или OBJ файловете, приложени към тази инструкция, и просто изчакайте да пристигне по пощата. Вариант 2 е да се изгради програмист с Arduino или нещо подобно. Опитах този маршрут и той не успя да копира определени данни правилно и ми отне седмици, за да разбера това. В крайна сметка направих вариант 3, който е да го програмирам на ръка и да превключвам превключвателите, за да контролирам адресите и линиите за данни.

Веднъж преобразувана директно в OP кода на процесора, цялата тази програма лежи само в 17 байта адресно пространство, така че ръчното програмиране не беше твърде ужасно. Програмата зарежда в регистър с общо предназначение B стойността на 00. Регистър B се използва за съхраняване на резултат от предишното добавяне. Тъй като регистър А е мястото, където се случва математиката, няма да го използваме за съхраняване на данни.

Говорейки за регистър A, изпълняваме команда IN, която чете входа и съхранява прочетените данни в A. След това добавяме съдържанието на регистър B и извеждаме резултата.

След това регистър А се копира в регистър В. И след това правим поредица от команди за скок. Тъй като всички скокове сочат към долния байт на адресните редове и тъй като горният байт на инструкцията за прескачане е даден във втория аргумент и е "00", можем да принудим всеки скок да бъде последван от NOP. Правим това, за да дадем време между показване на изхода и четене на вход, за да предотвратим случайно въвеждане. Всеки скок използва десет тактови цикъла и всеки NOP използва четири. Ако цикълът отнема твърде много време, можете да увеличите тактовата честота или да го препрограмирате, за да използвате един скок по -малко.

Стъпка 9: Тестване

Ако сте свързали всичко правилно и вашият ROM е програмиран правилно, трябва да направите една последна стъпка: включете го и вижте дали работи. Натиснете бутон и изчакайте няколко секунди. Необходим е 81 тактов цикъл, за да може програмата да достигне първия си цикъл, а всеки цикъл отнема 74 тактови цикъла.

Ако не работи, проверете за къси панталони и несвързани щифтове (отваря се) и други проблеми с окабеляването. Ако сте се отказали от нулиране при включване, ще трябва да направите ръчно нулиране, преди процесорът да направи нещо. Можете също да прикачите светодиоди към адресната шина, за да видите дали се държат. Аз самият имах проблеми с това, затова вместо това ги залепих директно в шината за данни. Това ми позволи да видя какво се комуникира между процесора и ROM без да се притеснявам дали ROM се чете правилно, което би изисквало времеви диаграми и просто не исках да се забърквам в това. Оказа се, че беше добър избор, защото най -накрая улових проблемните OP кодове, които бяха съхранени неправилно.

Препоръчано: