2
i
– 1), т.е. ±1; ±3; ±7; ±15 и т.д., причем знаки весовых коэффициентов чередуются у единиц, перебираемых в кодовой комбинации слева направо (первая встреченная единица всегда имеет положительный вес).
Поэтому, хотя числовое значение комбинации кода Грея обычно находят после перехода к натуральному двоичному коду :
N(01011110b) = 64 + 16 + 8 + 4 + 2 = 94, где число N записано как функция кодовой комбинации, а b означает натуральный код; можно вычислить то же значение проще, без промежуточного преобразования, непосредственно в коде Грея (g):
N(01110001g) = 127 – 63 + 31 – 1 = 94.
Двоично-десятичные однопеременные коды применяются значительно реже, чем код Грея; однако на их примере можно видеть, что принцип отражения – не единственный прием построения однопеременного кода.
Начнем с того, что всякий четырехбитовый (тетрадный) однопеременный код для изображения десятичных цифр можно вписать в карту Вейча – Карно следующим образом. Разметим столбцы и строки карты комбинациями двухбитового кода Грея и припишем каждой клетке четырехбитовую комбинацию из битов столбца, за которыми следуют биты строки. Вписав цифры от 0 до 9 в карту так, чтобы соседние цифры оказались в смежных (по обычным правилам) клетках, а цифра 9 была в клетке, смежной с цифрой 0, получим один из возможных однопеременных кодов. Три примера приведены в картах таблицы 2.4 и в соответствующих им колонках таблицы 2.3..
Так, симметричное расположение цифр, показанное в карте B
1
таблицы
2.4, дает очень удобный код Уоттса. Из соответствующего столбца B
1
таблицы
2.3 видно, что при использовании этого кода в многодекадном преобразователе отражение последовательности десяти комбинаций, (происходящее во всех циклах с нечетным числом единиц в более старших разрядах) не меняет
51
структуры дорожек (битовых колонок в таблице) трех младших двоичных разрядов тетрады.
Однако структура дорожек изменится, если цифры в карте расположить несимметрично. Такой пример (
код Томпкинса) приведен в карте
B2 табл. 2.4 и в столбце
B2 табл. 2.3. Видно, что лишь в пределах одной декады три разряда могут быть считаны с одной кодовой дорожки (в каждой из колонок – пять единиц подряд); но уже в последовательности из двадцати комбинаций все колонки в результате отражения становятся различными. В подобных случаях полезна замена принципа отражения
принципом инверсии двоичного разряда, нарушающего однопеременность,иллюстрируемого картой
B3табл. 2.4 и столбцом
B3 табл. 2.3. В этом столбце сохранены структуры колонок трех разрядов тетрады, и оставлена возможность считывания их с одной кодовой дорожки.
Отметим, что столбец
B1 таблицы 2.3 удовлетворяет одновременно как принципу отражения, так и принципу инверсии двоичного разряда, нарушающего однопеременность.
Структура совокупности колонок кодовых таблиц, о которой только что говорилось, связана с еще одним интересным, лежащим на границе
аналогового и кодового представлений информации, понятием –
фазовым представлением кодов (рис. 2.9)
. 0 1 2 3 4 5 6 7 8
x
α
1
x
α
2
x
α
3
x
α
1
x
α
2
x
α
3
Рис. 2.9. а) б)
B100 01 11 10 00 0 - - 9 01 1 - - 8 11 2 - - 7 10 3 4 5 6
B200 01 11 10 00 0 - 8 9 01 1 - 7 -
11 2 - 6 -
10 3 4 5 -
B300 01 11 10 00 0 7 8 9 01 1 - - -
11 2 5 4 3 10
- 6 - -
Таблица 2.4
52
Рассмотрим набор функций вида f
i
(x) = sin(2πx/2
i
) и припишем двоичной переменной α
i
значение 0, если f
i
(x) > 0, и значение 1, если f
i
(x) < 0.
Совокупность α
n
α
n–1
…α
2
α
1
для некоторого аргумента x, общего для всех функций (рис. 2.9, а), есть кодовая комбинация натурального двоичного кода, изображающая целое число N = ent(x), где ent означает целую часть.
Аналогично, набор функций вида f
i
(x) = cos(πx/2
i
) позволяет получить кодовую таблицу кода Грея (рис. 2.9, б). Отметим, что на графиках рисунка 2.9 значение кодовой комбинации N принимается одним и тем же на протяжении всего единичного отрезка оси абсцисс; например, N = 3 при 3 ≤ x < 4.
Фазовое представление кодов удобно использовать при описании работы
АЦ преобразователей, основанных на волновых явлениях, в частности, построенных на базе интерферометров.
Можно обобщить методику фазового представления кодов, допуская смещение гармонических функций как по оси абсцисс, так и по оси ординат.
Такое обобщение может быть полезным при описании различных устройств интерполяции внутри цикла синусно-косинусного сигнала (см. выше раздел
1.5.5).
Например, на рис. 2.10 показана совокупность кодовых сигнальных функций, типичная для одного из способов интерполяции – такие кодовые комбинации получаются (не будем отвлекаться на детали реализации) на выходах набора компараторов, входящего в устройство интерполяции. В качестве аргумента в данном случае удобно рассматривать преобразуемый атрибут, например, пространственную координату. Ясно. что для описания (с помощью методики фазового представления) кодовых функций с неодинаковой длиной «нулевых» и «единичных» участков может быть использовано смещение исходных гармонических функций по оси ординат.
Графики типа рисунка 2.10 более наглядны, чем кодовые таблицы, и могут служить удобным средством, облегчающим проектирование логических цепей преобразования кодов, в частности, в тех же устройствах интерполяции.
Рис. 2.10
a b c d e f g h
53
2.2.4. Представление знакопеременных величин в цифровых средствах измерений В большинстве случаев измеряемые средствами ЦИТ реализации величин или, в более общем виде, атрибутов – различные напряжения, токи, пространственные координаты и т.д. – могут иметь как положительный, так и отрицательный знак (применительно к напряжениям используют также термин
полярность). Даже при измерении беззнаковых величин, таких как масса, электрическое сопротивление или абсолютная температура,
разности и
приращения измеряемых величин могут иметь различные знаки.
Способы кодового представления знакопеременных величин мало зависят от структур выбранных кодов, если последние предназначаются только для представления чисел.
Используются три основных способа: дополнительные коды, смещенные коды и прямые коды со знаком. Принцип построения
дополнительных кодов основан на том, что таблицу числового кода, как правило, можно замкнуть в кольцо: прибавление единицы к последнему числу таблицы дает число, расположенное в ее начале.
Соответственно, если отнять единицу от нуля, расположенного в начале таблицы, получится число, кодовая комбинация которого находится в конце таблицы.
В дополнительном коде этой комбинации присваивается значение минус единицы, и вычитание может быть продолжено дальше до середины таблицы. Таким образом, отрицательные числа располагаются в интервале от середины до конца таблицы.
При переходе от натурального
n-разрядного двоичного кода к дополнительному коду старший (
n-й) разряд становится знаковым (значение
αn = 0 соответствует неотрицательным, а
αn = 1 – отрицательным числам); при этом количество изображаемых положительных чисел оказывается равным
2n-1 – 1, а отрицательных
2n-1.
Общее количество комбинаций, включая нулевую, остается равным
2n. То же справедливо для дополнительного кода Грея.
Ясно, что любой АЦ преобразователь, основанный на реверсивном счете импульсов, при переходе измеряемой величины через нуль в отрицательную область
автоматически даст отсчет в дополнительном коде, если только не организовать логическими средствами запрет такого перехода. Например, в дополнительном коде будет работать
инкрементный – см. рис. 1.22 в разделе
1.5.5 – преобразователь перемещение → код.
Точно так же, если использовать для преобразования угловой координаты кодированный диск, размеченный по всей окружности всеми возможными кодовыми комбинациями, то можно с одинаковым правом считать диапазоном изменения координаты 0…360° или (–180…+180)°,
не меняя рисунка кода и начального положения воспринимающих элементов, будь то натуральный двоичный код, двоично-сдвинутый код или код Грея. В любом из этих случаев отрицательные углы будут отсчитываться в дополнительном коде
(заметим, что
понятие дополнительный код относится ко всей кодовой таблице, включающей как отрицательные, так и положительные числа).
Двоичный дополнительный код является
взвешенным; вес старшего
(знакового) разряда равен (–
2n-1), остальные разряды имеют веса
2i-1, как и в натуральном двоичном коде. Например, комбинация 10001110 двоичного дополнительного кода может быть расшифрована как –128 + 8 + 4 + 2 = –114.
Другой способ расшифровки состоит в нахождении модуля числа по известному правилу: инвертировать все биты комбинации отрицательного числа и
54
прибавить 1. Для данного примера модуль 01110001 + 1 расшифровывается как
64 + 32 + 16 + 2 = 114.
Смещенные коды применяются в случаях, когда нужно перевести АЦП или ЦАП с однополярной характеристикой в биполярный режим
На рис. 2.11 слева изображена однополярная характеристика преобразования некоторого АЦП, отображающего положительное напряжение n-разрядным натуральным двоичным кодом. Предположим, что необходимо использовать этот АЦП для преобразования биполярного сигнала с симметричным относительно нуля диапазоном изменения, Пусть для простоты размах преобразуемого сигнала соответствует входному диапазону АЦП:
0…U
m
. Тогда достаточно включить в измерительный канал перед входом АЦП аналоговый сумматор, добавляющий к преобразуемому напряжению U
x
смещающее напряжение U
смещ
той же полярности, что и входной сигнал АЦП, и такого размера, чтобы при U
x
= 0 выходная кодовая комбинация АЦП имела вид 1000…00. Ранее, в натуральном двоичном коде, она соответствовала числу
2
n-1
; теперь же, в смещенном коде, она должна обозначать 0. Результирующая характеристика изображена на рис. 2.11 справа.
Аналогично вводится смещенный код для ЦАП. Чтобы преобразовать однополярную характеристику ЦАП в биполярную, к его выходному напряжению добавляют смещающее напряжение
противоположной
полярности.
Значения комбинаций смещенного двоичного кода могут быть найдены по очевидной формуле
На следующей странице в табл. 2.5 приведены значения одних и тех же кодовых комбинаций (из начала, середины и конца кодовых таблиц) для трех различных двоичных кодов: натурального (беззнакового), дополнительного и смещенного. Видно, что для любого числа N комбинации смещенного и дополнительного кодов различаются только в старшем (знаковом) разряде.
Например, отрицательные числа (отмеченные в табл. 2.5 заливкой) имеют знаковый разряд, равный в дополнительном коде 1, а в смещенном 0, остальные же разряды полностью совпадают.
2 2
1 1
1
∑
=
−
−
−
=
n
i
n
i
i
N
α
U
m–
U
m+
0 2
n-1
U
N
0
U
m
2
n
– 1
U
смещ
U
N
Рис. 2.11
Отформатировано
Отформатировано
Отформатировано
Отформатировано
Отформатировано
Отформатировано
55
Таблица 2.5
Значение N кодовой комбинации в двоичных кодах:
Кодовая комбинация натуральном дополнительном смещенном
111…111 2
n
– 1
– 1 2
n-1
– 1 111…110 2
n
– 2
– 2 2
n-1
– 2 111…101 2
n
– 3
– 3 2
n-1
– 3
… … … …
100…010 2
n-1
+ 2
– 2
n-1
+ 2 2
100…001 2
n-1
+ 1
– 2
n-1
+ 1 1
100…000 2
n-1
– 2
n-1 0
011…111 2
n-1
– 1 2
n-1
– 1
– 1 011…110 2
n-1
– 2 2
n-1
– 2
– 2 011…101 2
n-1
– 3 2
n-1
– 3
– 3
… … … …
000…010 2 2 – 2
n-1
+ 2 000…001 1 1 – 2
n-1
+ 1 000…000 0 0
– 2
n-1
Прямые коды со знаком применяются преимущественно в цифровых приборах и калибраторах, обменивающихся данными с человеком. Нам привычна именно такая форма представления знакопеременных чисел: отдельно кодируется знак, отдельно – модуль числа. Один из способов получения такого кода при АЦ преобразовании можно объяснить на примере АЦП двухтактного интегрирования, временная диаграмма которого была приведена на рис. 1.19 раздела 1.5.4. Предположим, что преобразуемая величина U
X
на входе этого
АЦП меняет полярность. Тогда напряжение U
инт
в такте интегрирования U
X будет изменяться в другую (на рисунке 1.19 – в отрицательную) сторону. Знак этого изменения определяют, опрашивая компаратор перед окончанием такта интегрирования U
X
, и по полученному результату выбирают, какой источник опорного напряжения U
REF
– положительной или отрицательной полярности – подключать во втором такте. Таким образом, сперва (в конце первого такта) определяется знак U
X
, а затем (по окончании второго такта) становится известным его модуль, выраженный числом сосчитанных импульсов шкалы- посредника.
Подобный же метод получения отсчета в прямом коде реализуют в цифровых компенсаторах поразрядного уравновешивания (последовательных приближений). Эти приборы по структуре аналогичны АЦП рисунка 1.12, но строятся на базе ЦАП с кодоуправляемыми делителями напряжения или тока
(см. раздел 1.5.3), допускающими подачу опорного напряжения различной полярности. В начале цикла преобразования устанавливают нулевой выходной сигнал ЦАП, и компаратор дает выходной сигнал, соответствующий полярности
U
X
. В зависимости от последней выбирают полярность опорного напряжения
ЦАП, а, следовательно, и полярность выходного сигнала ЦАП, с которым сравнивается входной сигнал АЦП. Отметим, что при этом одновременно с переключением U
REF
должна изменяться логика работы компаратора: его сигнал, который при одной полярности U
REF
воспринимался как «много»
56
(обычно под этим понимается условие |
µUREF| > |
UX|), при другой полярности будет означать «мало». Аналогичное переключение компаратора должно выполняться и в рассмотренном выше биполярном АЦП двухтактного интегрирования.
Известны также структуры АЦ преобразователей, которые без каких- либо переключений формируют кодовый результат, соответствующий модулю преобразуемого напряжения; в таких случаях полярность этого напряжения приходится определять независимым методом.
2.2.5. Выбор кодов из соображений удобства индикации и регистрации данных Индикация кодового результата преобразования нужна главным образом в цифровых приборах, обменивающихся данными с человеком; при этом, естественно, результат представляется (и при необходимости регистрируется) в десятичной системе. В ЦСИ домикропроцессорных поколений это заставляло использовать во всех аналого-цифровых узлах двоично-десятичные коды (см. выше раздел 2.2.3); современная элементная база позволяет производить большинство преобразований в двоичном коде, и только перед выдачей данных на индикатор выполнять программными средствами
(аппаратные преобразователи многоразрядных кодов довольно сложны) преобразование в код, удобный для индикации.
Двоично-десятичные коды, вообще говоря, не избавляют от необходимости преобразования кодового изображения десятичных цифр перед непосредственной подачей сигнала на индикатор. Средства такого преобразования называют в более простых случаях (например, при преобразовании кода 8421 в код «один из 10»)
дешифраторами, в более сложных –
знакогенераторами.
На ранних этапах развития ЦИТ преимущественно использовались цифровые десятичные индикаторы, работавшие в коде
«один из 10»: для высвечивания какой-либо цифры следовало зажечь одну из 10 лампочек накаливания или соединить с общей шиной один из 10 катодов газоразрядной индикаторной лампы. Соответственно появились микросхемы дешифраторов с большим выходным током (ИД10 в составе серий 155 … 555 – до 80 мА) или большим допустимым перепадом выходного напряжения (155ИД1 – до 60 В).
Позже получили распространение знакосинтезирующие светодиодные и жидкокристаллические индикаторы, в основном семисегментные (реже встречались другие физические принципы индикации и другие числа сегментов). Для работы с ними понадобились преобразователи кода 8421 в
«семисегментный» код.
Сегменты индикатора
приято обозначать латинскими буквами так, как показано на рис. 2.12.
Если сопоставить видимому при индикации какой- либо цифры сегменту значение двоичного символа 1, а невидимому соответственно 0 (этим значениям в зависимости от устройства индикатора могут соответствовать совершенно различные физические сигналы), то код семисегментного индикатора изобразится так, как показано ниже в табл. 2.6.
Рис. 2.12 g f e d c b a
57
Светодиодные (LED – light emitting diodes) семисегментные индикаторы требуют сравнительно большого тока, примерно от 3 до 20 мА на сегмент; жидкокристаллические (LCD – liquid crystal devices) более экономичны, но сложнее в управлении: при сигнале в виде меандра, подаваемом на подложку индикатора,
противофазный меандр на сегменте делает последний видимым, а
синфазный – невидимым. Для семисегментных индикаторов также выпущены дешифраторы (например, 514ИД1 и ИД2 для светодиодных, 564ИД4 и ИД5 для жидкокристаллических); но в ЦСИ с микропроцессорным контроллером нетрудно обойтись без дешифраторов, реализуя знакогенератор в виде таблицы в программе контроллера.
Семисегментные индикаторы позволяют, наряду с цифрами, индицировать некоторые буквы и знаки, но набор их очень ограничен. Намного более широкие возможности обеспечивают
матричные индикаторы. В настоящее время существует много типов матричных индикаторов со встроенными устройствами управления, которые позволяют индицировать цифры, буквы и другие символы и при этом не требуют от разработчика знания, как конкретно формируется тот или иной символ. Это достигается благодаря использованию в качестве входного кода микросхем достаточно универсального алфавитно-цифрового кода, например, ASCII – American
Standard Code for Information Interchange. Из различных его вариантов часто используется семибитовый (с нулевым старшим битом в байте), содержащий цифры, прописные и строчные латинские буквы, знаки препинания и некоторые другие символы, а также ряд служебных кодовых комбинаций. Восьмибитовая отечественная версия –
код обмена информацией КОИ-8 – позволяет индицировать также прописные и строчные русские буквы.
Достоинством кода ASCII (принято читать эту аббревиатуру как «аски» с ударением на «и») является закономерное расположение цифр и букв в его таблице. Цифры от 0 до 9 изображаются соответственно комбинациями от
00110000 до 00111001, т.е. к старшему полубайту 0011
добавляется младший полубайт, представляющий собой просто изображение цифры в двоично- десятичном коде 8421.
Чтобы получить комбинацию кода ASCII для прописной (заглавной) латинской буквы, нужно к трем битам 010 приписать пятибитовый номер буквы
Таблица 2.6.
Сегменты индикатора
Цифры a b c d e f g
0 1 1 1 1 1 1 0 1
0 1 1 0 0 0 0 2
1 1 0 1 1 0 1 3
1 1 1 1 0 0 1 4
0 1 1 0 0 1 1 5
1 0 1 1 0 1 1 6
1 0 1 1 1 1 1 7
1 1 1 0 0 0 0 8
1 1 1 1 1 1 1 9
1 1 1 1 0 1 1
58
в алфавите: букве A соответствует 01000001; B – 01000010, C – 01000011, и т.д. до двадцать шестой буквы Z – 01011010. Аналогично, строчные латинские буквы начинаются с комбинации 01100001 («a») и кончаются на 01111010 («z»).
В табл. 2.7 даны формулы для быстрого нахождения смысла рассмотренных комбинаций кода ASCII в том виде, в котором они могут встретиться в текстах программ.
Таблица 2.7.
Изображаемый символ
Шестнадцатеричное выражение
Десятичное выражение
Цифра 30h
+
<номер цифры> 48
+
<номер цифры>
Прописная латинская буква
40h + <номер буквы> 64
+
<номер буквы>
Строчная латинская буква
60h + <номер буквы> 96
+
<номер буквы>
При таком расположении цифр и букв между их последовательностями остаются промежутки, которые заполняются знаками препинания и другими символами. В частности, между цифрами и прописными латинскими буквами располагаются символы, приведенные в табл. 2.8.
В случаях, когда разработчику ЦСИ приходится «вписывать» в код
ASCII шестнадцатеричные цифры, он может поступить двояко: либо сохранить традиционное для человека изображение последних шести цифр символами от
«A» до «F», либо сохранить для этих цифр формулу таблицы 2.7, и тогда они изобразятся символами от «:» до «?» в соответствии с таблицей 2.8.
Достоинства последнего варианта, при всей его экстравагантности – непрерывность отрезка кодовой таблицы, занятого цифрами, и простота кодирования и декодирования цифр.
Из других символьных комбинаций кода ASCII часто встречаются следующие: 00100000 или 20h («пробел»); 00101010 или 2Ah («*», используется как знак перегрузки прибора или служебный признак); 00101011 или 2Bh (знак полярности «+»); 00101101 или 2Dh (знак полярности «–»); 01111110 или 7Eh
(знак режима работы на переменном токе «»). Из служебных комбинаций кода рекомендуется помнить две: 00001010 или 0Ah – «перевод строки» (сокращенно
Таблица 2.8.
Комбинация
Шестнадцатеричное выражение
Изображаемый символ
00111010 3Ah
:
00111011 3Bh
;
00111100 3Ch
<
00111101 3Dh
=
00111110 3Eh
>
00111111 3Fh
?
01000000 40h
@
59
ПС или LF – line feed) и 00001101 или 0Dh – «возврат каретки» (сокращенно ВК или CR – carriage return). Последовательность ВК, ПС используется как признак конца символьной строки. При
регистрации данных, строки которых заканчиваются такой последовательностью, они будут расположены одна под другой.
Некоторые трудности возникают при использовании кода ASCII в измерительных системах, где желательно передавать не только числовые значения величин, но и их единицы. Международные обозначения в этой области содержат греческие буквы: