Глава 9 Применение цифровых микросхем малой степени интеграции

Перед тем, как съесть свой первый пейотный грибочек, Материалист поинтересовался у Поставщика (чернокожего джазиста): «А вообще-то эта дрянь опасна?». «Мать твою, — ответил он. — Индейцы тысячелетиями жрут ее в каждое полнолуние».

Роберт Аптон Уилсон «Космический триггер»

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

Релаксационные схемы

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

Генераторы прямоугольных колебаний

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

Схема по рис. 9.1, а — базовая. При включении питания она начинает работать сразу и выдает меандр с размахом от 0 до Uпит. Частота на выходе определяется параметрами R1 и С1: период колебаний Т ~= 2R1C1. Резистор R2 в этом практически не участвует и нужен только для того, чтобы оградить защитные диоды микросхемы от перегрузки током разряда конденсатора С1. Величина его может изменяться от сотен ом до нескольких килоом. Величина же резистора R1 может изменяться от единиц килоом до 10 МОм, что позволяет избежать использования электролитических конденсаторов при малых частотах (напомним, что они очень нестабильны при работе во времязадающих цепях). Поэтому конденсатор С1 может применяться любой, с емкостью, начиная от нескольких десятков пикофарад, но только не электролитический. Практически указанные параметры элементов обеспечивают частоты от сотых долей герца до верхней границы рабочей частоты КМОП-микросхем в 1–2 МГц, а для быстродействующей КМОП-логики и выше, вплоть до 10 МГц и более.

Рис. 9.1. Схемы мультивибратора на логических элементах:

а — базовая схема на инверторах; б — схема на двухвходовых элементах с управлением; в — диаграмма состояний схемы на двухвходовых элементах «И-НЕ»; г — диаграмма состояний схемы на двухвходовых элементах «ИЛИ-НЕ»

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

Запоминать эти диаграммы нет необходимости, если обратиться к рис. 8.3, а. Из него следует, как описано в главе 8, что единица на входе «И-НЕ» и ноль на входе «ИЛИ-HE» являются разрешающими уровнями, следовательно, при этом наша схема будет функционировать как при объединении этих входов, т. е. подобно схеме на рис. 9.1, а. При запрещающих же уровнях на входе уровень на выходе будет устанавливаться так, как если бы никаких RC-цепочек не существовало.

Простейшие применения схемы с управлением — решение задачи приостановки генератора на время переходных процессов при включении питания, для чего к управляющему входу нужно подключить простейшую интегрирующую RC-цепочку. На рис. 9.2 показан другой вариант— схема звуковой сигнализации на микросхеме 561ЛA7 и одном транзисторе. Это пример случая, когда требуется определенный логический уровень при выключенной генерации, чтобы избежать протекания постоянного тока через динамик и не ставить при этом разделительный конденсатор.

Схема выдает сигнал около 500 Гц с периодом повторения около 0,5 с, если на управляющий вход подать сигнал высокого уровня. При низком уровне сигнала на этом входе, на выходе всей схемы также будет низкий уровень и постоянный ток через динамик не потечет. Транзисторный каскад лучше питать отдельным напряжением (например, нестабилизированным от входа стабилизатора питания микросхемы), потому что тогда достаточно мощные импульсы тока через динамик будут фильтроваться стабилизатором и не окажут вредного воздействия на остальные элементы схемы. При питании цепи динамика и микросхемы от одного и того же источника лучше разделить их «развязывающим» RC-фильтром, как показано на рис. 9.2 пунктиром.

Рис. 9.2. Схема звуковой сигнализации с динамиком на выходе

Коллекторное напряжение насыщения транзистора КТ972 (это транзистор с «супербетой», см. главу 3) составляет около 1,5 В, поэтому при питании от источника 5 В звук может быть достаточно тихим. Вместо динамика можно поставить пьезоэлектрический звуковой излучатель, тогда подойдет маломощный транзистор с обычным коэффициентом передачи. А вот о пьезоэффекте мы сейчас подробнее и поговорим.

Кварцевые резонаторы

Точность поддержания частоты в схемах по рис. 9.1 невысока. Частота «уходит» примерно на 10–20 % при изменении напряжения питания от 5 до 15 В и в достаточно большой степени зависит от температуры (высокостабильные резисторы и конденсаторы здесь не помогут и потому нецелесообразны). Чтобы избавиться от этого, необходимо использовать кварцевый резонатор (в просторечии — просто кварц). На кварцах работают все бытовые электронные часы, и вообще в любом современном бытовом электронном устройстве вы обязательно найдете кварц и иногда не один.

