Занимательная микроэлектроника — страница 42 из 117

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

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

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

Более распространены в электронике т. н. равномерные коды, в которых число разрядов постоянно и определено заранее, благодаря чему разделители не требуются. Но бывает и иначе, например, почтовая кодировка UTF-8, основанная на 16-битовом Unicode, использует неравномерные коды. За экономию объема сообщения приходится расплачиваться довольно сложным алгоритмом кодирования и декодирования. Известная азбука Брайля для слепых— типичный пример двоичного кода, в котором число разрядов равно 6. По понятным причинам чаще употребляют коды, в которых число разрядов равно 8, и составляет целый байт, или более длинные, с числом разрядов, кратным 8. Типичные представители таких кодов — всем известный ASCII, который составляет основу любой современной компьютерной кодировки, а также Unicode — двухбайтовый код, позволяющий закодировать знаки всех алфавитов мира.


Управление цифровыми индикаторами

В электронике для разных целей необходимы и другие двоичные коды. Мы сейчас рассмотрим код, который для краткости будем называть семисегментным — т. е. тот, что служит для отображения численной информации на цифровых семисегментных индикаторах. Один разряд такого индикатора, как мы знаем из главы 3, состоит обычно из семи сегментов-полосок (на светодиодах или жидких кристаллах), расположенных в пространстве определенным образом. На рис. 8.4 показано расположение и общепринятые обозначения этих сегментов буквами (а, Ь, с и т. д., употребляются и большие, и маленькие буквы), а также соответствующий семисегментный код, в котором «1» обозначает светящийся сегмент, а «0»— несветящийся. Сегмент h, который представляет собой запятую, в формировании цифры не участвует, управляется отдельно и потому мы его не рассматриваем.



Рис. 8.4. Обозначения сегментов и таблица состояний семисегментного индикатора


Разумеется, на семисегментных индикаторах можно отобразить и некоторые другие символы (знак «минус», буквы С, A, F, П, Н или Р), но эти возможности мы также оставим пока в стороне. Для того чтобы отобразить больше символов, есть и другие типы цифровых индикаторов, например, шестнадцатисегментные или матричные, но управление ими сложнее и мы остановимся на семисегментных.

Как заставить электронную схему показывать цифру на семисегментном индикаторе? Ведь изначально мы чаще всего имеем цифру в двоичном (а не двоично-десятичном) представлении. Четырехразрядное двоичное число имеет диапазон от 0 до 16, что на одном семисегментном индикаторе отобразить невозможно даже в шестнадцатеричном исполнении, т. к. букву «В» нельзя будет отличить от восьмерки, a «D» — от нуля. Это означает, что. вообще говоря, мы должны провести нашу перекодировку в два этапа: сначала представить число в распакованном двоично-десятичном виде (см. главу 7), затем преобразовать четырехразрядный двоично-десятичный код в семисегментный. Здесь мы ограничимся рассмотрением только последней задачи, т. к. первая практически всегда уже решена, поскольку двоично-десятичное число является результатом счета с помощью двоично-десятичного же счетчика (см. главу 9) или формируется в регистрах микроконтроллера программно.

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



Рис. 8.5.Полная схема дешифратора для управления семисегментным индикатором


Здесь х1х4 — входной двоично-десятичный код, причем х1 соответствует младшему разряду. Как видите, схема довольно громоздкая: потребуется 10 инверторов, 11 четырехвходовых «И-НЕ», 2 трехвходовых «И-НЕ», 2 двухвходовых «И-НЕ». В зависимости от выбора реальной элементной базы (согласно приведенным в главе 7 логическим соотношениям, одни и те же функции можно реализовать по-разному), число необходимых микросхем может составить порядка 10 корпусов и более. И это без учета того, что напрямую подключать светодиодные индикаторы к этой схеме нельзя, т. к. слишком велика нагрузка, которая может «просадить» логический уровень, например, на выводе сегмента «с». Потому здесь потребуются еще усилители-повторители выходного сигнала. А для жидкокристаллических индикаторов необходим генератор прямоугольных импульсов, т. к. они управляются переменным напряжением.

По этим причинам на практике всегда, конечно, ставят готовые дешифраторы, которые часто называют еще драйверами индикаторов. Один из самых простых таких дешифраторов— микросхема 561ИД5 (рис. 8.6), которая «заточена» под управление ЖК-дисплеями и обладает расширенной функциональностью по сравнению с простейшей схемой рис. 8.5. Она подает пульсирующий, как это полагается, сигнал на ЖК-сегменты, причем диапазон питания может быть расширен в отрицательную сторону, так что микросхема может управлять большими индикаторами, для которых требуется повышенное напряжение. Кроме этого, в ней имеется возможность «защелки» состояния выходов, что важно при управлении индикацией состояния счетчиков: на вход «защелки» Е следует подавать высокий уровень (логическую единицу), когда нужно, чтобы результаты сменились, в противном случае состояние выходов а-g «зависнет», независимо от изменения входных кодов. Можно индицировать буквы L, R, Р, Н и знак «минус» (схема по рис. 8.5 коды 0Ah—0Fh вовсе не использует, выходная комбинация будет совпадать с уже известными). Несложно приспособить эту микросхему и для управления светодиодными индикаторами — для этого придется поставить ключевые транзисторы или просто буферные усилители (микросхемы типа 561ЛН2 или 561ПУ4) по выходу. Для ЖК-индикаторов на вход F подают частоту в несколько десятков герц, для светодиодных — напряжение логической единицы.



Рис. 8.6.Разводка выводов дешифратора 561ИД5


Двоичный/десятичный дешифратор

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

Для решения такой задачи обратимся к благословенным производителям микросхем, которые за нас уже все, как водится, придумали: это микросхема 561ИД1, разводка выводов которой приведена на рис. 8.7, а. Здесь цифры 1, 2, 4 и 8 внутри прямоугольника, обозначающего микросхему, соответствуют весам двоичных разрядов х1х4 что общепринято для выводов микросхем, представляющих двоичное число. Снаружи цифрами 0–9 обозначены десятичные выходы.



Рис. 8.7. Дешифратор 561ИД:

а — разводка выводов; б — схема двоично/шестнадцатеричного дешифратора


Далее приведена таблица состояний для микросхемы 561ИД1, в том числе и для состояний выхода при входном коде, превышающем девятку (пустые клеточки означают нулевое состояние выхода). Заметим, что коды более 09h (1001) не задействованы (как и в «самодельном» дешифраторе по рис. 8.5), т. к. при «бессмысленной» с точки зрения двоично-десятичного числа комбинации на входе выходы повторяют то восьмерку, то девятку.