Когда я создавал первые электрические цепи в 3D-симуляторе, то часто думал: как же происходит переход из «живого мира» бесконечных вариантов значений в «компьютерный мир» нулей, единиц и вообще всего, для чего набор значений и их изменчивость строго ограничены? В этой статье я продолжу осваивать курс по схемотехнике, и, судя по темам лекций, ответ мне откроется. Вперед, к комбинационной логике!

Цифровые сигналы

Два мира, которые я грубо описал выше, в общем, имеют простые определения — аналоговый и цифровой. Четвертый материал курса схемотехники начинается с объяснений их различия и примеров преобразований. Для меня ближе всего здесь работа со звуком. Аббревиатуры ЦАП (цифро-аналоговый) и АЦП (аналогово-цифровой преобразователь), думаю, знакомы каждому, кто когда-либо выбирал себе аудиокарту.

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

В этой схеме мы управляем светодиодом с помощью ручки переменного резистора через p-канальный транзистор. Пороговое напряжение светодиода — 2 В, сопротивление постоянного резистора — 470 Ом. В видеоуроке используется синий светодиод, но я поставил красный, поскольку его свет лучше виден на скриншотах. Подсказки по контактам теперь включены по умолчанию: в прошлый раз путаница с ними отняла немало времени.

Чтобы измерить напряжение, подаваемое на затвор транзистора, просто выберу его в режиме мониторинга. На скриншоте я выкрутил минимальное напряжение, но, видимо, симуляция работает так, что нуля достичь невозможно и какие-то пиковольты фиксируются. Затем при увеличении подаваемого на затвор напряжения светодиод постепенно гаснет.

В первой части курса при мониторинге у меня нередко всплывали отрицательные напряжения. Оказалось, отрицательные напряжения вполне допустимы даже в документации: у p-канальных транзисторов такое встречается, поскольку напряжение считается относительно истока.

Далее ведущий рассказал о важности правильной подачи напряжения «затвор-исток» — именно снаружи основной нагрузочной цепи (схема слева). В противном случае вышеприведенная схема тоже будет работать, но напряжение «затвор-исток» вычитается из напряжения «сток-исток» (схема справа). Поэтому, хоть светодиод здесь тоже будет светиться, второй вариант включения нагрузки — в данном случае светодиода — применяют только в аналоговой электронике.

От схемы выше — один шаг до схемы индикации логической единицы.

Чтобы было понятней, я чуть растащил элементы схемы в разные стороны. По сути, значимых изменений здесь только два. Я поменял p-канальный резистор на n-канальный — очень неудобно, что в CRUMB эту разницу видно только в настройках в отдельном окне.

Черный провод, идущий за букву G на затвор транзистора, передает логическую единицу. Когда через провод затвор выведен на «плюс», светодиод-индикатор горит, резистор пропускает ток. Когда на «ноль», светодиод гаснет.

Аналогичным образом можно собрать схему, реагирующую на логический ноль на ее входе, если поставить p-канальный транзистор вместо n-канального. Тогда вышеупомянутая перемычка будет «зажигать» светодиод при подключении к «нулю» и наоборот.

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

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

Собираем первые логические элементы

У нас есть n-транзистор для логического нуля, p-транзистор для логической единицы. Мы можем объединить их затворы в одну цепь, сделав каждый транзистор нагрузкой для другого. Чтобы избежать потерь напряжения на выходе — другими словами, увеличить помехоустойчивость — буду подавать напряжение питания на истоки, а не на стоки, как было рекомендовано в экспериментах со светодиодом.

В CRUMB n-транзистор и p-транзистор ничем визуально не различаются, и даже контакты расположены в одном и том же порядке. Это неудобно. Поэтому оговорюсь заранее, что в схемах ниже p-транзистор будет дальше от источника питания, а n-транзистор — ближе.

Соединяю затворы и стоки этих транзисторов друг с другом. Исток p-транзистора вывожу на плюс питания, n-транзистора — на минус. Подтягивающих резисторов здесь не нужно, можно сразу обвешать схему светодиодами. Подключаю их к стокам транзисторов через резисторы на 470 Ом. И вывожу на шину питания по логике, обратной истокам транзисторов: светодиод p-транзистора — на минус, n-транзистора — на плюс.

Двойную черную перемычку для наглядности я вынес подальше. Через нее подаю логическую единицу или ноль, то есть подключаю перемычку к плюсу или минусу питания. При подаче единицы в схеме загорается только зеленый светодиод, подключенный к n-транзистору, потому что напряжение выдается только на этот светодиод. В CRUMB это можно показать наглядно через тепловую карту.

Подадим логический ноль: переключим нашу «ломаную» перемычку на минус питания. Теперь становится активным p-транзистор, загорается красный светодиод.

Подключаем генератор

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

