четверг, 31 декабря 2020 г.

Cobalt-68 История проекта

Предыдущая заметка: Cobalt-68: Предыстория проекта
Проект на GitLab: https://gitlab.com/alkid1/cobalt68

Проект по созданию компьютера занял у меня почти три года неспешной работы с большими перерывами. Это был увлекательный квест воина паяльника и клавиатуры, который научил меня многому в отношении создания систем. Особенностью этого проект является то, что я одновременно создавал и отлаживал и аппаратную и программную части системы, которые очень тесно связаны между собой. И если с программной частью для меня всё было более-менее понятно (жизнь в этом смысле меня изрядно покидала, поэтому я не боюсь ассемблера и железа), то разработка и отладка аппаратуры для меня во многом оставалась полем поисков и экспериментов.

Подготовка и заточка инструмента

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

И так, чем же я вооружился для того, чтобы одолеть все трудности? Здесь я опишу аппаратный инструментарий, про мои приключения в разработке программ будет написан отдельный эпос.

Инструментарий проектирования

Начинать разработку надо с проектирования схемы. Раньше мне хватало бумаги, но теперь я решил освоить какую-нибудь CAD-систему. Я перебрал несколько разных вариантов программ, но в итоге остановил свой выбор на онлайн-сервисе EasyEDA. Он привлёк меня своей простотой в работе и отсутствием необходимости устанавливать программу на свой компьютер. Бесплатный аккаунт даёт достаточно возможностей для неискушённого пользователя: можно  рисовать схемы, разводить платы и заказывать их у производителя. Возможно, в будущем я перейду на какой-нибудь Proteus, но пока меня полностью устраивает и этот инструмент.

TIP: При пайке с тыльной стороны платы очень удобно иметь схему, зеркально отражённую по вертикальной оси, тогда на ней расположение контактов у микросхем будет таким же, как и при взгляд с тыльной стороны платы. Это очень сильно облегчает процесс пайки проводков при макетированнии. EasyEDA позволяет получить такую схему с небольшим количеством усилий.

TIP2: EasyEDA имеет функцию автороутинга - автоматической разводки печатных плат. Но доступный в облаке роутер часто бывает недоступен из-за перегрузки. Редактор даёт возможность развернуть роутер локально и использовать мощности компьютера. Очень рекомендую сделать сделать это сразу.

Логический анализатор

Внутри компьютера очень много разных линий соединения по котором с частотой в несколько мегагерц бегают туда-сюда сигналы. Чтобы понять, как работает система, и что в ней не так. надо уметь заглянуть "внутрь"  этого процесса. Отладку предыдущих схем я осуществлял при помощи светодиодов и режима ручного тактирования. Это адски трудоёмкий способ. 


К счастью, есть устройства, позволяющие заглянуть внутрь системы - это логические анализаторы (иногда их называют шинными анализаторами). Доступные в российских магазинах системы неприятно удивляют своей ценой. К счастью есть китайцы и сделанные ими клоны, которые можно приобрести за вполне разумные деньги. Я выбрал Saleae Logic-16 - 16-канальный анализатор с подключением к компьютеру через USB. У него нет многих функций дорогих профессиональных моделей, зато его можно купить за 2500 рублей (на момент написания заметки).

Среди полезных фишек его программного обеспечения - возможность декодирования некоторых протоколов из данных о перехваченных сигналах. Мне очень помогла возможность декодировать UART, SPI, и просто параллельные шины данных.

Программаторы

Микроконтроллер и ПЗУшки компьютера надо чем-то программировать. Традиционно я использовал свой старый добрый WizardProg 87i (российская нелицензионная копия китайского(!) программатора TL866 MiniPro). Он умеет и в параллельное программирование и в ISP-программирование, но его программная оболочка не умеет выполнять операции из командной строки. Без этого заливка прошивки становится операцией в несколько ручных действий. 

Чтобы закрыть этот "пробел" я прикупил копеечный USBAsp 2.0, который можно использовать с утилитой AVRDude. Запуск этой утилиты можно прописать в External Tools в Atmel Studio и прошивать микроконтроллер в один клик.

