Оглавление:

Сборка компьютера с базовыми знаниями электроники: 9 шагов (с изображениями)
Сборка компьютера с базовыми знаниями электроники: 9 шагов (с изображениями)

Видео: Сборка компьютера с базовыми знаниями электроники: 9 шагов (с изображениями)

Видео: Сборка компьютера с базовыми знаниями электроники: 9 шагов (с изображениями)
Видео: Как собрать компьютер самому, подробная сборка ПК 2024, Ноябрь
Anonim
Создайте компьютер с базовыми знаниями в области электроники
Создайте компьютер с базовыми знаниями в области электроники

Вы когда-нибудь хотели притвориться действительно умным и построить собственный компьютер с нуля? Вы ничего не знаете о том, что нужно для создания минимального компьютера? Что ж, это легко, если вы знаете достаточно об электронике, чтобы правильно собрать несколько микросхем. Это руководство предполагает, что вы хорошо разбираетесь в этой части, а также в некоторых других вещах. А если нет, то все равно будет нетрудно следовать, если вы знаете, как выполняется макетирование / прототипирование. Цель этого руководства - дать вам рабочий «компьютер», не зная толком, как они работают. Я расскажу о подключении и основах программирования, а также предоставлю вам очень короткую программу. Итак, приступим.

Шаг 1: Детали и прочее

Запчасти и прочее
Запчасти и прочее
Запчасти и прочее
Запчасти и прочее

«Компьютер» требует: питания, ввода, обработки, памяти и вывода. Технически все это у нас будет. Я расскажу об этом в таком порядке.

Для питания вам понадобится источник на 5 В (здесь обозначен как 5 В). Рекомендуется использовать регулируемый источник, чтобы случайно не поджарить детали в вашей цепи. Нашим входом будут кнопки. Обработка не требует пояснений; мы используем процессор. Память будет состоять только из ПЗУ. Внутренних регистров общего назначения процессора будет достаточно для использования в качестве ОЗУ. На выходе будут светодиоды.

1 LM7805C - Регулятор 5 В

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

1 AT28C64B - EEPROM

1 74LS273 - восьмеричный D-триггер

1 74HC374E - восьмеричный D-триггер

3 CD4001BE - Quad NOR Gate

1 NE555 - тактовый генератор

2 резистора 1 кОм

1 резистор 10 кОм

1 сеть резисторов 10 кОм; 8 шинных ИЛИ 8 дополнительных резисторов 10 кОм

1 конденсатор емкостью 1 мкФ

1 конденсатор 100 мкФ

1 кнопка

1 матрица кнопок 3x4 ИЛИ 8 дополнительных кнопок

8 светодиодов - выбор цвета не имеет значения

8 резисторов 330 Ом или резисторная сеть

1 действительно большая макетная плата или несколько маленьких

Много-много проволоки

В моей схеме установлена память SRAM. Вам не нужно даже беспокоиться об этом. Я только добавил его в схему, чтобы точно отразить мою фактическую схему, и добавил в схему для будущего использования. Также к схеме добавлен четырехъядерный вентиль ИЛИ (74LS36). Входы двух неиспользуемых вентилей привязаны к VCC, а их выходы оставлены плавающими (не нарисованы). Также не показаны и не перечислены два конденсатора в силовой цепи.

Я подаю стабилизированное напряжение 12 В на регулятор 5 В, чтобы запитать всю макетную плату. Становится довольно тепло, поэтому я прикрепил радиатор, чтобы он остыл. Если вы используете менее 12 В для питания регулятора (используйте не менее 7 В), он должен охладиться.

Z80 - это то место, где происходит волшебство. Он берет инструкции, хранящиеся в ПЗУ, и выполняет их. В EEPROM хранится наша программа для выполнения процессором.