Подробности

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

Как, спросите вы, даже от температуры не будет зависеть? Да от нее же зависит вообще все на свете — и геометрические размеры в первую очередь! Вот именно— пьезоэлектриков, как называют вещества, ведущие себя подобно кварцу, много, но используют именно кварц, так как он, помимо пьезоэлектрических свойств, обладает еще и одним из самых низких температурных коэффициентов расширения. В результате кварцевые генераторы без каких-либо дополнительных ухищрений обеспечивают нестабильность частоты порядка 10-5, т. е. уход часов с таким генератором составляет не более 1 секунды в сутки. Именно распространение кварцевых генераторов привело к тому, что все измерения сейчас стараются свести к определению интервалов времени. Причем природа преподнесла здесь и еще один подарок: поскольку сам кварц является полным изолятором, то токов никаких через него не течет, и кварцевые генераторы в сочетании с КМОП-микросхемами почти не потребляют энергии.

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

Рис. 9.3. Схема кварцевого генератора на КМОП-инверторе

Параметры элементов можно менять в довольно больших пределах— так, емкость конденсаторов может меняться от 20 до 200 пФ (причем они не обязательно должны быть одинаковыми), а сопротивление резистора — от 100 кОм до 10 МОм. Однако целесообразнее выбирать как можно меньшие емкости и как можно большие сопротивления, иначе возрастает потребление от источника питания. Иногда для дополнительного снижения потребления последовательно с кварцем со стороны выхода инвертора ставят еще один резистор в несколько сотен килоом. Естественно, инвертор при таких сопротивлениях может быть только КМОП-типа (ТТЛ-генераторы с кварцевым возбуждением строят по иным схемам). Частота кварца снизу практически не ограничена (для низких частот обычно употребляют т. н. часовой кварц с частотой 32 768 Гц), верхний же предел при использовании серии CD4000B ограничивается 1 МГц. Для более высоких частот потребуются быстродействующие КМОП-серии 74АС и 74НС (К1564). В качестве инвертора, естественно, пригоден и многовходовой логический элемент с объединенными входами.

Кварцы выпускают на определенные частоты, причем если нужна повышенная точность, то можно приобрести специализированные очень стабильные резонаторы с погрешностью до 10-7, выпускаются и готовые генераторы на разные частоты (особенно большой выбор предлагает в этом отношении фирма, название которой обычно ассоциируется совсем с другими продуктами — Epson, приобретшая в свое время компанию, известную своей часовой торговой маркой Seiko). Установив вместо одного из постоянных конденсаторов подстроечный, частоту можно в очень небольших пределах (порядка 0,01 % от номинала) менять, но сейчас этим почти никто не пользуется, т. к. подстройку лучше осуществить цифровым способом, или просто приобрести высокостабильный кварц.

Заметки на полях

Мало кто знает, что в случае если под рукой нет подходящего кварца, то схему на рис. 9.3 вполне можно «завести», просто заменив резонатор на малогабаритную индуктивность. Частоту можно грубо прикинуть, если учесть, что постоянная времени LC-контура равна √LC. Если в качестве величины С подставить сумму емкостей обоих конденсаторов, то частота будет примерно равна единице, деленной на удвоенную величину вычисленной постоянной времени. Естественно, главное преимущество кварца— высокая стабильность— при этом пропадет, зато могут резко снизиться габариты, т. к. кварцевые резонаторы далеко не всегда отличаются миниатюрностью, а серийно выпускаемые индуктивности обычно не крупнее малогабаритного резистора мощностью 0,125 Вт.

Формирователи импульсов

Большое значение на практике имеют формирователи коротких импульсов, называемые еще «схемами выделения фронтов». На рис. 9.4, и приведена схема, которая делает это, как положено. При поступлении положительного фронта на вход он сразу же переключает выход последнего элемента «И-НЕ» в состояние логического нуля. На выходе цепочки из трех инверторов также возникнет «0», который вернет выход в состояние «1», но это произойдет не сразу, а спустя время, равное утроенной задержке срабатывания логических элементов. Поэтому на выходе возникнет короткая «иголка», длительность которой достаточна (задержка-то тройная!) для надежного срабатывания других элементов схемы. (Для КМОП длительность этого импульса составит несколько сотен наносекунд.) При желании можно выделить не фронт, а спад импульса (и получить при этом на выходе «иголку» положительной полярности), для этого потребуются элементы «ИЛИ-HE». А если использовать «Исключающее ИЛИ», то можно получать положительные импульсы при каждом переключении сигнала — и по фронту, и по спаду.

Замечание

В интуитивно понятном термине «фронт импульса» имеется некоторая неоднозначность, связанная с тем, что этим термином иногда обозначают только положительный перепад напряжения (т. е. переход из состояния «0» в «1»), чтобы отличить его от отрицательного (перехода из состояния «1» в «0»), который тогда называют «спадом импульса». В западной литературе соответствующие термины звучат, как «rising edge» и «falling edge» (буквально: «возрастающая кромка» и «падающая кромка»), что более соответствует смыслу.

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

Все здорово, но схема уж больно громоздкая для такой простой функции — целый корпус! На рис. 9.2 у нас был один корпус для какого сложного устройства, а тут — всего только выделение фронта. К тому же такие короткие импульсы очень сложно наблюдать на осциллографе. Поэтому на рис. 9.4, б и в приведены гораздо более экономичные схемы, которые делают то же самое, но неправильно. Почему неправильно? Потому что разработчики микросхем не рекомендуют использовать аналоговые узлы для построения цифровых схем. Вообще говоря, схемы генераторов (см. рис. 9.1) и одновибраторов (см. рис. 9.5) — тоже неправильные. Но они широко применяются, и нет причин для того, чтобы на тех же принципах не построить схемы выделения фронтов. Длительность импульса на выходе приведенных схем при указанных номиналах составит около 10 мкс.

Заметки на полях

В схемах генераторов на рис. 9.1 установлен дополнительный резистор (R2), ограничивающий ток через защитные диоды микросхемы. Дифференцирующая RC-цепочка, которая составляет основу этих схем, вырабатывает импульсы не только по нужному переключению сигнала, но и по противоположному, и при этом импульсы выходят за пределы питания, в чем вы можете убедиться, если взглянете на рис. 2.10. Здесь также применяется этот прием и потому в схемах на рис. 9.4, б и в установлены необязательные ограничительные резисторы 1 кОм. Замечу, что во всех этих схемах (и в мультивибраторах, и в одновибраторах далее) можно обойтись и без токоограничивающих резисторов — как мы знаем, у диодов достаточно высокая перегрузочная способность, если только они не перегреваются. Обычно в мультивибраторах резистор ставят, т. к. они работают непрерывно, а в схемах выделения фронтов и одновибраторах, рассчитанных на периодическое срабатывание, опускают. В них такой резистор целесообразен лишь при больших выдержках времени, т. е. при низких частотах, когда емкость конденсатора времязадающей цепи велика.

Рис. 9.4. Схемы формирователей импульсов:

а — стандартная схема формирователя коротких импульсов; б, в — схемы с использованием дифференциальных RC-цепочек; г — схема задержки

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

Одновибраторы

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

Схема на рис. 9.5, и работает следующим образом: в состоянии покоя на выходе схемы имеется состояние логической единицы, т. к. вход второго (выходного) элемента «И-НЕ» заземлен через резистор.

Рис. 9.5. Одновибраторы

Так как на входе тоже логическая единица, то на выходе первого (входного) элемента «И-НЕ» — логический ноль, конденсатор разряжен. При поступлении на вход положительного уровня на выходе первого элемента типа «И-НЕ» возникает состояние логической единицы, которое через дифференцирующую цепочку RC передается на вход второго элемента, так что на выходе схемы и на втором входе первого элемента оказывается логический ноль. Это состояние схемы, уже независимо от уровня входного сигнала, будет устойчиво (обратная связь как бы «перехватила» и «зафиксировала» уровень нуля на выходе) — пока конденсатор заряжается от выхода первого элемента через резистор R. Через время, примерно равное произведению RС, конденсатор зарядится до порога срабатывания выходного элемента «И-НЕ» и схема скачком перейдет обратно в состояние логической единицы по выходу.

