I2C и автоприсвоение адресов slave'ам

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
T-Xen
Родился
Сообщения: 15
Зарегистрирован: Пн янв 30, 2012 17:09:59
Откуда: Тучково

I2C и автоприсвоение адресов slave'ам

Сообщение T-Xen »

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

P.S. Первая мысль это присвоить всем ведомым начальный адрес. Мастер отправляет на него запрос и те, которые не имеют личного адреса, откликаются. Проблема в том, что они откликнутся одновременно :dont_know:
Alkul
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Re: I2C и автоприсвоение адресов slave'ам

Сообщение Alkul »

T-Xen писал(а):Адреса ведомых изначально задать нет возможности.

Программы ведомых совсем не отличаются?
Аватара пользователя
igor-x
Мудрый кот
Сообщения: 1817
Зарегистрирован: Пн ноя 29, 2010 15:58:43

Re: I2C и автоприсвоение адресов slave'ам

Сообщение igor-x »

надо сделать автоприсвоение адресов slave'ам с помощью перемычек
Последний раз редактировалось igor-x Ср фев 01, 2012 12:21:13, всего редактировалось 1 раз.
Аватара пользователя
Psych
Опытный кот
Сообщения: 848
Зарегистрирован: Ср мар 02, 2011 07:47:39
Откуда: Уфа

Re: I2C и автоприсвоение адресов slave'ам

Сообщение Psych »

Подключать ведомые по очереди нельзя??
Аватара пользователя
T-Xen
Родился
Сообщения: 15
Зарегистрирован: Пн янв 30, 2012 17:09:59
Откуда: Тучково

Re: I2C и автоприсвоение адресов slave'ам

Сообщение T-Xen »

Alkul писал(а): Программы ведомых совсем не отличаются?

Да, абсолютно идентичные. Единственное, в них, возможно будет прописываться серийный номер уже после прошивки.


igor-x писал(а): как мне представляется решение = если slave, при включении программы имеет начальный адрес, он обращается к мастеру - выделить ему
очередной номер. но это мультимастерная схема (если не ошибаюсь,может быть реализована на AVR, так как протокол TWI позволяет легко переключаться в режимы Master-Slave).

Получается, каждый бездомный slave по очереди становится мастером. Но что это дает? По-моему это породит ещё больше проблем :dont_know:



Psych писал(а):Подключать ведомые по очереди нельзя??

Не желательно. Это сильно усложнит процесс наладки.
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: I2C и автоприсвоение адресов slave'ам

Сообщение ploop »

Отмечусь. Интересная тема.
Аватара пользователя
coredumped
Опытный кот
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

Re: I2C и автоприсвоение адресов slave'ам

Сообщение coredumped »

У меня есть масса разработок с одним мастером и несколькими слугами. Но всегда нужно однозначно идентифицировать подчиненного. Те автоприсвоение как-то не вяжется. Как Вы потом будете определять кто из них физически получил адрес, скажем 8?
Я понимаю Вашк проблему - не хочется делать различные прошивки для подчиненных МК, хочется, чтоб они были одинаковыми. Я пошел простым путем - перемычки. При включении опрашивается порт, проверяется состояние перемычек (0-резисторов) и определяется собственный адрес. Это самый надежный способ, который исключает путаницу.
Есть еще один метод - передача "эстафетной палочки" или маркера. Для этого потребуется 2 свободных порта на каждом МК. Если интересует - могу нарисовать схемку и алгоритм, только вечером...
Все будет только лучше, в крайнем случае - хуже.
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

Re: I2C и автоприсвоение адресов slave'ам

Сообщение Леонид Иванович »

Похожую задачу приходится решать в сетях с протоколом Wake. Присвоение адреса делаю по ходу монтажа сети. Изначально во все слэйвы записан технологический адрес. Монтирую и подключаю первый слэйв. По технологическому адресу задаю ему нужный адрес, согласно месту и функциям в системе. Затем добавляю слэйвы по одному, прописывая в каждый новый слэйв по технологическому адресу его адрес. В каждый момент времени будет откликаться только одно устройство, коллизий не возникает.