Восьмеричный триггер, являющийся нашим устройством вывода, фиксирует данные на шине данных на собственном выходе. Это позволяет нам изменять то, что находится на шине, что является очень важным шагом, выполняемым несколько раз за одну инструкцию, без изменения того, что видит пользователь / зритель. Триггер не может управлять током, необходимым для зажигания выходных светодиодов, поэтому они подаются на две из четырех микросхем затвора ИЛИ-НЕ, которые действуют для буферизации 8 линий данных для управления светодиодами. Поскольку их выходы ворот инвертированы, мы также должны подключить светодиоды, чтобы они были инвертированы, но мы подойдем к этому, когда дойдем до этого. Другой чип ИЛИ-НЕ используется для логического декодирования, но используются только три логических элемента.

Восьмеричный триггер, используемый для ввода, по сути, то же самое. Выходные триггеры удерживают свой выходной сигнал либо высоким, либо низким, поэтому его нельзя использовать для управления шиной; он будет хранить данные на шине. Триггер, используемый для входа, заменяет вывод / RESET на / EN, который более или менее отключает выходы (и от) чипа, поэтому он не будет хранить данные (выходы с тремя состояниями).

Шаг 2: Подключение цепей питания, часов и сброса

Подключение цепей питания, часов и сброса
Подключение цепей питания, часов и сброса
Подключение цепей питания, часов и сброса
Подключение цепей питания, часов и сброса
Подключение цепей питания, часов и сброса
Подключение цепей питания, часов и сброса

ПРИМЕЧАНИЕ. Для всех деталей сначала подключите шины питания. Из всего, что нужно забыть о проводке, микросхемы с гораздо меньшей вероятностью переживут забытые подключения к источнику питания.

Схема питания является наиболее простой схемой для подключения, за ней следуют схемы сброса и синхронизации, соответственно. На рисунке вход 12 В находится на удлинителе справа. Коричневый провод, под которым прячется желтый, подает 12В на регулятор. Выход регулятора питает все остальные удлинители на макетной плате, и все удлинители имеют общую землю, потому что так работает электроника.

Для работы процессора требуется тактовая схема. Без него он просто будет сидеть в своем инициализированном состоянии и ничего не делать. Часы управляют внутренними регистрами сдвига процессора, поэтому они могут генерировать сигналы для выполнения каких-либо действий. Подойдет любой вход часов, даже простой резистор и кнопка. Но для выполнения инструкций требуется много тактов. Сама инструкция записи на выход занимает 12 циклов. Вероятно, вы не захотите сидеть и нажимать кнопку более 100 раз, чтобы получить только один цикл кода (фактические числа находятся в конце инструкции). Вот для чего нужен NE555. Он выполняет переключение за вас, и делает это (относительно) быстро.

Прежде чем начать что-либо подключать, вы можете пойти дальше и выяснить, как вы хотите разместить свои компоненты на плате. Моя схема часов как бы просто помещена внизу платы, чтобы не мешать другим компонентам. Предположим, вы знаете, как сделать простые часы с таймером. Если вы этого не сделаете, вам нужно будет найти "555 Astable" и следовать руководству. Используйте резистор 1 кОм, чтобы установить между шиной 5 В и контактом 7 таймера (R1), и резистором 10 кОм между контактом 7 и контактом 2 (R2). Обязательно привяжите контакт сброса, контакт 4, к шине 5 В, чтобы таймер мог работать. Я поставил светодиод на свой выход, чтобы убедиться, что часы действительно работают, но в этом нет необходимости.

Другой вариант с NE555 - настроить его как вентиль НЕ и использовать резистор 1 кОм, чтобы связать выход обратно со входом. Обычно для этого рекомендуется использовать 3 таймера, но я обнаружил, что только 1 должен работать нормально. Просто знайте, что если вы это сделаете, он будет колебаться с очень высокой скоростью, и будет очень трудно, даже невозможно сказать, что выходные светодиоды мигают. Эта установка называется «кольцевым генератором».

Обратите внимание, что мы еще не подключаем часы к процессору. Мы просто готовим. Также обратите внимание на логическую микросхему прямо над часами на изображении. Он был добавлен позже, и это было единственное, что оставалось почти разумным местом для его размещения. Он используется для выбора RAM / ROM. Эта инструкция игнорирует ОЗУ, поэтому у вас не будет этой микросхемы на вашей плате.