Паяльная ванна

Предыдущий эксперимент с Z80 показал, что компьютер на макетной плате - это крайне нежное создание, которое имеет тенденцию отказывать в самые неожиданные моменты из-за плохих контактов. Очень увлекательно было несколько раз убить часы на поиск ошибки в программе только чтобы понять, что одна из ножек микросхемы плохо контачит. Поэтому я решил, что в этот раз макетировать буду сразу с использованием перфорированных макетных плат для пайки. 

Чтобы спаять более-менее сложную схему и не получить комок лапши на плате, надо использовать очень тонкий провод. Для этого идеально подходит МГТФ с сечением 0.03 мм. Он тонкий, гибкий, не ломается. Его тефлоновая изоляция хорошо выдерживает нагрев и при пайке не оголяет лишнего провода. У этого провода есть один большой недостаток - его ну ОЧЕНЬ муторно зачищать руками, обычные стрипперы его не берут. 

В качестве выхода подсмотрел в интернете идею использования паяльной ванны. При правильно подобранной температуре достаточно окунуть конец МГТФ в флюс и потом в расплавленный припой, чтобы за один раз зачистить и залудить кончик, подходящий для припаивания к ножкам микросхемы. Это позволяет в два движения сделать то, что без ванны потребует целой серии ручных операций. 

Первые эксперименты

Дождавшись из Китая и ЧипДипа комплектующих и инструментов, я собрал несколько простейших схем с новым процессором на макетной плате. Для микроконтроллеров своего рода аналогом "Hellow World" является мигающий светодиод ("Blinkenlights"), для мира самопальных компьютеров - это "холостой ход" процессора, когда он без всякой памяти циклически исполняет NOP-инструкции. Когда я увидел в логическом анализаторе заветные меандры сигналов на шине, я сел паять первую версию вычислительного ядра. 

Вид тыльной стороны платы при пайке МГТФ.
Оригинальные материнские платы не
сохранились, на фото - макет видеоадаптера
Задумка была простая - сделать плату с микросхемами, на которой будут разведены основные сигнальные пути, оставив возможность подключаться к каждому сигналу через штыревой разъем. Так появилась гибридная схема из паечной и контактной макетных плат. Этот подход позволил мне опробовать много идей, не гадая каждый раз, включится ли ранее работавшая схема, или нет. В этой схеме я ещё использовал в качестве системного контроллера старую добрую Atmega32, но уже в тот момент мне стало понятно, что для нормальной системы потребуется намного больше сигналов.

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

Я перепробовал кучу шаманских плясок с перепайкой контактов и поиском плохих проводков, но тщетно - этот экземпляр был проклят духами и отказывался исправляться. Это было обидно вдвойне, так как я угрохал огромное количество ручного труда на эту схему. Разочарование было столь велико, что я даже всерьёз подумывал забросить проект целиком. 

Китай спешит на помощь

Этот неудачный опыт научил меня тому, что с кустарными технологиями пора завязывать. Лапша из проводов и всё такое - это не для настоящих пацанов, надо разводить и делать нормальную печатную плату. Для других своих проектов я уже начал осваивать ЛУТ-метод производства плат в домашних условиях, но здесь решил не рисковать. 

Поскольку я изначально проектировал всё в EasyEDA, у меня уже была принципиальная схема. Разобравшись с тем, как проектировать платы из ранее подготовленных логических схем, я заказал изготовление материнской платы в Китае. При проектировании платы я заложил несколько особенностей, которые облегчили дальнейшие эксперименты:
  1. Плату я разводил двухслойную, чтобы иметь возможность любую дорожку при необходимости точечно разорвать. Правда, мне пока это не потребовалось.
  2. Для основных сигналов я заложил штыревые разъёмы, чтобы можно было подключать логический анализатор и/или дополнительные схемы.
  3. Сразу заложил в схему шинную архитектуру, разъёмы для SD-карт, PS/2 разъём и достаточно сигналов, чтобы превратить контроллер ещё и в DMA-контроллер.
