Доброе время суток, столкнулся вот с такой проблемой:
Разрабатываю электронный модуль с обратной связью, особенность модуля заключается в том, что по каждому из 16 независимых блоков нужно отправлять в систему управления одно из 3 возможных состояний каждого модуля.
По идее для такой обратной связи нужна 32-битная шина, но проблема в том, что со системой управления я могу состыковаться только лишь по 16-битной шине (в контроллере только 16 портов ввода/вывода).
Как теоретически можно сжать/зашифровать 32-битную шину в 16-битную так, что-бы можно было собирать информацию о состоянии (одно из 3 возможных состояний) каждого из 16 модулей? Хотел-бы услышать совет, как это можно сделать на CMOS/TTL логике.
P.S. Дискретку и полноценный курс по логическим элементам и синтезу логических схем мне ещё не читали
В принципе, можно передать 3 состояния по одному проводу. Именно, подключить к нему 2 резистора на землю и на питание. Тогда, настроив пин на выход, можно передавать 0 и 1 как обычно. А для 3-го состояния переводить пин на вход и тогда 3-му состоянию будет соответствовать промежуточное напряжение на пине. На стороне приемника применить АЦП/компаратор, или можно поиграть с подключением внутреннего подтягивающего резистора пина на входе. Если логический уровень на входе при этом не будет меняться, то это 0 или 1, а если будет с 0 на 1 - то третье. Думаю, при определенном соотношении резисторов на стороне передатчика и внутреннего подтягивающего можно будет добиться функционирования как описано выше. Надо поэкспериментировать. Еше можно вместо логических уровней передавать по проводу импульсы переменной частоты или скважности и таким образом осуществить кодирование.
Самое простое - разделить передачу во времени, дополнительно назначив признак-адрес данных.
Скажем старшие 4 бита (d15 d14 d13 d12) - номер блока, младшие 2 бита (d1 d0) - данные.
Но это не оптимально.
Лучше та же идеология, но с группировкой. Старшие 2 бита (d15 d14) -адрес группы, младшие - данные по номерам. Как пример
d15 d14 d13 d12 d11 d10 d9 d8 d7 d6 d5 d4 d3 d2 d1 d0
0 0 x7 x7 x6 x6 x5 x5 x4 x4 x3 x3 x2 x2 x1 x1
0 1 x14 x13 x12 x11 x10 x9 x8
1 0 ------------------------------------- x16 x15
далее уже дешифратором выделяете какие данные куда отсылать
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Ser60, В принципе можно и так, жаль АЦП в цифровом модуле нет, а вот насчёт поиграться со внутренней потяжкой - вполне годная идея.
Meteor, вот если-бы шифрование с адресацией, как в Вашем примере, можно было-бы заложить на аппаратном уровне - тогда с удовольствием взялся-бы за реализацию, а так по тех.заданию мне нельзя использовать микроконтроллеры для решения данной задачи. В арсенале у меня только 16 из 32 выводов от модуля NI Compact Rio 9403 и неубиваемая буржуйская ТТЛ-логика 54 серии. Ну может ещё какие-нибудь шифраторы на КМОП.
Вот недавно делал нечто подобное на этом блоке...
Нужен мультиплексор 16:1. 4 разряда - вибирают адрес блока. 16 2-х разрядных регистра. Входы данных регистров содиняются в общую шину, 2 разряда.
1 разряд для тактового импульса подаётся на вход мультиплексора. Выходы мультиплексора подключаются к тактовым входам регистров. Итого понадобится 7 разрядов 9403.
Если я правильно понял задачу и сигналы можно разделять во времени, то тебе поможет сдвиговый регистр 74hc595 с последовательным входом и параллельным выходом.
Chiper писал(а):... вот если-бы шифрование с адресацией, как в Вашем примере, можно было-бы заложить на аппаратном уровне - тогда с удовольствием взялся-бы за реализацию, а так по тех.заданию мне нельзя использовать микроконтроллеры для решения данной задачи. В арсенале у меня только 16 из 32 выводов от модуля NI Compact Rio 9403 и неубиваемая буржуйская ТТЛ-логика 54 серии. Ну может ещё какие-нибудь шифраторы на КМОП.
А что самому иаппаратное адресное шифрование каналов не осилить? всего то 2 мультиплексора 16х1 (SN74150)и счетчик(SN7493). Займет всего 5 проводков для 16 блоков. Еще 11 проводков свободны и можно использовать по своему усмотрению.
Chiper писал(а):вот если-бы шифрование с адресацией, как в Вашем примере, можно было-бы заложить на аппаратном уровне - тогда с удовольствием взялся-бы за реализацию, а так по тех.заданию мне нельзя использовать микроконтроллеры для решения данной задачи.
А где я сказал о микроконтроллере?
И вообще, не забывайте микроконтроллер тоже состоит из аппаратной части. Так что на логике это реализовать можно.
PS Вы бы все ограничения выложили. А то потом выяснится что на шине имеются иные устройства, к тому же она должна быть двунаправленной и тд.
Относительно игр с z-состоянием. Считаю необходимым предостеречь от этого шага - потому как гарантировать что состояние "выключено" это именно 1,8В некорректно. Но ради интереса, поищите на казусе темы трехлетней давности пользователя Майорка, он делал ЦАП на трехстабильных элементах. Местами что-то даже получилось.
Успехов
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Вот недавно делал нечто подобное на этом блоке...
Нужен мультиплексор 16:1. 4 разряда - вибирают адрес блока. 16 2-х разрядных регистра. Входы данных регистров содиняются в общую шину, 2 разряда.
1 разряд для тактового импульса подаётся на вход мультиплексора. Выходы мультиплексора подключаются к тактовым входам регистров. Итого понадобится 7 разрядов 9403.
Огромное спасибо, что-то я до этого не додумался... Хотя буквально на днях читал про них
Rokl писал(а):PS Вы бы все ограничения выложили. А то потом выяснится что на шине имеются иные устройства, к тому же она должна быть двунаправленной и тд.
Больше на этой шине ничего висеть не будет, двухканальную передачу я не планирую 100%. Оставшиеся 16 выводов на 9403 будут управляющими (1 вывод для каждого модуля).
И вообще, не забывайте микроконтроллер тоже состоит из аппаратной части.
Это я прекрасно понимаю, просто заказчик скептически относится к использованию микроконтроллеров в данном девайсе. В принципе на это есть причины, т.к. использование МК предполагает тактирование кварцевым резонатором, а устройство будет использоваться в условия повышенной вибрации. Это может негативно сказаться на тактировании. Кроме того возможна эксплуатация в условиях повышенной радиации.
EternalEngine писал(а):Если я правильно понял задачу и сигналы можно разделять во времени, то тебе поможет сдвиговый регистр 74hc595 с последовательным входом и параллельным выходом.
Ну частота изменений состояний каждого из модулей не велика, я бы даже сказал большую часть времени каждый канал будет устойчиво находиться в одном из 3 возможных состояний. Вот только синхронности/последовательности в изменении состояний каждого из модулей добиться не возможно, каждый канал живёт своей собственной жизнью. Если подробнее:
Устройство должно включиться по команде и тут-же логика должна каждого из 16 каналов должна перевести выводы идущие в NI 9403 в состояние состояние "устройство работает" либо "ошибка". Или возможен такой вариант, что произойдёт нечто мистическое и во время длительной эксплуатации на устройстве по какому-то из 16 каналов сработает защита, в таком случае об ошибке на конкретном канале должен узнать NI 9403. Возможно что какой-то из каналов просто напросто "отвалится", собственно для этого и есть необходимость в третьем состоянии "устройство выключено".
Вот только при всём этом, опрос состояния каждого из каналов должен происходить с частотой не менее 30Гц.
Фрагмент схемы, который я привёл, предназначен для управления 16-ю блоками. Для чтения состояний этих блоков нужно просто добавить по мультиплексору на каждый бит.