Если по входу уже установлен уровень логической единицы (запускающий импульс закончился), то первый элемент также «перебросится» в начальное состояние и конденсатор С быстро разрядится через ограничительное сопротивление 1 кОм (если оно установлено) и входные защитные диоды второго элемента. Схема придет в начальное состояние в ожидании следующего запускающего импульса. Длительность импульса на выходе всегда будет примерно равна RС, даже в случае, если входной импульс длиннее (в этом случае конденсатор просто разрядится не сразу, а только тогда, когда закончится входной импульс). Совершенно аналогично работает схема на рис. 9.5, б, только с противоположными полярностями импульсов.

Главное применение одновибраторов— в качестве таймера, который формирует сигнал определенной длительности. Естественно, о высокой точности выдержки времени тут говорить не приходится, но часто это и не требуется. Например, если вы хотите ограничить по времени тревожный сигнал, подающийся с помощью устройства по рис. 9.2, то целесообразно управлять им от одновибратора, который запускается, скажем, нажатием кнопки. В одновибраторах для больших выдержек допустимы электролитические конденсаторы, хотя даже при использовании только керамических или полимерных типов с максимальными емкостями порядка 1–3 мкФ вполне достижимы выдержки в несколько десятков секунд.

Рассмотренные одновибраторы представляют собой схемы без перезапуски, т. е. длительность импульса не зависит от того, пришел ли еще раз входной импульс во время действия выходного или нет. Одновибраторы с перезапуском, в которых выходной импульс в этом случае продлевается (отсчет времени как бы начинается заново с нового импульса, когда бы он ни пришел), мы проектировать не будем, потому что они сложнее, и в этом случае предпочтительнее готовая микросхема (например, 561АГ1). Создать одновибратор (мультивибратор, кварцевый генератор) можно и на специальной микросхеме универсального таймера, известной под названием 555 с различными буквенными индексами (отечественный аналог—1006ВИ1).

Одновибратор может служить довольно эффективным средством подавления дребезга механических контактов, т. к. будет запускаться только от первого перепада уровней, причем независимо от того, «пролетают» подвижные контакты весь промежуток «туда-обратно» или нет (впрочем, на практике такого «пролета» и не случается). Главным его преимуществом в этом качестве, несмотря на довольно сложную схему, является пригодность двухвыводной кнопки, а не переключающей, как в схемах по рис. 8.3, б или на RS-триггерах (см. далее). Вход одновибратора при этом соединяют с питанием (в схеме рис. 9.5, a) или с «землей» (на рис. 9.5, б) через резистор, а кнопкой замыкают этот вход, соответственно, на «землю» или на питание (пример подсоединения см. на рис. 17.1).

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

Заметки на полях

Укажем, кстати, на недопустимость использования часто рекомендуемых и заманчивых по своей простоте схем «антидребезга» на основе интегрирующей цепочки, т. е. элементарного ФНЧ. Опыт показывает, что такие схемы крайне ненадежны даже при совместно с т. н. триггером Шмидта, который представляет собой обычный логический элемент с гистерезисной характеристикой. Гистерезис в случае логических элементов чаще всего не защищает от дребезга вообще, т. к. помеха располагается обычно вблизи питания или «земли», за пределами зоны нечувствительности. А что касается ФНЧ, то даже если вы умудритесь подобрать параметры фильтра так, что данная конкретная кнопка, как вам кажется, не дребезжит, то это не гарантирует, что в случае очень короткого или, наоборот, долгого нажатия схема сработает как надо, или что другая аналогичная кнопка будет также нормально работать с теми же параметрами RC-фильтра.

Триггеры

Триггер — это устройство для записи и хранения информации в количестве одного бита[8]. (Существуют — по большей части в теории— и многостабильные триггеры, которые могут хранить более одного бита, но на практике они не используются, кроме очень экзотических конструкций, вроде упоминавшейся в главе 7 ЭВМ «Сетунь»). Любая элементарная ячейка памяти, будь-то магнитный домен на пластинах жесткого диска, отражающая область на поверхности CD-ROM или конденсаторная ячейка электронного ОЗУ, обязательно обладает триггерными свойствами, т. е. может хранить информацию спустя еще долгое время после того, как она была в нее введена.

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

Чтобы вернуть ее в исходное состояние, надо подать точно такой же сигнал, но на вход второго элемента, который (вход) в схеме одновибратора у нас отсутствует. Если мы его введем, то получим симметричную схему с двумя входами, которые обозначаются буквами R и S (от слов Reset и Set, т. е. «сброс» и «установка»). Такое устройство носит название RS-триггера. Оба варианта такой схемы на элементах «И-НЕ» и «ИЛИ-HE» показаны на рис. 9.6. Легко сообразить, что если поменять все обозначения местами (R на S, а прямой выход на инверсный), то в схеме ничего не изменится, но не все триггерные схемы обладают подобной симметрией.