Тот самый погнутый рычаг ZIP-панели.
Ещё и развернул его на 180 градусов.
Бонусом можно видеть припаянный
проводок - обход ещё одной
ошибки в схеме.
Платы мне делали примерно месяц и обошлось это не очень дёшево -  из-за выбора двухслойной технологии платы получились весьма большие (иначе дорожкам места не хватало). Зато когда я смонтировал на новой плате все компоненты и запустил тестовую прошивку, она заработала с первого раза. Это было очень неожиданно после всех моих предыдущих упражнений с макетными платами и шаманским бубном.

Естественно, что я накосячил в схеме, а как иначе? Но самой смешной ошибкой стало то, что рычажок ZIF-панели для ПЗУ упирался в соседнюю микросхему, не давая полностью защёлкнуться. Это была настолько глупая и очевидная ошибка, но она стала возможной из-за того, что я слишком фокусировался на схеме и логике, упустив более комплексный взгляд на систему. К счастью, все ошибки я так или иначе сумел обойти, применив смекалку и грубую силу (да-да, этот рычажок я просто согнул). На этой плате я пока и продолжаю развивать проект, так как она в целом делает всё, что я от неё хочу. 

Отдельная весёлая история приключилась с платой видеоадаптера, которую я спаял для своего компьютера. Схема уже была ранее опробована на макетной плате, поэтому я не ожидал сюрпризов. Но, видимо, что-то забылось из-за долгого перерыва а работе над проектом, и я допустил одну маленькую ошибку, из-за чего схема не запускалась. Юмор ситуации был в том, что я перебрал почти все варианты "сложных" ошибок и даже собирал на стенде макеты, воспроизводившие корректную работу контроллера. На деле же оказалось, что я банально забыл про некоторые особенности микросхемы  программируемой логики и забыл задействовать ножку, которая включала бы выходные буферы запрограммированной схемы. И только после нескольких недель мучений, меланхолично перечитывая datasheet от этой микросхемы, я догадался, в чем проблема.

Но в конечном итоге, именно такие трудности на пути к решению вызывают потом франкенштейновский восторг ("It's alive!"), когда паззл складывается и схема начинает работать. Ради этой радости я и занимаюсь подобными проектами. О том, что именно у меня получилось в результате этих стараний, я расскажу в следующей заметке. А пока всех с наступающим 21-ым годом!




1 комментарий:

  1. Добрый день!
    С интересом почитал эту статью.
    Очень удивило, что вначале паяли макетную плату вручную с помощью проводников, такой способ из далёкого прошлого. Разведённая печатная плата, конечно, стоит некоторых денег и придётся несколько подождать доставки, но это копейки по сравнению с глобальным выигрышем по удобству работы, времени отладки и т.д.
    Применение ванночки для лужения проводников тоже под вопросом. У такой ванночки из-за большой площади расплавленного припоя, наверно, есть существенные вредные испарения свинца.
    Радиолюбители для лужения МГТФ-проводков используют паяльник.
    Я нашёл у себя в хламе старый советский паяльник на 100 Вт, у которого жала почти не осталось. Просверлил в жале (диаметр 9 мм) углубление диаметром около 3 мм и глубиной 5 мм, цифры точно не помню. Вот и получилась ванночка за 10 минут, просто и бесплатно. Подключаю к ЛАТРу для регулировки температуры.
    Для удобства можно отпилить ручку паяльника, сделать подставку, в которую вмонтировать дешёвый тиристорный регулятор.
    Но это детали.
    Неясно, зачем вы делали процессор Z80, ведь он из прошлого века.
    На мой взгляд, гораздо интересней попытаться разработать хороший процессор для микроконтроллера (МК). Я – электронщик, в разработках использую МК AVR. Сложилось впечатление, что можно сделать процессор для МК гораздо лучше, хотя я не специалист в процессорах.
    В этом плане, возможно, разработка хорошего процессора для МК имеет интересные перспективы, а у процессора Z80 – никаких.

    Александр Карпенко

    ОтветитьУдалить