В CRUMB есть генератор сигналов напряжением до 12 В. Я подключил его ко второй шине питания и вывел «ломаную» перемычку-переключатель на плюс этой шины, на единицу. Когда генератор подавал питание на свою шину, то на затворы светодиодов подавалась логическая единица и загорался зеленый светодиод. Без питания, соответственно, загорался красный.

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

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

Двухвходовой ИЛИ-НЕ

С помощью пары n-транзисторов и p-транзисторов соберем элемент 2ИЛИ-НЕ. Вот как выглядит его схема.

Если научиться быстро воплощать графические схемы на практике, то работа пойдет быстрее. Пока что приходится постоянно перескакивать между видео и схемой, чтобы удержать параллели в голове. Не с первого раза, но NOR собирается, проверка по таблице истинности проходит.

Проводов становится столько, что захватить все можно только ракурсом сверху. Логические ноли и единицы подаются через затворы двух p-транзисторов (G), они дальше от источника питания. Выше мы подаем на вход 0 и 1. С помощью светодиода считывается результат: зажигается при итоговом 0 и гаснет при 1.

0 и 1 на входе в NOR дают 0 на выходе. 1 и 1 тоже дают 0. Чтобы получить единицу (погасший светодиод в нашем случае), нужно подать на вход 0 и 0:

Так и получается. Я перевел затвор крайнего левого транзистора на минус (подал 0), и светодиод погас — значит, мы получили логическую единицу.

Напоследок ведущий собрал вентиль 3И-НЕ. На его примере показал, что в некоторых местах можно обойтись без перемычек и соединять стоки и истоки последовательно расположенных транзисторов через соседние ряды — если, конечно, схема контактов позволяет.

Три n-транзистора можно поставить «лесенкой» и избавиться от двух перемычек
Три n-транзистора можно поставить «лесенкой» и избавиться от двух перемычек

Начинаем работу с микросхемами

Ура, переходим к более лаконичным проектам. Из видеоурока я прежде всего понял, что микросхемы различаются не только логикой, но и своим формфактором. Есть более крупный DIP для монтажа в отверстия, есть более компактный SO для поверхностного монтажа.

В CRUMB микросхемы обозначаются так, будто бы это SO, хотя по факту они имеют формфактор DIP, ведь мы работаем с макетной платой. Проблем это не вызывает: каждая схема идет с описанием логики, да и по номеру модели поискать несложно.

Вот все микросхемы из раздела Logic. Пока понятно только то, что начинается с Quad
Вот все микросхемы из раздела Logic. Пока понятно только то, что начинается с Quad

Теперь с помощью микросхемы 74HC02 (Quad NOR) соберем инвертор. Сделать это несложно, надо только учесть, что в CRUMB используется иная микросхема, чем в видеокурсе, с другим расположением контактов. То же самое было и с транзисторами.

Здесь при подаче логического нуля на перемычку у 35-го разъема светодиод будет загораться, и наоборот. Для наглядности включил на скриншоте таблицу истинности. Чтобы сделать таблицу короче и проще для восприятия, в ней проставляют X, если в данном случае нет разницы, ноль у нас или единица.

Вот так с помощью двух ИЛИ-НЕ мы можем получить один вентиль ИЛИ. Светодиод будет гореть, если на 4А или 4B будет подана логическая единица.

Под конец урока я узнал, зачем нужна третья микросхема в наборе CRUMB, 74HC04. Она содержит шесть простых инверторов. Вероятно, она будет востребована, если в более сложных проектах не будет хватать вентилей для реализации инвертора «на борту».

Дешифратор

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

Два входа кодируют номер строки памяти, а четыре выхода — ее содержимое. В реальных сценариях по такому принципу строятся матрицы запоминающих ячеек, настолько большие, что собрать такую на макетной плате едва ли возможно. Но 2-в-4 — вполне.

В видеоуроке для этого используют микросхемы CD4011BE (4 х 2ИЛИ-НЕ) в режиме инвертора и CD4081BE (4 х 2И). Я попробовал повторить такую же конфигурацию, но в CRUMB это оказалось неудобно, так как входы нужно замыкать друг с другом, а это сразу плюс несколько перемычек в общий хаос. В CRUMB же все перемычки жесткие, на одном уровне, поэтому они просто накладываются друг на друга. И возможность перемычку изогнуть спасает далеко не всегда.

Но ведь в моем виртуальном наборе присутствует замечательная 74HC04 (6 х НЕ) — 1564ЛН1 в России. Попробую с ней в роли инвертора, ведь это инвертор и есть.

Синие перемычки — входы А0 и А1 (слева направо). Зеленые — выходы Y0–Y3 (слева направо). Все мои виртуальные микросхемы рассчитаны не более чем на 7 В, дальше сыпятся предупреждения
Синие перемычки — входы А0 и А1 (слева направо). Зеленые — выходы Y0–Y3 (слева направо). Все мои виртуальные микросхемы рассчитаны не более чем на 7 В, дальше сыпятся предупреждения

