Суть работы схемы заключается в том, энкодером задаем значение переменной Ain. Преобразовываем это значение в соответствии с таблицей перекодировки в 12-битовую переменную Aout и выталкиваем это значение в сдвиговый регистр. Таблица перекодировки и фрагмент схемы на эскизе ниже.
Максимальное значение переменной Аin = 1665, т.е. = сумме всех значений первого столбца (все выходы регистра установлены в "1"). Минимальное = 0, т.е. все линии установлены в "0". Любое промежуточное значение равно сумме соответствующих наибольших значений первого столбца. Например, 1283 = 800+400+80+2+1 или 800x1 + 400x1 + 200x0 + 100x0 + 80x1 + 40x0 + 20x0 + 10x0 +8x0 + 4x0 + 2x1 + 1x1.
Первое, что приходит в голову, вычитать из Ain последовательно значения первого столбца, начиная с нижнего (т.е. 800). Если остаток >0, то устанавливать соответствующий бит переменной Aout в "1" и вычитать из остатка следующее (400). И так 12 раз. Может существует более элегантное решение для кодов 1-2-4-8?
Общаться со мной можно, к сожалению, только на СИ. Интересует только алгоритм или код самого преобразования, с выталкиванием в регистр я разберусь.