Рис. 9.6. Схемы триггеров на элементах «И-НЕ» (а) и «ИЛИ-НЕ» (б)

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

Вход S, естественно, означает ровно противоположное — установку выхода Q в состояние логической единицы, но, в отличие от входа R, который всегда означает обнуление, вход S в различных устройствах может использоваться и в немного других целях, а чаще вообще отсутствует. Входы R и S могут управляться различными полярностями сигнала в зависимости от построения триггера— для схемы на элементах «И-НЕ» по рис. 9.6, а это низкий уровень, потому входы R и S обозначены с инверсией, согласно положительной логике (уровни, которые меняют состояние триггера, называются активными, так, для схемы по рис. 9.6, а активным является низкий уровень). «Более правильная» схема в этом смысле — на элементах «ИЛИ-НЕ» по рис. 9.6, б, где активный уровень — высокий.

В схемах RS-триггеров подача активного уровня на R-вход ничего не меняет, если выход Q уже был в состоянии логического нуля, то же самое справедливо для S-входа при выходе Q в состоянии логической единицы. Однако пока на соответствующем входе действует напряжение активного уровня, подача активного уровня на второй вход запрещена. Это не означает, что триггер при этом сгорит, просто он потеряет свои триггерные свойства — на обоих выходах установится один и тот же уровень, а после одновременного снятия активного уровня со входов состояние будет неопределенным (точнее, будет определяться тем элементом, который переключится чуть позже другого).

Неопределенное состояние будет и после подачи питания, поэтому следует принимать специальные меры для установки схемы в нужное состояние после включения. Наиболее распространенной такой мерой является подача определенного уровня в начальный момент времени на один из требуемых входов с помощью RC-цепочки. Ввиду практической важности этого способа я приведу вариант соответствующей схемы, несмотря на ее очевидность (рис. 9.7, а). Лишние элементы необходимы для того, чтобы сохранить возможность произвольного сброса по отдельному R-входу, хотя на практике часто входы внешнего сброса и сброса по питанию объединены.

Рис. 9.7. Схемы триггеров с предустановкой при включении питания

В этой схеме конденсатор в первый момент времени после подачи питания разряжен и на входе логического элемента оказывается положительный уровень, который устанавливает триггер в состояние «О» на выходе Q. Затем конденсатор заряжается и в дальнейшем RC-цепочка больше не оказывает влияния на работу схемы. Постоянную времени RC лучше выбирать побольше, чтобы к моменту зарядки конденсатора успели пройти все переходные процессы, на схемах по рис. 9.7 она равна примерно 0,5 мс. Естественно, при этом следует позаботиться, чтобы на «настоящих» RS-входах к моменту окончания заряда конденсатора был неактивный уровень, иначе все пойдет насмарку. Чтобы избежать нагромождения элементов, в этой схеме предпочтительнее использовать трехвходовые элементы (561 ЛЕЮ), как показано на рис. 9.7, б.

Естественно, RS-триггеры выпускают и в интегральном исполнении (561ТР2 содержит четыре простых RS-триггера). Все более сложные триггеры, а также счетчики в интегральном исполнении обязательно имеют отдельные R-, S- или хотя бы только R-асинхронные входы.

Использование RS-триггера является самым «капитальным» способом решения проблемы дребезга контактов. Стандартная схема включения показана на рис. 9.8, а, однако нет никакой нужды «городить» такую схему с резисторами, относительно которых еще нужно соображать, к чему их подключать (для варианта с «ИЛИ-HE» их пришлось бы присоединять к «земле»). На рис. 9.8, б показана упрощенная схема, которая работает точно так же и при этом в ней пригодны любые инверторы, в том числе и одновходовые.

Рис. 9.8. Схемы «антидребезга» на RS-триггерах

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

D-триггеры

D-триггеры получили свое название от слова «delay», что означает «задержка». На самом деле их существует две разновидности, формально различающиеся только тем, что первая (статический D-триггер или триггер-защелка) управляется уровнем сигнала, как и все схемы, рассмотренные ранее, а вторая (динамический D-триггер) управляется фронтом импульса. Фактически же это разные по устройству и области применения схемы, потому объединение их под одним названием представляется не совсем удачным. Так, микросхема 561ТМЗ содержит четыре статических триггера-защелки, а ТМ2 — два динамических D-триггера с дополнительными входами R и S. Если тип не указывается, то обычно по умолчанию предполагается, что речь идет о динамических D-триггерах.

