Привет, Хабр! Какая волшебная микросхема не только позволяет создавать удивительные световые эффекты бегущих огней, но и помогает расширить порты микроконтроллера, когда всего две его ножки могут управлять восемью, шестнадцатью и так далее светодиодами, реле и прочими полезными штуками?
Конечно же, это регистр сдвига! Сегодня мы с ним познакомимся на нескольких увлекательных примерах.
▍ Что такое регистр сдвига?
Развитие микроэлектроники идёт таким образом, что часто встречающиеся и широко применяемые узлы выпускают в виде микросхем, чтобы на одном корпусе можно было получить то, что раньше делали на нескольких. Регистры сдвига — не исключение.
Вспомним схему электронного кодового замка из статьи про триггеры. Здесь четыре синхронных D-триггера двух микросхем CD4013, или К561TM2, последовательно передают друг другу сигнал со входа, в данном случае логическую единицу.
Это не что иное, как самый настоящий регистр сдвига. Он имеет несколько последовательно включённых ячеек памяти, то есть триггеров. Входом регистра является вход первого триггера U1A, а выходом — выход последнего U2B. То есть перед нами регистр сдвига с последовательным вводом и последовательным выводом.
Также имеется общий вход сброса всех триггеров R, логическая единица на котором устанавливает триггеры в логический ноль на выходе. Такой вход у интегральных регистров сдвига тоже имеется. Его необходимость очевидна: в определённый момент времени, а именно перед записью нужных данных, нам нужно быть уверенными, что во все ячейки памяти записаны нули.
Вот только вход тактирования в этой схеме у каждого триггера свой, что для регистров сдвига нехарактерно. У интегрального регистра сдвига вход тактирования общий для всех триггеров.
▍ Аналоговые регистры сдвига
Удивительно, но факт: существуют и аналоговые регистры сдвига, представляющие собой последовательность устройств выборки-хранения (УВХ), запоминающих значение напряжения на входе при поступлении тактирующего импульса и передающих его на выход.
▍ Устройство выборки-хранения
Прекрасным простым примером УВХ является модуль аналогового синтезатора MFOS Micro-Sample & Hold разработки Рэймонда Уилсона (Music From Outer Space).
Основой модуля является счетверённый операционный усилитель (ОУ) LF444 производства National Semiconductor. Его входы реализованы на полевых транзисторах с управляющим P-N переходом (JFET), благодаря чему обеспечивается экстремально высокое входное сопротивление.
Согласно фирменной документации, типичное входное сопротивление LF444, как и у привычных нам TL074 и TL084, составляет 1 тераом. Это десять в двенадцатой степени Ом.
А входной ток LF444 вообще рекордно низкий: при комнатной температуре типичный 10 пикоампер и максимальный 100 пА, против значительно более высоких величин у TL08x и тем более TL07x.
Получается, что если взять конденсатор (на схеме C1) с малой утечкой (например, полистироловым диэлектриком) и подключить к неинвертирующему входу LF444 (U1-B), то заряд конденсатора будет сохраняться практически неизменным в течение длительного времени. Соответственно, не будет изменяться и напряжение.
Таким образом, конденсатор запоминает величину напряжения, а сверхвысокоомный вход операционного усилителя ему не мешает. Если соединить инвертирующий вход этого ОУ с его выходом, получим буфер — повторитель напряжения на конденсаторе, передающий это напряжение далее по схеме без влияния на исходное напряжение.
В схеме Рэя Уилсона ОУ U1-B включён не повторителем, а неинвертирующим усилителем постоянного тока (УПТ). Его коэффициент усиления можно рассчитать исходя из закона Ома, если вспомнить основные свойства идеализированного операционного усилителя. Про них мы уже писали.
- При наличии замкнутой петли отрицательной обратной связи (между выходом и инвертирующим входом) ОУ будет поддерживать на выходе такое напряжение, чтобы напряжения инвертирующего и неинвертирующего входов сравнялись.
- Через входы операционного усилителя практически не идёт ток (особенно если это LF444). Потому входные токи ОУ мы не учитываем. Учитываем только токи в цепях, подключённых ко входам ОУ. В данном случае, это резисторы R8 и R9.
Итак, мы имеем всего лишь один ток, текущий от шины +12 вольт до выхода операционного усилителя U1-B. Назовём напряжение на выходе ОУ Uвых, а напряжение на неинвертирующем входе, оно же напряжение на конденсаторе, Uвх. На инвертирующем входе U1-B, согласно свойствам ОУ с замкнутой петлей отрицательной обратной связи, будет тоже напряжение Uвх.
Сопротивление резистора R8 вдвое выше, чем R9, потому R9 = R, R8 = 2R.
Ток через R8 равен (12В — Uвх) / 2R. Ток через R9 равен (Uвх — Uвых) / R. И это один и тот же ток.
Получается уравнение:
(12В - Uвх) / 2R = (Uвх - Uвых) / R.
Умножим обе части уравнения на 2R:
12В - Uвх = 2Uвх - 2Uвых.
Перенесём выходное напряжение влево, а 12В и входное напряжение вправо:
2Uвых = 3Uвх - 12В.
Разделим на 2:
Uвых = 1.5Uвх - 6В.
Итак, данный неинвертирующий усилитель постоянного тока усиливает напряжение на конденсаторе в полтора раза и сдвигает его на минус шесть вольт.
Запоминаемое мгновенное значение напряжения поступает на конденсатор С1 через полевой транзистор с управляющим p-n переходом Q1 с выхода UF1-A.
Рассчитать коэффициент усиления неинвертирующего усилителя постоянного тока на UF1-A не составит труда. R1 и R3 обладают равным сопротивлением и делят входное напряжение пополам. R5 = 200 кОм = R, R5 = 560 кОм = 2.8 R. Ток в данном случае будет течь через R5 и R4 с выхода U1-A на шину -12В.
(Uвых - 0.5Uвх) / R = (0.5Uвх +12В)/2.8 R.
Uвых = 0.68 Uвх + 4.3В.
Если учесть усиление и смещение обоих УПТ, на выходе модуля получаем:
Ux2 = (0.68 Ux1 + 4.3В) * 1.5 - 6 В = Ux1 + 0.43В.
Почему Рэй Уилсон не обошёлся просто повторителями? Зачем ему было аттенюировать входное напряжение со сдвигом вверх и затем усиливать со сдвигом вниз?
Это сделано для того, чтобы гарантированно обеспечить работу электронного ключа на транзисторе Q1 во всём диапазоне напряжений входного сигнала, который заявлен от -5 до 5 вольт.
2N5457 является JFET — полевым транзистором с управляющим переходом. В отличие от привычных нам MOSFET — металл-оксид-полупроводник (МОП) транзисторов с изолированным затвором режима обогащения, JFET открыт при нулевом напряжении исток-затвор и закрыт при отрицательном. В этом он подобен редким МОП транзисторам режима обеднения, которые лично мне никогда не приходилось использовать. Напишите в комментариях, если приходилось вам.
Пока через C4 не приходит положительный тактирующий импульс с мультивибратора на U1-D, напряжение на катоде прямосмещённого кремниевого диода D1 равняется примерно 0.67 В. R6=R, R7 = 4.7R.
Ток через управляющий переход Q1 не течёт, совсем как у операционного усилителя. Рассчитаем напряжение на затворе Q1.
(-0.67В - Uз) / R = (Uз + 12В) / 4.7R
-3.15 В - 2.55 В = 5.7 Uз
Uз = -1 В
Таким образом, при отсутствии входного сигнала напряжение между затвором и истоком Q1 будет составлять -5.3 В, а при -5В на входе оно составит -1.9 В.
Напряжение отсечки, при котором JFET транзистор 2N5457 закрывается, варьируется от -0.5 до -6 вольт. С теми экземплярами транзисторов, что были в распоряжении Рэя Уилсона, -1.9 В оказалось достаточным. Если вы решите повторить эту схему, и что-то пойдёт не так, то вы теперь знаете, в каком направлении искать решение возникшей проблемы.
Если использовать полевые транзисторы не с управляющим переходом, а с изолированным затвором, то ёмкость затвора входного транзистора можно использовать в качестве ёмкости устройства выборки-хранения.
Если включить последовательно достаточное число таких УВХ и тактировать их импульсами с одного и того же общего входа, причём частота импульсов будет не ниже частоты Найквиста-Котельникова для верхней границы частотной полосы входного сигнала, мы получим аналоговую линию задержки сигнала.
Именно так работают микросхемы BBD — bucket brigade delay, тему которых мы затрагивали в статье про цифровую линию задержки аудиосигнала PT2399, пришедшую им на смену. И они представляют собой не что иное, как аналоговые регистры сдвига с последовательным входом и последовательным выходом.
▍ Автомат световых эффектов на К555ИР11
А в данном устройстве световых эффектов используются уже настоящие цифровые 4-разрядные регистры сдвига с параллельными входом и выходом К555ИР11 (74LS194). Данная микросхема имеет 4 режима работы, задаваемых управляющими входами S0 и S1.
- S1=0, S0=0 — блокировка. Микросхема не считывает состояние входов, не изменяет состояние входов, не реагирует на тактовые импульсы. Сохраняется предыдущее состояние выходов.
- S1=0, S0=1 — сдвиг вправо. Значение выхода Q2 записывается в Q3, Q1 — в Q2, Q0 — в Q1. Логический уровень, считанный со входа SR, записывается в Q0.
- S1=1, S0=0 — сдвиг влево. Значение выхода Q3 записывается в Q2, Q2 — в Q1, Q1 — в Q0. Логический уровень, считанный со входа SL, записывается в Q3.
- S1=1, S0=1 — параллельная загрузка. По переднему фронту тактового импульса микросхема считывает состояние параллельных входов и передаёт их на выход. Сдвиг при этом не осуществляется, и на состояние последовательных входов микросхема не реагирует.
Асинхронный, то есть не зависящий от тактовых импульсов сброс всех выходов в ноль происходит при низком логическом уровне на инвертирующем входе сброса CR. При этом микросхема игнорирует состояние всех остальных входов.
В этой схеме параллельные входы D0-D3 первого регистра сдвига U3 можно подтягивать к логической единице или нулю переключателями D0-D3. А параллельные входы второго регистра сдвига U4 жёстко подтянуты к земле.
На каждый из восьми выходов Q0-Q3 двух регистров подключено по светодиоду. Ток светодиодов ограничивается общим резистором R7. Потому чем больше светодиодов включено в данный момент, тем меньше тока ему достаётся, и соответственно тем ниже яркость каждого светодиода.
Входы сброса CR обоих регистров сдвига подтянуты к плюсу питания и не используются. Тактирующие входы CLK соединены вместе и получают тактовые импульсы от мультивибратора на универсальном прецизионном таймере КР1006ВИ1 (NE555). Частоту тактовых импульсов можно регулировать с помощью подстроечного резистора RP1 номиналом 10 кОм.
Управляющие входы обоих микросхем К555ИР11 также соединены вместе: S0 с S0 и S1 c S1. Сигналы на них приходят с логических инверторов на транзисторах Q1 и Q2.
В верхнем по схеме положении ключа K1 на входах S0 будет логическая единица, а на входах S1 — логический нуль. Оба регистра будут осуществлять сдвиг вправо. В нижнем положении K1 S0 = 0, S1 = 1, происходит сдвиг влево.
Однако в момент включения питания посредством выключателя K3 конденсаторы С3 и С4 начнут заряжаться, на мгновение представляя собой почти короткое замыкание, c сопротивлением, равным эффективному последовательному сопротивлению этого конденсатора (ЭПС, ESR). То же самое мы уже видели в схеме сброса десятичного счётчика-дешифратора К561ИЕ8 из статьи про китайскую олимпиаду по электронике.
Благодаря этим электролитическим конденсаторам, в момент включения питания первый регистр сдвига U3 получит управляющие сигналы S0 = 1, S1 = 1, и перейдёт в режим последовательного ввода. Если за время, пока длится это состояние, придёт тактирующий импульс, то U3 прочитает состояние переключателей D0-D3.
А этот импульс придёт, потому что в момент включения логический уровень на выходе таймера NE555 высокий. Низким он станет, когда времязадающий конденсатор, подключённый ко входам 2 и 6, зарядится до порога, составляющего 2/3 напряжения питания.
Микросхема U2 К555ЛН1 (74LS04) содержит 6 логических инверторов с двухтактными выходами. На её КМОП варианте К561ЛН2 (74HC04) мы собирали электронного жучка.
В верхнем по схеме положении переключателя К2 на вход сдвига вправо SR первого регистра U3 приходит логический уровень с выхода Q3 второго регистра U4, а на вход сдвига влево SL U4 — с выхода Q0 U3.
В нижнем положении К2 происходит то же самое, но сигналы инвертированы логическими элементами НЕ U2A и U2B. Остальные четыре инвертора микросхемы не используются.
▍ Выводы
Итак, в момент включения в первый регистр загружаются данные с переключателей D0-D3, а во второй — нули. Направление сдвига задаётся переключателем К1 и может быть изменено в процессе работы.
Положение переключателя К2 определяет, инвертировать ли данные в момент перехода из регистра в регистр. Эти режимы также можно переключать в процессе работы схемы.
Оперируя переключателями, можно получать разные варианты бегущих огней. Это может пригодиться для интерактивного оформления какой-нибудь демонстрационной или развлекательной инсталляции, а также электронной игрушки.
Telegram-канал с розыгрышами призов, новостями IT и постами о ретроиграх ????️
iShrimp
В общем, регистр сдвига представляет собой простой способ мультиплексировать цифровые сигналы. Но можно ли его использовать для считывания аналоговых сигналов? Допустим, если у меня есть массив резистивных датчиков (около сотни FSR), можно ли их считывать, подавая на них поочерёдно логическую единицу с помощью регистров сдвига?
Почему-то не могу найти в интернете примера такой схемы.
sim2q
Если правильно понял идею, то нужен регистр с "открытым" выходом или по диоду на каждый выход (что наверное снизит точность).
Lunathecat Автор
Подавать питание на резисторы с регистра сдвига? - Думаю, можно. Параметры выходных буферов микросхемы должны быть одинаковыми. Можно обойтись без диодов, если взять микросхему, у которой выходы не двухтактные, а с открытым коллектором.
Более простое и экономичное решение - воспользоваться счётчиком-дешифратором CD4017. По одному проводу его можно тактировать, по второму - сбрасывать. Нужное число счётчиков можно соединить каскадом.
Десятичный счётчик-дешифратор K561ИЕ8 (CD4017) и красивый эффект на нём / Хабр (habr.com)
Lunathecat Автор
Для считывания одним входом АЦП нескольких напряжений пригодится аналоговый мультиплексор. Здесь есть пример использования CD4066 - 4 электронные музыкальные шкатулки своими руками. Знакомимся с логическими микросхемами / Хабр (habr.com)
На днях буду собирать ещё одно устройство с аналоговым мультиплексором. Скоро про него расскажу.