Страница 1 из 2
I2C и автоприсвоение адресов slave'ам
Добавлено: Пн янв 30, 2012 17:20:56
T-Xen
Приветствую

Есть ведущий МК и несколько ведомых. Адреса ведомых изначально задать нет возможности. Поэтому необходимо при включении производить автоприсвоение адресов. Что-то подобное есть в SMBus, но информация об этом крайне скудна...
Поделитесь, пожалуйста, своими соображениями по решению вопроса =)
P.S. Первая мысль это присвоить всем ведомым начальный адрес. Мастер отправляет на него запрос и те, которые не имеют личного адреса, откликаются. Проблема в том, что они откликнутся одновременно

Re: I2C и автоприсвоение адресов slave'ам
Добавлено: Пн янв 30, 2012 18:15:32
Alkul
T-Xen писал(а):Адреса ведомых изначально задать нет возможности.
Программы ведомых совсем не отличаются?
Re: I2C и автоприсвоение адресов slave'ам
Добавлено: Вт янв 31, 2012 08:04:52
igor-x
надо сделать автоприсвоение адресов slave'ам с помощью перемычек
Re: I2C и автоприсвоение адресов slave'ам
Добавлено: Вт янв 31, 2012 10:40:10
Psych
Подключать ведомые по очереди нельзя??
Re: I2C и автоприсвоение адресов slave'ам
Добавлено: Вт янв 31, 2012 11:49:41
T-Xen
Alkul писал(а): Программы ведомых совсем не отличаются?
Да, абсолютно идентичные. Единственное, в них, возможно будет прописываться серийный номер уже после прошивки.
igor-x писал(а): как мне представляется решение = если slave, при включении программы имеет начальный адрес, он обращается к мастеру - выделить ему
очередной номер. но это мультимастерная схема (если не ошибаюсь,может быть реализована на AVR, так как протокол TWI позволяет легко переключаться в режимы Master-Slave).
Получается, каждый бездомный slave по очереди становится мастером. Но что это дает? По-моему это породит ещё больше проблем
Psych писал(а):Подключать ведомые по очереди нельзя??
Не желательно. Это сильно усложнит процесс наладки.
Re: I2C и автоприсвоение адресов slave'ам
Добавлено: Вт янв 31, 2012 11:51:29
ploop
Отмечусь. Интересная тема.
Re: I2C и автоприсвоение адресов slave'ам
Добавлено: Вт янв 31, 2012 12:20:59
coredumped
У меня есть масса разработок с одним мастером и несколькими слугами. Но всегда нужно однозначно идентифицировать подчиненного. Те автоприсвоение как-то не вяжется. Как Вы потом будете определять кто из них физически получил адрес, скажем 8?
Я понимаю Вашк проблему - не хочется делать различные прошивки для подчиненных МК, хочется, чтоб они были одинаковыми. Я пошел простым путем - перемычки. При включении опрашивается порт, проверяется состояние перемычек (0-резисторов) и определяется собственный адрес. Это самый надежный способ, который исключает путаницу.
Есть еще один метод - передача "эстафетной палочки" или маркера. Для этого потребуется 2 свободных порта на каждом МК. Если интересует - могу нарисовать схемку и алгоритм, только вечером...
Re: I2C и автоприсвоение адресов slave'ам
Добавлено: Вт янв 31, 2012 12:45:41
Леонид Иванович
Похожую задачу приходится решать в сетях с протоколом Wake. Присвоение адреса делаю по ходу монтажа сети. Изначально во все слэйвы записан технологический адрес. Монтирую и подключаю первый слэйв. По технологическому адресу задаю ему нужный адрес, согласно месту и функциям в системе. Затем добавляю слэйвы по одному, прописывая в каждый новый слэйв по технологическому адресу его адрес. В каждый момент времени будет откликаться только одно устройство, коллизий не возникает.
P.S. Но пользователям больше по душе DIP-переключатели адреса.
Re: I2C и автоприсвоение адресов slave'ам
Добавлено: Вт янв 31, 2012 12:52:33
igor-x
только перемычки! - это самое лучшее решение
Re: I2C и автоприсвоение адресов slave'ам
Добавлено: Вт янв 31, 2012 13:30:39
Psych
igor-x писал(а):мастер создает таблицу выданных адресов и соответствия их серийных номеров
igor-x писал(а):в МК есть EEPROM - его можно вместо перемычек использовать
T-Xen писал(а):Адреса ведомых изначально задать нет возможности
Мне кажется это распознать среди близнецов у кого какое имя. Тут TWI на мой взгляд не проканает. Здесь бы интерфейс ввиде замкнутого кольца очень подошел.
Re: I2C и автоприсвоение адресов slave'ам
Добавлено: Вт янв 31, 2012 13:35:22
igor-x
Psych писал(а):Мне кажется это распознать среди близнецов у кого какое имя. Тут TWI на мой взгляд не проканает. Здесь бы интерфейс ввиде замкнутого кольца очень подошел.
здесь не близнецы - автор сказал что у них есть серийные номера. но и в случае с близнецами протокол получения номеров реализуется (чуть больше строчек в программе получится). даже можно сделать обратную процедуру - получиить адреса, а потом по ним серийники раздать с записью в еепром
Re: I2C и автоприсвоение адресов slave'ам
Добавлено: Вт янв 31, 2012 13:52:25
Psych
igor-x писал(а): автор сказал что у них есть серийные номера
Вроде как он сказал что их можно прописать
после прошивки...тобишь мастером(если я правильно понял топикстартера).
igor-x писал(а):но и в случае с близнецами протокол получения номеров реализуется
Как?? Имея ,например, 10 абсолютно идентичных (физически и программно) ведомых? А вот передача эстафетной палочки, на мой взгляд, самое оно...
Re: I2C и автоприсвоение адресов slave'ам
Добавлено: Вт янв 31, 2012 14:05:17
igor-x
Psych писал(а):Как?? Имея ,например, 10 абсолютно идентичных (физически и программно) ведомых?
нет решения этой задаче
Re: I2C и автоприсвоение адресов slave'ам
Добавлено: Вт янв 31, 2012 14:53:44
coredumped
И в результате имеем случайную раздачу адресов. Такое нафиг не надо. Как определить к каому физическому устройству идет обращение? Если нужно их однозначно идентифицировать при абсолютно идентичных прошивках - только передача маркера через доп. линию связи может помочь
[master]---[slave]--[slave]--[slave]---
Алгоритм такой.
Изначально на выходах лог.1 Устанавливаем первый свободный адрес (например 2)
1. Мастер ставит доп порт в 0 и начинает слать на бродкастовый адрес текущий свободный адрес.
2. Slave слушает бродкастовый адрес, видит, что на доп. входе у него 0, значит маркер у него, значит адрес сообщают ему.
3. Мастер проверяет доступность устройства по адресу (текущему), если все хорошо, ставит порт в 1 (снимает маркер), если никто не ответил - идем к п1.
4. Slave получил адрес (2) устанавливает 0 на своем доп. выходе - передает маркер следующему
5. Мастер увеличивает текущий адрес и посылает его бродкастом, и теперь уже след Slave отрабатывает процедуру получения адреса (п2).
Малость косноязычно получилось, но идея понятна?
Re: I2C и автоприсвоение адресов slave'ам
Добавлено: Вт янв 31, 2012 15:09:51
igor-x
автор исходного вопроса и не ставил задачу однозначно чтото идентифицировать - просто раздать адреса автоматически.
тем более разговор шел про охапку близнецов - которые и не надо более точно идентифицировать.
это типа нейронов в башке - все одинаковые, но в зависимости от того раньше или позже они родились , имеют разные случайные идентификаторы, невидимые постороннему наблюдателю

