Добрый день.
Нужно сделать устройство, к которому подключаются различные датчики и исполнительные устройства. Датчики и ИУ могут быть самые разные.
Например фоторезистор как датчик освещенности, сервопривод или ЖК дисплей как исполнительное устройство. Понятно, что у них у всех совсем разные интерфейсы. Необходимо максимально упростить процесс подключения датчиков к устройству (подключил к одному из разъемов и работает сразу), поэтому решено сделать один общий цифровой интерфейс, например UART, по которому устройство будет обмениваться данными с датчиками и ИУ (периферийными устройствами).
На устройстве будет стоять несколько одинаковых разъемов для подключения вышеописанной периферии, а каждый датчик будет содержать микроконтроллер, вроде ATTiny13 со своей прошивкой.
Все бы хорошо, но нужно четко знать к какому порту подключено устройство. Например датчиков света будет 5 штук. Они все совершенно одинаковые, но измеряют освещенность в разных местах. В программе своего устройства я должен иметь возможность получить данные с конкретного датчика, для этого я укажу номер порта, к которому подключен нужный датчик.
Но сложность в том, что если на все разъемы вывести один и тот же UART (параллельно соединить все разъемы для подключения периферии), то не будет возможности определить какое из периферийных устройств прислало данные. Но делать 10 отдельных уартов, по одному на каждый разъем, тоже немного попахивает шизофренией.
Использовать I2C в качестве шины тоже не подходящий вариант ведь в ней применяется аппаратная адресация, а если все датчики освещенности одинаковые то и адрес у них одинаковый. Можно, конечно, делать на периферийных устройствах DIP переключатели для выставления их адреса, но это противоречит ТЗ, что периферийное устройство должно просто подключаться и сразу работать.
Возможно кто-то из форумчан сталкивался с подобной задачей и знает способы ее красивого решения?
Мне в голову лезет что-то вроде цифрового мультиплексора для переключения одного UART между разными разъемами для последовательного опроса.