Статический D-триггер легко получить из RS-триггера путем небольшого усложнения его схемы (рис. 9.9, а). При наличии на входе С уровня логической единицы входные сигналы будут пропускаться на вход RS-триггера и схема будет повторять на выходе Q уровни на входе D. Если же мы установим на входе С уровень логического нуля, то схема немедленно «зависнет» в состоянии выхода, соответствующем входному уровню непосредственно перед приходом отрицательного фронта на вход С — то есть запомнит его! Поэтому такой триггер и называют защелкой — при подаче на вход С короткого тактового импульса он как бы «защелкивает» состояние входа.

Рис. 9.9. D-триггеры:

а — схема статического D-триггера; б — схема динамического D-триггера на основе двух статических; в — счетный триггер на основе динамического D-триггера

Динамические D-триггеры более универсальны и область применения у них куда шире, чем у статических. Динамический триггер сложнее по устройству. Один из способов построения динамического D-триггера из двух статических показан на рис. 9.9, б. Эта схема работает следующим образом: когда на общем входе С присутствует отрицательный уровень, состояние входа D переписывается на выход первого (слева) триггера, при этом второй триггер заперт. Сразу после положительного фронта на входе С это состояние переписывается во второй триггер и появляется на выходе Q, а первый триггер запирается. Таким образом, запоминание состояния общего D-входа происходит в точности в момент положительного перепада уровней и никогда больше. Если изменить местоположение инвертора и присоединить его ко входу второго триггера, а на первый триггер подавать тактовые импульсы напрямую, то срабатывание будет происходить по отрицательному фронту и такой тактовый вход будет считаться инверсным. Для того чтобы получить дополнительные входы принудительной установки триггера в нулевое и единичное состояния (R- и S-входы), нужно оба статических триггера реализовать на трехвходовых элементах и объединить соответствующие входы у обоих триггеров — устанавливать по входам R и S только выходной триггер недостаточно (подумайте, почему?).

Счетный триггер

На рис. 9.9, в показана самая простая схема счетного триггера на основе динамического D-триггера. Из сказанного ясно, как она работает: при каждом положительном перепаде на выход Q будет переписываться состояние противоположного выхода Q¯, т. е. с приходом каждого тактового импульса система изменяет свое состояние на противоположное, в результате чего на выходе сформируется симметричный (независимо от скважности входных импульсов) меандр с частотой, вдвое меньшей, чем входная. Такой триггер можно считать делителем частоты на два или одноразрядным двоичным счетчиком — в зависимости от того, для чего он используется. В отличие от всех остальных типов триггеров (а кроме описанных, распространены еще и т. н. JK-триггеры, на которых мы здесь не останавливаемся), счетные триггеры в интегральном исполнении отдельно не выпускают (их легко получить, например, из D-триггеров), а изготавливают только готовые многоразрядные двоичные счетчики, из таких триггеров составленные. К рассмотрению счетчиков мы перейдем чуть далее, а пока кратко остановимся на регистрах.

Регистры

Регистрами называют устройства для хранения двоичных чисел. Количество разрядов в регистрах, выпускаемых отдельно, обычно не превышает восьми, но в составе других микросхем могут быть и регистры с большей разрядностью — вплоть до 128 бит в процессорах типа Pentium или Athlon.

Простейший одноразрядный регистр— это описанный в предыдущем разделе статический D-триггер. Большинство регистров в микроконтроллерах, а также ячеек статической памяти (SRAM) представляют собой именно такие триггеры-защелки. Вообще большинство типов электронных ЗУ, за исключением таких устройств, как магнитные или оптические диски, можно рассматривать как совокупность регистров. Например, четыре триггера-защелки, входящие в микросхему 561ТМЗ, образуют четырехразрядный регистр с параллельной записью и считыванием, причем тактовый вход в этой микросхеме у всех четырех разрядов общий. Как и сам триггер, такой регистр называют защелкой.

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

Последовательный регистр является неким обобщением конструкции D-триггера. Работу динамического D-триггера можно рассматривать, как процесс сдвига информации от входа через первый триггер ко второму при поступлении соответствующих перепадов на тактовом входе. В последовательном регистре, который в простейшем случае представляет собой просто соединение таких триггеров друг за другом, происходит нечто подобное: с каждым фронтом тактового импульса информация сдвигается от младшего разряда к старшему, при этом в младший разряд записывается состояние входа. Считывать (и записывать) информацию при этом обычно можно и из каждого разряда в отдельности, как и в случае регистра-защелки, и через единый последовательный вход и выход. Такие регистры получили еще название сдвиговых (пример — 561ИР2). Они широко используются для последовательного ввода и вывода информации. Скажем, для вывода восьми бит через последовательный порт RS-232 достаточно записать их в такой регистр, а потом подать на него восемь тактовых импульсов с нужной частотой (см. главу 16).

Счетчики

Самый простой счетчик можно получить, если соединить последовательно ряд счетных триггеров, как показано на рис. 9.10, а. Схема обладает одной особенностью, в которой легко разобраться, если построить диаграмму работы этого счетчика, начиная с состояния, в котором все триггеры находятся в состоянии низкого уровня на выходе («0000»). В самом деле, при подаче первого же импульса триггеры перейдут в состояние со всеми единицами («1111»)! Если строить диаграмму дальше, то мы увидим, что последовательные состояния будут такими: «1110», «1101» и т. д. В этом легко узнать последовательный ряд чисел 15, 14, 13, т. е. счетчик получился вычитающим, а не суммирующим.

А как можно получить суммирующий счетчик? Очень просто — надо ко входу каждого следующего триггера подсоединить не прямой выход предыдущего, а инверсный. Если при этом тактовые импульсы подавать также через инвертор (рис. 9.10, б), тогда счетчик будет срабатывать по заднему (отрицательному) фронту входного импульса, а не по переднему (разумеется, можно просто выбрать триггеры с инверсным тактовым входом). В этом случае будет все в порядке — входные импульсы будут суммироваться (см. диаграмму) и мы получим ряд последовательных состояний: «0000», «0001», «00010». «0011» и т. д.

Рис. 9.10. Схемы счетчиков на D-триггерах:

а — вычитающего; б — суммирующего

Заметки на полях

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

У счетчиков, построенных по такой простейшей схеме, есть один крупный недостаток: переключение триггеров происходит асинхронно, сигнал от входа должен пройти всю цепочку, пока на выходе также изменится уровень. Эти, казалось бы, незначительные задержки могут, однако, привести к значительным неприятностям, типа возникновения лишних «иголок» при дешифрировании состояний выхода. А при больших частотах входных импульсов, на пределе возможностей конкретных логических элементов, фронты сигналов на выходах вообще могут приобрести совершенно хаотическое расположение относительно входного сигнала, так, что дешифрировать состояние счетчика будет невозможно. Поэтому практически все счетчики в интегральном исполнении делают по иным, синхронным, схемам, когда входной тактовый сигнал подается одновременно на все разряды, и фронты выстраиваются строго «по линеечке», независимо от задержек в том или ином триггере. Так устроены, например, два четырехразрядных счетчика, образующие микросхему 561ИЕ10.

Наиболее универсальные счетчики позволяют записывать информацию параллельно, как в регистрах. Тогда счетчик может начинать отсчет не с нулевого значения, а с некоего заданного числа. Таковы, например, счетчики 561ИЕ11 и 561ИЕ14. Подробно разбирать мы такие схемы не будем, т. к. самостоятельно их строить не придется, но для понимания того, как устроены счетчики-таймеры в микроконтроллерах, эта информация пригодится.

На практике счетчики используют не только по прямому назначению — для подсчета импульсов, — но и в качестве управляемых делителей частоты. На этом основано их применение в электронных часах. Обычный часовой кварц по технологическим причинам удобно делать на частоту 32 768 Гц. Пропустив частоту с генератора, построенного на таком кварце, через 16-разрядный счетчик-делитель (например, 561НЕ16), мы получим на выходе колебания с периодом ровно в 1 с, которые удобны для дальнейшего формирования минут и часов. На практике из-за сложности суточного счета времени и особенно календарных дат, от дискретных счетчиков для таких целей давно отказались, и часы делают на специализированных микросхемах RTC (Real Time Clock— «часы реального времени») и микроконтроллерах, и тем, и другим мы еще будем заниматься. Но в основе работы таких интегральных часов все равно лежат счетчики-делители частоты — аппаратные или программные.