Комбинационная схема удалась сразу. Замялся только из-за того, что в таблице истинности выходы стоят справа налево, а на моей схеме — слева направо. Хорошо, что не начал пересобирать заново до того, как заметил это.

Последуем за ведущим дальше и создадим аналогичный дешифратор на одной микросхеме. В видео используют CD4556BE, у меня же есть 74HC139, которая «конвертирует двухбитный бинарный адрес в четыре линии». На этот раз построю выходы справа налево, чтобы не переворачивать в уме таблицу истинности.

Эта схема получилась гораздо проще в реализации, а по функциональности — богаче. Дополнительный красный провод отвечает за разрешение по выходу, то есть в определенной позиции он гасит все светодиоды. Но точно ли гасит?

Вот спецификация микросхемы в CRUMB. Все ясно: разрешение по выходу срабатывает при логической единице и зажигает все выходы, а не гасит. Аналогичный «встроенный инвертор» предусмотрен у остальных выходов (видимо, он обозначается вертикальной чертой).

По сути дешифратор работает верно, но как визуально привести его к предыдущему? Да я просто поменяю полярность светодиодов:

С поправкой на противоположный порядок выходов Y0–Y3 — все как надо
С поправкой на противоположный порядок выходов Y0–Y3 — все как надо

Мультиплексор

Мультиплексоры нужны, чтобы задавать, какой из входящих потоков данных должен пойти на выход.

Таблица истинности мультиплексора, где A — сигнал, определяющий, что поступит на выход DO: данные либо с DI0, либо с DI1
Таблица истинности мультиплексора, где A — сигнал, определяющий, что поступит на выход DO: данные либо с DI0, либо с DI1

В задании предлагали создать двухвходовой мультиплексор на основе микросхемы с четырьмя вентилями NAND — CD4011BE. В CRUMB она называется 74HC00.

Желтый провод — A, зеленый рядом с ним — D|0, зеленый напротив — D|0. Фиолетовый провод выводит DO на светодиод
Желтый провод — A, зеленый рядом с ним — D|0, зеленый напротив — D|0. Фиолетовый провод выводит DO на светодиод

Здесь CRUMB тоже подкинул проблем: светодиод ни в какую не хотел гореть. Я много раз перепроверил себя по логической схеме, посмотрел «тепловые карты» и даже поставил кнопку на A. В итоге просто пересобрал cветодиодный хвост — и все волшебным образом заработало. 

Семисегментный индикатор — точнее, его не будет

Самую насыщенную с точки зрения графики часть урока мне пришлось опустить. В десктопной версии CRUMB просто нет микросхемы драйвера для семисегментного индикатора, хотя сам индикатор имеется. А в версии на iPad есть и индикатор, и дисплей. Вот только айпада у меня нет.

Приведу хотя бы схему. Драйвер подключается просто: на вход подается двоичное число через 4 бита A0–A3, а на выходе оно преобразуется в команды включения для набора из семи светодиодов. Которые в итоге складываются в то же число в десятичной системе. При подаче двоичного числа, которое в десятичной системе становится двузначным, индикатор не загорается. Что касается входов LT, BL, LE, то я нашел только их расшифровки — Lamp Test, Blanking Input и Latch Enable. Первые два, видимо, служебные, а третий связан с памятью.

Финальный проект под вопросом

Я одолел 7 из 11 лекций курса схемотехники. Впереди две про триггеры и конденсаторы, а затем еще две финальных, где нужно будет сделать два вида секундомера. Я сомневаюсь, что создатель CRUMB подвезет апдейт с драйвером семисегментного индикатора, так что, если он будет нужен, придется искать другую песочницу. Придумаю что-нибудь :)

Если интересно, с чего все начиналось — вот моя предыдущая статья по курсу.

Комментарии (4)


  1. SeregaSA73
    27.10.2025 14:28

    Никак не полчается у меня подружиться с макеткой, мне сильно проще и понятнее все это спаять навесу чем в плату проводки тыкать :)


    1. klauss_z Автор
      27.10.2025 14:28

      Круто, а я вот в паяльник не умею, может, когда-нибудь потом, на следующем уровне -)


    1. GidraVydra
      27.10.2025 14:28

      Напоминает жалобы деда, что ему сложно машину на автомате водить, потому что к механике привык.

      Макетка - великая вещь, экономит очень много времени.


    1. checkpoint
      27.10.2025 14:28

      Я как-то занимался со своими изучением цифровой схемотехники на этих платах (насмотрелся Бена Итера) и обнаружил, что в у breadboard-ов есть масса неприятных глюков: то нет контакта внутри платы, то проводник переломился, то выскочил из гнезда незаметно. Когда собираешь что-то посложнее мультивибратора это начинает сильно досаждать. Ты пытаешься показать детям то, что должно быть в теории, а на практике какая-то фигня получается, они смотрят на тебя как на клоуна. В итоге я вернулся к паяльнику. :-)