Теперь подключаем схему сброса. Сначала вам нужно найти для него место на доске. Я выбрал прямо у часов. Добавьте свою кнопку на доску. Используйте резистор 1 кОм, чтобы привязать одну сторону кнопки к шине 5 В. Наши контакты RESET имеют низкий уровень активности, что означает, что нам нужно удерживать их на высоком уровне. Вот для чего нужен резистор. Это соединение также является местом соединения контактов сброса. Другая сторона кнопки идет прямо на землю. Если вы хотите сбросить питание при включении, добавьте к этому переходу конденсатор емкостью 10 мкФ. Он будет поддерживать низкое напряжение на выводах сброса достаточно долго, чтобы активировать схему сброса в процессоре и триггере.

Шаг 3: Подключение Z80

Теперь мы переходим к самому главному. Мы подключим зверя, которым является Z80. На моей плате я поместил Z80 вверху на той же секции платы, что и схема сброса. Как было сказано ранее, сначала подключите силовые шины. 5V идет на контакт 11 слева, а земля на один контакт ниже, но справа. Вы также могли заметить нечетную ширину чипа. Это приведет к тому, что у вас будет 3 открытых разъема с одной стороны на макетной плате и 2 с другой. Это только делает менее удобным подключение дополнительных устройств, если вы решите это сделать.

Следующие номера контактов - я полагаю, вы знаете, как считать контакты на ИС - являются неиспользуемыми входами и должны быть привязаны к шине 5 В: 16, 17, 24, 25.

Помните наши часы? Его выход идет на контакт 6 на z80. Схема сброса подключается к контакту 26. Без других компонентов на плате это все, что я могу сделать с проводкой самого z80. Дополнительная проводка будет сделана на более поздних этапах.

Поскольку я уже построил схему еще до того, как я даже подумал о написании этого руководства, я отложу рисунок до следующего шага.

Шаг 4: Подключение ПЗУ

Подключение ПЗУ
Подключение ПЗУ

ПРИМЕЧАНИЕ: вы можете отложить фактическое размещение его на доске, если он все еще нуждается в программировании (подробнее об этом позже).

Что касается ПЗУ, я поместил его рядом с Z80 справа, а также сдвинул на один штифт вниз на макетной плате. Это позволило мне подключить адресную шину напрямую, но об этом позже. AT28C64B является EEPROM, что означает, что его можно программировать несколько раз, выключая и включая некоторые контакты. Мы не хотим, чтобы наша EEPROM случайно перепрограммировала себя, когда она находится в цепи. Итак, как только вы подключите шины питания, подключите контакт 27 (/ WE) к шине 5 В, чтобы полностью отключить функцию записи.

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

После того, как вы подключите адреса (это называется адресной шиной), проделайте то же самое с выводами, помеченными D0, затем D1, D2 и т. Д. Проделайте это для всех выводов данных (D0 - D7), и вы получите свой проводная шина данных. Мы почти закончили подключение ПЗУ. Найдите контакт ROM / CE (включение микросхемы) и подключите его к контакту 19 процессора, / MREQ (запрос памяти), а затем найдите в ПЗУ / OE (разрешение вывода) и подключите его к контакту 21 процессора, / RD (чтение). Теперь мы закончили. Все это делается с помощью перемычек, потому что они должны идти на другую сторону процессора, а на макетной плате недостаточно места для такой аккуратной проводки.

Шаг 5: Подключение выхода

Подключение выхода
Подключение выхода
Подключение выхода
Подключение выхода

Поскольку он не был заполнен, я выбрал для вывода часть платы слева от Z80. Поместите туда триггер и подключите к ним шины питания. Контакт 1, / MR (сброс) может подключаться непосредственно к контакту сброса процессора, но вы можете оставить его привязанным к шине 5 В. Это приведет к отображению нежелательных данных только до первой записи. Обратите внимание на то, что у микросхемы есть вход синхронизации на выводе 11. Этот вход необычен тем, что он активируется, когда вывод становится высоким. Также обратите внимание, что этот вывод НЕ является той же частотой, которая управляет процессором. Эти часы фиксируют данные, поступающие на шину данных.