Re: I2C и автоприсвоение адресов slave'ам
Добавлено: Вт янв 31, 2012 15:24:19
igor-x
coredumped писал(а):Малость косноязычно получилось, но идея понятна?
в случае наличия такой цепочки входов-выходов, для получения адресов никаких действий(бродкастов) по шине twi делать не надо - просто как на входе первого чтото появилось он забирает себе первый адрес- потом машет ногой второму... и так до крайнего.
Re: I2C и автоприсвоение адресов slave'ам
Добавлено: Вт янв 31, 2012 15:33:26
Мастер Ломастер
гадать мы можем сколько угодно: как обычно, топикстартер самое интересное умолчал. но самый тривиальный способ получается при наличии кнопки:
1. все ведомые имеют адрес 127.
2. алгоритм работы ведомого таков, что если его адрес 127, то принимает он только при нажатой кнопке.
3. мастер пиытается послать новый адрес ведомому с адресом 127, игнорируя ошибки приема путем повтора передачи через какое-то время. настройщик нажимает кнопку на ведомом - вуаля! через долю секунды у этого ведомого уже другой адрес и он перестает отвечать на 127. мастер же, добившись успешной передачи, начинает повторять попытки достучаться до очередного непроинициализированного ведомого, посылая 127-ому новый адрес.
вот и все.
Re: I2C и автоприсвоение адресов slave'ам
Добавлено: Вт янв 31, 2012 15:36:17
igor-x
Мастер Ломастер писал(а):вот и все.
но это напоминает больше ручную раздачу адресов, а задача была - полностью автоматическая..
хотя похоже автору уже давно неинтересно наши идеи. наверное давно уже нашел решение, но молчит
Re: I2C и автоприсвоение адресов slave'ам
Добавлено: Вт янв 31, 2012 15:38:23
coredumped
igor-x писал(а):в случае наличия такой цепочки входов-выходов, для получения адресов никаких действий(бродкастов) по шине twi делать не надо - просто как на входе первого чтото появилось он забирает себе первый адрес- потом машет ногой второму... и так до крайнего.
ммм... тока как он узнает адрес предыдущего? Можно, конечно, передавать в последовательном коде (программный или аппаратный UART).
Re: I2C и автоприсвоение адресов slave'ам
Добавлено: Вт янв 31, 2012 16:01:10
igor-x
coredumped писал(а):ммм... тока как он узнает адрес предыдущего? Можно, конечно, передавать в последовательном коде (программный или аппаратный UART).
мдяя - не подумал....