P.S. Но пользователям больше по душе DIP-переключатели адреса.
Аватара пользователя
igor-x
Мудрый кот
Сообщения: 1817
Зарегистрирован: Пн ноя 29, 2010 15:58:43

Re: I2C и автоприсвоение адресов slave'ам

Сообщение igor-x »

только перемычки! - это самое лучшее решение
Последний раз редактировалось igor-x Ср фев 01, 2012 12:22:23, всего редактировалось 2 раза.
Аватара пользователя
Psych
Опытный кот
Сообщения: 848
Зарегистрирован: Ср мар 02, 2011 07:47:39
Откуда: Уфа

Re: I2C и автоприсвоение адресов slave'ам

Сообщение Psych »

igor-x писал(а):мастер создает таблицу выданных адресов и соответствия их серийных номеров

igor-x писал(а):в МК есть EEPROM - его можно вместо перемычек использовать


T-Xen писал(а):Адреса ведомых изначально задать нет возможности


Мне кажется это распознать среди близнецов у кого какое имя. Тут TWI на мой взгляд не проканает. Здесь бы интерфейс ввиде замкнутого кольца очень подошел.
Аватара пользователя
igor-x
Мудрый кот
Сообщения: 1817
Зарегистрирован: Пн ноя 29, 2010 15:58:43

Re: I2C и автоприсвоение адресов slave'ам

Сообщение igor-x »

Psych писал(а):Мне кажется это распознать среди близнецов у кого какое имя. Тут TWI на мой взгляд не проканает. Здесь бы интерфейс ввиде замкнутого кольца очень подошел.


здесь не близнецы - автор сказал что у них есть серийные номера. но и в случае с близнецами протокол получения номеров реализуется (чуть больше строчек в программе получится). даже можно сделать обратную процедуру - получиить адреса, а потом по ним серийники раздать с записью в еепром
Аватара пользователя
Psych
Опытный кот
Сообщения: 848
Зарегистрирован: Ср мар 02, 2011 07:47:39
Откуда: Уфа

Re: I2C и автоприсвоение адресов slave'ам

Сообщение Psych »

igor-x писал(а): автор сказал что у них есть серийные номера

Вроде как он сказал что их можно прописать после прошивки...тобишь мастером(если я правильно понял топикстартера).
igor-x писал(а):но и в случае с близнецами протокол получения номеров реализуется

Как?? Имея ,например, 10 абсолютно идентичных (физически и программно) ведомых? А вот передача эстафетной палочки, на мой взгляд, самое оно...
Аватара пользователя
igor-x
Мудрый кот
Сообщения: 1817
Зарегистрирован: Пн ноя 29, 2010 15:58:43

Re: I2C и автоприсвоение адресов slave'ам

Сообщение igor-x »

Psych писал(а):Как?? Имея ,например, 10 абсолютно идентичных (физически и программно) ведомых?


нет решения этой задаче
Последний раз редактировалось igor-x Ср фев 01, 2012 12:25:08, всего редактировалось 1 раз.
Аватара пользователя
coredumped
Опытный кот
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

Re: I2C и автоприсвоение адресов slave'ам

Сообщение coredumped »

И в результате имеем случайную раздачу адресов. Такое нафиг не надо. Как определить к каому физическому устройству идет обращение? Если нужно их однозначно идентифицировать при абсолютно идентичных прошивках - только передача маркера через доп. линию связи может помочь
[master]---[slave]--[slave]--[slave]---
Алгоритм такой.
Изначально на выходах лог.1 Устанавливаем первый свободный адрес (например 2)
1. Мастер ставит доп порт в 0 и начинает слать на бродкастовый адрес текущий свободный адрес.
2. Slave слушает бродкастовый адрес, видит, что на доп. входе у него 0, значит маркер у него, значит адрес сообщают ему.
3. Мастер проверяет доступность устройства по адресу (текущему), если все хорошо, ставит порт в 1 (снимает маркер), если никто не ответил - идем к п1.
4. Slave получил адрес (2) устанавливает 0 на своем доп. выходе - передает маркер следующему
5. Мастер увеличивает текущий адрес и посылает его бродкастом, и теперь уже след Slave отрабатывает процедуру получения адреса (п2).

Малость косноязычно получилось, но идея понятна?
Все будет только лучше, в крайнем случае - хуже.
Аватара пользователя
igor-x
Мудрый кот
Сообщения: 1817
Зарегистрирован: Пн ноя 29, 2010 15:58:43

Re: I2C и автоприсвоение адресов slave'ам

Сообщение igor-x »

автор исходного вопроса и не ставил задачу однозначно чтото идентифицировать - просто раздать адреса автоматически.
тем более разговор шел про охапку близнецов - которые и не надо более точно идентифицировать.
это типа нейронов в башке - все одинаковые, но в зависимости от того раньше или позже они родились , имеют разные случайные идентификаторы, невидимые постороннему наблюдателю :))
Аватара пользователя
igor-x
Мудрый кот
Сообщения: 1817
Зарегистрирован: Пн ноя 29, 2010 15:58:43

Re: I2C и автоприсвоение адресов slave'ам

Сообщение igor-x »

coredumped писал(а):Малость косноязычно получилось, но идея понятна?


в случае наличия такой цепочки входов-выходов, для получения адресов никаких действий(бродкастов) по шине twi делать не надо - просто как на входе первого чтото появилось он забирает себе первый адрес- потом машет ногой второму... и так до крайнего.
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: I2C и автоприсвоение адресов slave'ам

Сообщение Мастер Ломастер »

гадать мы можем сколько угодно: как обычно, топикстартер самое интересное умолчал. но самый тривиальный способ получается при наличии кнопки:
1. все ведомые имеют адрес 127.
2. алгоритм работы ведомого таков, что если его адрес 127, то принимает он только при нажатой кнопке.
3. мастер пиытается послать новый адрес ведомому с адресом 127, игнорируя ошибки приема путем повтора передачи через какое-то время. настройщик нажимает кнопку на ведомом - вуаля! через долю секунды у этого ведомого уже другой адрес и он перестает отвечать на 127. мастер же, добившись успешной передачи, начинает повторять попытки достучаться до очередного непроинициализированного ведомого, посылая 127-ому новый адрес.

вот и все.
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
igor-x
Мудрый кот
Сообщения: 1817
Зарегистрирован: Пн ноя 29, 2010 15:58:43

Re: I2C и автоприсвоение адресов slave'ам

Сообщение igor-x »

Мастер Ломастер писал(а):вот и все.


но это напоминает больше ручную раздачу адресов, а задача была - полностью автоматическая..

хотя похоже автору уже давно неинтересно наши идеи. наверное давно уже нашел решение, но молчит
Аватара пользователя
coredumped
Опытный кот
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

Re: I2C и автоприсвоение адресов slave'ам

Сообщение coredumped »

igor-x писал(а):в случае наличия такой цепочки входов-выходов, для получения адресов никаких действий(бродкастов) по шине twi делать не надо - просто как на входе первого чтото появилось он забирает себе первый адрес- потом машет ногой второму... и так до крайнего.


ммм... тока как он узнает адрес предыдущего? Можно, конечно, передавать в последовательном коде (программный или аппаратный UART).
Все будет только лучше, в крайнем случае - хуже.
Аватара пользователя
igor-x
Мудрый кот
Сообщения: 1817
Зарегистрирован: Пн ноя 29, 2010 15:58:43

Re: I2C и автоприсвоение адресов slave'ам

Сообщение igor-x »

coredumped писал(а):ммм... тока как он узнает адрес предыдущего? Можно, конечно, передавать в последовательном коде (программный или аппаратный UART).


мдяя - не подумал....
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»