Помните, как мы подключали D0 - D7 на ПЗУ к тем же контактам на процессоре? Сделайте то же самое для этого чипа. Его D0 переходит к D0 на шине данных и так далее. Контакты, начинающиеся с Q, являются выходами. Прежде чем мы их подключим, нам нужно добавить больше микросхем. Я использовал четырехъядерные вентили ИЛИ-НЕ, потому что у меня их целая трубка, и она мне уже нужна, но почти любой чип будет работать, если вы подключите его правильно. Я мог бы связать один вход на всех воротах с землей, а другие использовать, ну, в общем, как входы, но для простоты я решил соединить оба входа вместе.

Я разместил микросхемы под триггером, чтобы упростить подключение напрямую без перемычек, но в этот момент у меня кончился провод, поэтому в конечном итоге это не имело большого значения. Q0, Q1….. Q7 на триггере поступает на входы отдельных вентилей. С 4 гейтами в каждом пакете / чипе мне понадобилось 2 пакета и я использовал все гейты. Если вы найдете версию триггера, которая может управлять светодиодами без такой буферизации, эти две микросхемы не нужны. Если вы используете вентили в качестве буфера, у которого нет инвертированных выходов (И / ИЛИ / ИСКЛЮЧИТЕЛЬНОЕ ИЛИ), вы можете подключить светодиоды, как и следовало ожидать. Если вы используете те же части, что и я, и / или выходы инвертированы, светодиоды должны быть подключены, как описано ниже. Первое изображение показывает часть выхода IC.

Используйте резисторы 330 Ом, чтобы связать положительный полюс (анод) светодиодов с шиной 5 В и подсоединить отрицательный (катод) к выходу затворов. На втором изображении вы можете видеть, что я использовал две шины резисторов, каждая из которых имеет только пять внутренних резисторов. При таком подключении светодиодов они загораются при выключенном выходе. Мы делаем это, потому что выход выключен, когда вход включен. Обязательно следите за тем, какие ворота выходят из триггера. Если ваши светодиоды не будут разбросаны или их порядок не имеет смысла, потеря их отслеживания может вызвать путаницу позже, когда вы спросите себя, почему выходной сигнал неправильный.

Шаг 6: Подключение входа

Подключение входа
Подключение входа

Возьмите этот триггер 74HC374 и положите его куда-нибудь. Мой был где-то ниже Z80, ближе к низу платы. Помните прошлый раз, когда мы соединили D0 с D0, D1 с D1 и так далее? На этот раз мы подключаем Q0 к D0, а Q1 к D1 и так далее. К счастью, на этот раз нам не нужно добавлять какие-либо буферные чипы, ха-ха. Вместо этого мы собираемся подключить 10 кОм к каждому контакту «D» (D0-D7) и земле, а затем кнопку к тем же контактам и шине 5 В. Или вы можете использовать резисторную шину и значительно сократить количество деталей. Поможет и кнопочная матрица 3х4 (без матричного вывода !!). Изображение показывает всю входную схему вместе с логикой клея (эта часть будет следующей).

Шаг 7: приклеиваем логику

Нам нужно связать еще кое-что. Это называется «связующей логикой», потому что она используется для декодирования сигналов управления, чтобы все это работало; это то, что скрепляет цепь. Когда процессор хочет записать данные на выход, оба параметра / IORQ и / WR (20 и 22 соответственно) переходят в низкий уровень, и отправляемые данные утверждаются на шине данных. Вывод синхронизации на обоих триггерах активен на высоком уровне, что означает, что данные фиксируются, когда вывод получает сигнал высокого уровня. Мы используем вентиль ИЛИ-НЕ и провод / IORQ к одному входу гейта и / WR к другому входу. Когда любой из них имеет высокий уровень, что означает, что схемы ввода-вывода не выбраны или операция записи не выполняется, выход, питающий тактовую частоту триггера, остается низким. Когда на обоих входах низкий уровень, и только тогда, когда на выходе высокий уровень и триггер фиксирует данные.

Теперь нам нужно подключить входной триггер. Мы можем подключить тактовый вывод почти так же, как и предыдущий, но используя / IORQ и / RD. Но в отличие от других триггеров, у нас также есть вывод / OE, который нужно брать на низком уровне только тогда, когда / IORQ и / RD низки. Мы могли бы использовать ворота ИЛИ. Или мы могли бы просто взять сигнал, который у нас уже есть для часов, и инвертировать его с помощью одного из двух инвертирующих вентилей, которые у нас уже есть. На момент изложения этой инструкции у меня не было доступного логического элемента ИЛИ, поэтому я использовал один из последних вариантов. Использование последнего варианта означало, что мне все равно не нужно было добавлять какие-либо дополнительные детали.

Шаг 8: программирование

Если ваша проводка правильная, а мои объяснения ясны, все, что осталось, - это запрограммировать ПЗУ. Есть несколько способов сделать это. Вы можете пойти по легкому пути и заказать новый чип у Digikey. Когда вы заказываете деталь, у вас будет возможность загрузить файл HEX, и они запрограммируют его перед отправкой. Используйте файлы HEX или OBJ, прикрепленные к этому руководству, и просто дождитесь его получения по почте. Вариант 2 - собрать программатор с Arduino или чем-то в этом роде. Я попробовал этот маршрут, и он не смог правильно скопировать определенные данные, и мне потребовались недели, чтобы понять это. В итоге я выбрал вариант 3, который заключается в том, чтобы программировать его вручную и переключать переключатели для управления строками адреса и данных.

После преобразования непосредственно в OP-код процессора вся эта программа располагается всего в 17 байтах адресного пространства, поэтому программирование вручную не было таким уж ужасным. Программа загружает в регистр общего назначения B значение 00. Регистр B используется для хранения результата предыдущего добавления. Поскольку математические вычисления выполняются в регистре A, мы не будем использовать его для хранения данных.

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

После этого регистр A копируется в регистр B. И затем мы выполняем серию команд перехода. Поскольку все переходы указывают на младший байт адресных строк, и поскольку старший байт инструкции перехода указан во втором аргументе и равен «00», мы можем заставить каждый переход сопровождаться NOP. Мы делаем это, чтобы дать время между отображением вывода и чтением ввода, чтобы предотвратить случайный ввод. Каждый переход использует десять тактов, а каждый NOP - четыре. Если цикл длится слишком долго, вы можете увеличить тактовую частоту или перепрограммировать его, чтобы использовать на один прыжок меньше.

Шаг 9: Тестирование

Если вы все подключили правильно и ваше ПЗУ правильно запрограммировано, нужно сделать еще один последний шаг: подключите его и посмотрите, работает ли он. Нажмите кнопку и подождите несколько секунд. Программе требуется 81 тактовый цикл, чтобы достичь своего первого цикла, а каждый цикл занимает 74 тактовых цикла.

Если это не сработает, проверьте, нет ли коротких замыканий и неподключенных контактов (обрывов), а также других проблем с проводкой. Если вы отказались от сброса при включении, вам нужно будет выполнить сброс вручную, прежде чем процессор что-либо сделает. Вы также можете подключить светодиоды к адресной шине, чтобы узнать, работают ли они. У меня самого были проблемы с этим, поэтому я вставил их напрямую в шину данных. Это позволило мне увидеть, что обменивается данными между процессором и ПЗУ, не беспокоясь о том, правильно ли читается ПЗУ, для чего потребовались бы временные диаграммы, а я просто не хотел вмешиваться в это. Оказалось, что это был хороший выбор, потому что я наконец обнаружил проблемные коды OP, которые были сохранены неправильно.

Рекомендуемые: