Привет, Хабр! Что, если мы имеем цифровой сигнал в одном формате, а нам он нужен в другом?

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

Сегодня мы познакомимся с микросхемами, разработанными как раз на такой случай.

▍ Электронное голосование


В статье про триггеры мы собирали машину для голосования трёх человек. Чтобы было принято утвердительное решение, должны проголосовать «за» более половины участников, то есть в данном случае два или три.


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

На второй ступени сигналы с этих трёх элементов поступают на входы элемента 3ИЛИ. В итоге логическая единица появляется на выходе при условии, что нажаты любые две кнопки или все три.

▍ Всегда есть другой способ


А теперь перед нами другой вариант электронного голосования на троих. Здесь нажатие кнопки представлено логическим нулём, а не единицей, как в предыдущей схеме. Входы A, B и С микросхемы U1 подтянуты к высокому логическому уровню резисторами R1-R3, а кнопка замыкает выход на землю.


Микросхема КР1564ИД7, она же 74HC138, построена по технологии КМОП (комплементарный металл-оксид-полупроводник, то есть на полевых транзисторах с разным типом проводимости канала) и представляет собой высокоскоростной дешифратор-демультиплексор 3:8.

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

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


Внутренняя логика микросхемы КР1564ИД7 начинается с трёх буферов и трёх инверторов (элементов НЕ), благодаря которым мы имеем входной сигнал и в первозданном, и в инвертированном виде.

Далее следует восемь трёхвходовых логических элементов И-НЕ. Всё очень просто. Когда на входе 000, со всех трёх инверторов придут единицы. При 001 на входе единицы будут на ¬А0, A1 и A2.

И так далее, до 111 с единицами на всех трёх буферах. Каждой из восьми возможных комбинаций входных сигналов соответствует свой логический элемент 3И-НЕ.

Также предусмотрена схема принудительного перевода всех выходов в низкий уровень. Каждый из выходов микросхемы с Y0 по Y7 подключён к выходу своего элемента 2И-НЕ с инвертирующими входами.

Так как все девять элементов 3И имеют инвертирующие выходы, подключённые к инвертирующим входам восьми элементов 2И-НЕ, мы можем «умножить минус на минус, получив плюс», и перерисовать эквивалентную схему, сделав её проще для понимания.


Итак, кроме трёхразрядного входа данных микросхема КР1564ИД7 имеет три разрешающих входа. Чтобы она работала в режиме дешифратора-демультиплексора, на двух инвертирующих входах ¬E1 и ¬E2 должны быть низкие уровни, и на одном неинвертирующем входе E3 обязана присутствовать логическая единица.

Тогда на выходе Y c номером, соответствующим входному двоичному числу, будет логический нуль, а на семи остальных будут высокие уровни. В противном случае, логические единицы будут на всех восьми выходах.

Целых три разрешающих входа, два из которых с инверсией, предусмотрены для построения демультиплексора 4:16 на двух микросхемах КР1564ИД7 без дополнительных компонентов, либо дешифратора 5:32 на четырёх корпусах 74HC138 с применением одного единственного внешнего элемента НЕ.


Помните действующий четырехразрядный процессор на микросхемах стандартной логики? Там мы применили в качестве контроллера ПЗУ интегральный демультиплексор 4:16 КР1564ИД3, или SN74HC154N.


Его 16 выходов инвертирующие, как и 8 выходов КР1564ИД7. А разрешающих входов у КР1564ИД3 не три, а два, оба инвертирующие.

▍ Немного истории


Почему многие цифровые микросхемы имеют логический нуль в качестве активного состояния на выходе? Корни этой традиции уходят в те времена, когда ещё PNP и P-канальные кремниевые транзисторы были слабее NPN и N-канальных.

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

И до сих пор мы стараемся шире использовать NPN и N-канальные транзисторы, прибегая к P-канальным и PNP только в случаях, когда это действительно целесообразно.

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

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

Напишите в комментариях, есть ли у вас хоть один P-канальный полевой транзистор. У меня вот уже несколько лет лежат несколько штук с одного из старых проектов. Если у вас есть позитронная лампа с катодом из антивещества, напишите, где её приобрести. В известных мне магазинах радиодеталей они не продаются.


Возвращаемся к схеме нашего устройства для голосования. Как видим, оба инвертирующих разрешающих входа демультиплексора КР1564ИД3 подключены к земле, а неинвертирующий — к плюсу питания. Микросхема работает в штатном режиме.

Давайте подумаем, на каких её выходах будет логический нуль, когда нажаты две или три кнопки. То есть выпишем состояния с двумя или тремя логическими нулями на входе.

  • 0b000 = 0
  • 0b001 = 1
  • 0b010 = 2
  • 0b100 = 4

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

Микросхема КР1564ЛА1 или SN74HC20N — это не регистр, не триггер и не дешифратор, а всего-навсего два логических элемента 4И-НЕ в одном корпусе.

Если решение принято, логический нуль будет на одном из выходов из нашего списка. Тогда на всех остальных выходах U1, в том числе Y3, Y5, Y6 и Y7, будут логические единицы, которые попадут на входы первого элемента 4И-НЕ микросхемы U2.

Соответственно, на её выходе Y1 будет логический ноль. А на Y2 — логическая единица, так как все 4 входа второго элемента 4И-НЕ соединены вместе, что превращает его в простой инвертор.

Итак, если нажаты все три или любые две кнопки, светится зелёный светодиод и пищит зуммер. А если нажата всего одна кнопка, либо не нажата ни одна, зуммер молчит и светится красный светодиод.

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

▍ Мультиплексоры и шифраторы


Итак, с дешифраторами-демультиплексорами мы если не разобрались, то хотя бы познакомились. А что насчёт обратного преобразования?


Наша вторая схема содержит неполный двоичный мультиплексор-шифратор 8:4, и выполнен он на диодно-резисторной логике. Почему бы и нет? Громоздко, зато максимально наглядно.

  1. 0b0001, что реализовано единственным диодом D1 между первой кнопкой S1 и шиной нулевого разряда А.
  2. 0b0010. Кнопка S2, диод D2 на первый разряд В.
  3. 0b0011. Кнопка S3, диоды D3 и D4 на A и В.
  4. 0b0100. Кнопка S4, диод D5 на второй разряд С.
  5. 0b0101. Кнопка S5, диоды D6 и D7, разряды A и С.
  6. 0b0110. Кнопка S6, диоды D8 и D9, разряды B и С.
  7. 0b0111. Кнопка S7, диоды D10 — D12, разряды А — С.
  8. 0b1000. Кнопка S8, диод D13, разряд D.
  9. 0b1001. Можно было поставить девятую кнопку с диодами на разряды А и D. А можно одновременно нажать кнопки S1 и S8.
  10. Если бы наш дешифратор для семисегментного индикатора «умел» отображать шестнадцатеричные цифры A-F, имело бы смысл предусмотреть ещё пять кнопок с соответствующими диодами. Но микросхема CD4511 «знает» только десятичную систему счисления, потому при входных комбинациях от 10 = 0b1001 до 15 = 0b1111 индикатор просто погаснет.


А если бы мы взяли К561ИК2, то увидели бы вместо шестнадцатеричных цифр специальные символы, предназначавшиеся для электронных весов.


Иными словами, в части цифр от 0 до 9 CD4511 и К561ИК2 полностью аналогичны, но коды от 0b1001 до 0b1110 они обрабатывают по-разному.

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

Кроме четырёх информационных входов A, B, C и D, CD4511 и К561ИК2 имеют три управляющих входа.

Инвертирующий вход ¬LT — LAMP TEST — предназначен для проверки индикатора. Для нормальной работы на этом входе должна присутствовать логическая единица. А при низком уровне напряжения на входе ¬LT светятся все сегменты.

Логический ноль на инвертирующем входе ¬BL — BLANK — гасит индикацию. Для нормальной работы требуется высокий уровень этого входа. Заметим, что приоритет ¬LT выше, чем ¬BL. То есть, в режиме проверки ламп даже вход гашения не сможет их отключить.

Вход LE — LATCH ENABLE — радикально отличается от двух скучных предыдущих входов, которые мы обычно просто подключаем к земле и плюсу питания. При низком уровне напряжения на этом входе наш дешифратор является асинхронным, и мгновенно отображает на семисегментном индикаторе десятичную цифру, соответствующую двоичному числу на входах.

Как только на вход LE поступает логическая единица, входные триггеры защёлкиваются в своём текущем состоянии. Микросхема запоминает число и отображает его на индикаторе до тех пор, пока вход LATCH ENABLE не перейдёт в низкий уровень. Тогда возобновится асинхронный режим работы дешифратора.

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

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

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

И, наконец, благодаря регистрам-защёлкам в семисегментных дешифраторах для приёма любого числа десятичных разрядов по последовательному интерфейсу будет достаточно всего одного четырёхразрядного регистра сдвига! Ведь можно обновлять показания нужного дешифратора в тот момент, когда регистр содержит именно его цифру!

Вход ¬LT в нашей схеме подключён к плюсу питания напрямую, то есть на нём зафиксирована логическая единица. А вход ¬BL подтянут к плюсу через 10-килоомный резистор R14 и шунтируется на землю кнопкой RST.


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

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

С помощью логического элемента НЕ на транзисторе Q2 и элемента 2И на диодах D14 и D15 реализована следующая логика. Если светит сегмент G, или светит B, но при этом не светит D, на входе LATCH ENABLE присутствует высокий уровень. То есть дешифратор запомнил нажатие цифровой клавиши и больше не реагирует на нажатия.

Сегмент G отсутствует только в цифрах 0 и 1. В цифре 1 есть B, но нет D, а в цифре 0 есть и B, и D.

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

Если нажать сброс, все сегменты погаснут, дешифратор перейдёт в асинхронный режим, и при отпускании кнопки сброса запомнит либо ноль, либо значение той клавиши или клавиш, что были нажаты.

Хотя предполагается, что двух цифровых клавиш одновременно не нажимают, и вместе с клавишей сброса не нажимают цифровых. Но если удерживать 8 и 1, и при этом нажать сброс, отобразится 9.

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

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

Обе сегодняшних действующих модели собраны из радиоконструкторов, и предназначены для лабораторных по электронике в китайских учебных заведениях. Наборы для сборки устройства для голосования и платы с семисегментным индикатором продаются на Алиэкспресс.

Напишите в комментариях про свой опыт, связанный с шифраторами, дешифраторами и семисегментными индикаторами.

Telegram-канал с розыгрышами призов, новостями IT и постами о ретроиграх ????️

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


  1. korean_pilot
    14.09.2023 10:59
    +5

    Хочу дополнить (сейчас этому не учат), что мультиплексор 4:1 можно использовать в качестве базового элемента для реализации функций 2И, 2И-НЕ, 2ИЛИ, 2ИЛИ-НЕ и исключающее ИЛИ


    1. leshabirukov
      14.09.2023 10:59
      +2

      И-НЕ-ТОЛЬКО (можно для любой двухвходовой булевой функции из 16 возможных, включая вырожденные). Красиво, что управляющие входы становятся входами данных и наоборот.


  1. dragonnur
    14.09.2023 10:59
    +1

    Если у вас есть позитронная лампа с катодом из антивещества

    Решается схемотехнически, цирклотроном, например.


  1. iig
    14.09.2023 10:59
    +3

    Корни этой традиции уходят в те времена, когда ещё PNP и P-канальные кремниевые транзисторы были слабее NPN и N-канальных.

    p-МОП логика с питанием -27 в самозародилась вопреки традиции ;)


    1. Lunathecat Автор
      14.09.2023 10:59

      В 1959 году Bell labs пытались создавать и P-канальные, и N-канальные транзисторы. Но заработали только P-канальные, из-за примесей натрия, которые удалось устранить только десятилетием позже. А первую микросхему с МОП логикой стали выпускать в 1964 году. Естественно, что она была PMOS.


  1. divanus
    14.09.2023 10:59
    +1

    Да, это вам не print ("Hello, world!") тыж программист сеньёр )


  1. Moog_Prodigy
    14.09.2023 10:59
    +1

    Из дешифратора можно сделать игру "автоотгадчик", или "Цифровой Акинатор", причем принцип действия будет ровно таким же как у реального Акинатора. Не знающие принципов взрослые тоже удивляются, а еще можно расширить таблицу.


    1. iig
      14.09.2023 10:59
      +2

      Можно разьяснительную бригаду? Разьясните правила игры плз ;)
      ЗЫ: увидел соединение 220 В и цифровой земли… да, раньше народ был попроще ;)


  1. strvv
    14.09.2023 10:59
    +1

    немного p-mos использую.
    irf4905 для сильнотоковых применений несколько завалялось,
    ао3401?(не уверен, пишу по памяти) — для работы в качестве слаботочных p-mos ключей.
    а в целом, для того же авто — обычно конечно использую n-mos, тот же irf44|irf48 или любой npn и реле.


  1. checkpoint
    14.09.2023 10:59
    +1

    В процессе занятия с детьми цифровой схемотехникой возникла у меня необходимость отображать шестнадцатиричные цифры на семисегментном индикаторе. Я был почти на 100% уверен что легко найду стандартную микросхему дешифратора из набора SN74. Однако я был сильно удивлен обнаружив отсутствие такой полезной микросхемы. Пришлось поискать не совсем стандартное решение, а именно - на базе программируемых логических микросхем низкой степени интеграции (PLD). Вот пример такого HEX-to-7SEG дешифратора на базе ATF16V8B. Вообще, эти старинные PLD оказаличь очень полезными, на них можно соорудить любой дешифратор (любую логическую схему) под конкретную задачу не используя горы рассыпухи, при этом они не требуют никакого обвеса, в отличие от ПЛИС.