Имеется несколько микроконтроллеров с идентичными программами. У каждого контроллера выделено несколько ног, для задания каждому контроллеру уникального адреса. Каждую ногу можно программировать как цифровой выход или как цифровой вход(по желанию можно подключить внутренний подтягивающий резистор к питанию или к земле или обойтись без него). В общем, возможности управления ногами вполне обычные для современных контроллеров. Снаружи к этим ногам нужно припаять какую-то простую(из двуногих элементов) схемку(уникальную для каждого контроллера), по которой контроллер сможет определить свой адрес. Ну а задачка заключается в том, чтобы придумать максимальное количество схем и алгоритм их распознавания: 1) если для задания адреса у контроллера выделена одна нога(4 варианта точно существует) 2) если для задания адреса у контроллера выделено две ноги(20 вариантов точно существует)
те, как можно, скажем, по ресет сообщить каждому мк о его уникальном адресе? и больше эти ноги не будут использоваться? использовать 4 ноги. 2 на вход, 2 на выход, соединять последовательно. по одному последовательно получать адрес при действии на другой ресета. после получения адреса - выставлять ресет на следующий мк и выдавать дальнейший адрес на него. итд. после окончания 3 вывода (кроме входа сброса можно использовать для других целей). или спи/исп/жтаг или другие простейшие сериальные. вместо кучи двуногих понадобится только одна сериальная флэшка под адреса
qqwe С ресетом вариант конечно простой и интересный, но мне кажется что в нём как минимум будет три ноги(по одной ноге объединены в общую сеть и одна нога для управления ресетом следующего контроллера) и в условия задачки он как-то не совсем вписывается. Вообще задачка не о том, как контроллерам назначить уникальные адреса. Эта задачка о распознавании внешней схемы при помощи одной или двух ног. Всякие хитрости типа замеров параметров подключённых элементов тоже не особо интересуют, понятно что в теории так можно задать бесконечное количество адресов. Схемы долждны быть различными по структуре, причём способ их различения должен быть безопасным. К примеру, подать на ногу высокий уровень можно, только если она не подключена напрямую к земле. А читать ногу с подключением подтягивающего резистора безопасно в любом случает. Можно считать, что при изменении состояния ног контроллера, внешняя схема гарантированно перейдёт в новое состояние либо сразу, либо за время не более T.
То ли людям неинтересно, то ли непонятно, поэтому расскажу про первый вариант: 1) нога ни к чему не подключена 2) нога подключена к питанию 3) нога подключена к земле 4) нога подключена к питанию или земле через конденсатор Алгоритм распознавания такой: I0 W R I1 R W R I0 R I0 - нога на вход с подключением внутреннего резистора к земле I1 - нога на вход с подключением внутреннего резистора к питанию W - ожидание в течении времени t>T(время зарядки конденсатора через резистор) R - чтение состояния ноги Для перечисленных выше схем при чтении получим следующие последовательности: 1) 0 1 1 0 2) 1 1 1 1 3) 0 0 0 0 4) 0 0 1 1 В принципе первых трёх цифр для определения схемы достаточно, поэтому последние два шага алгоритма можно урезать. Понятно что для двух ног таким же образом можно получить 4*4=16 вариантов. Но еще можно подключить элементы между ногами, поэтому количество вариантов там явно больше.
Black_mirror Тогда уж развивая идею RC цепочек их можно наподключать намного больше 4х вариантов и меряй их постоянную времени - ограничение количества вариантов только стабильностью элементов (можно прецизионные использовать) которая определяет шаг времени и максимальным временем "самоопределения" конроллера, а поскольку "самоопределиться" скорее всего достаточно один раз после включениия, то и предельное время может быть приличным
Y_Mur Интересны схемы, различные по структуре. Считаем, что разброс параметров привязанных к ноге внутренних элементов не позволяет точно определять параметры идентичных по структуре схем. По поводу конденсаторов считаем, что: через ногу, работающую как вывод, заряжаются и разряжаются мгновенно через резистор они не могут мгновенно заряжаться и разряжаться а если нога находится в high-Z состоянии, то не разряжаются через неё вообще
Кажется для одной ноги возможны еще две схемы, итого должно получиться 6. У кого какие есть догадки по этому поводу?
Black_mirror Обычная деффиринцирующая цепь, либо какойнибудь элементарный фильтр, формирующий сигнал определённой длительности или напряжения(ацп) в зависимости от сигнала управления. Всем остальным может заняться програмная часть(прошивка). Также работает множесто ключей с шифрованием - питающее напряжение постоянное подаётся по одной линии с управляющим, итого два проводника.