roboforum.ru

Технический форум по робототехнике.

1xAtmega(master) + 16xAtmega(slave) i2c

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

1xAtmega(master) + 16xAtmega(slave) i2c

Сообщение aSt » 17 сен 2010, 17:15

Всем здравствуйте.

Да, я знаю, что поднимаю тему, которой посвящено очень много информации в интернете, но, тем не менее, я уже 2 недели гуглю этот вопрос и так до конца и не нашёл решения.


Есть мастер МК, он связан с компьютером по USART. Есть 16 других МК, которые весят на одной линии (TWI, он же i2c) с главным, и которые считывают с датчиков некие параметры и отсылают на главный МК их, ПЛЮС(!!!) сами могут принимать от главного некие сведения и выводить их на светодиодную шкалу.


Посоветуйте, пожалуйста, реализацию i2c, которая в полной мере описывает данную ситуацию, плюс, если можно, банальный пример (можно псевдокодом) как осуществить двунаправленную передачу между главной МК и слэйвами.


Спасибо %)
aSt
 
Сообщения: 8
Зарегистрирован: 15 сен 2010, 14:26

Re: 1xAtmega(master) + 16xAtmega(slave) i2c

Сообщение Radist » 17 сен 2010, 18:51

Нифига не понял в чем проблема. На www.gaw.ru есть переведенные атмеловские апликухи. И как работать мастером и как работать слэйвом.
Аватара пользователя
Radist
 
Сообщения: 2253
Зарегистрирован: 01 июл 2009, 08:59
Откуда: Екатеринбург
прог. языки: асемблер AVR

Re: 1xAtmega(master) + 16xAtmega(slave) i2c

Сообщение aSt » 17 сен 2010, 19:25

Читал-с.

Возникает вопрос, а как работать одновременно и мастером и слэйвом?)))
aSt
 
Сообщения: 8
Зарегистрирован: 15 сен 2010, 14:26

Re: 1xAtmega(master) + 16xAtmega(slave) i2c

Сообщение Radist » 17 сен 2010, 21:43

Краем уха что-то слышал про мульмастеровый режим, про арбитраж. Но вам этого и не надо, насколько я понял. Все общение идет через мастера. Один мастер всегда мастер, остальные всегда слейвы. Они могут опрашивать свои датчики и зажигать светодиоды, но мастеру информацию будут пересылать только по запросу.

ЗЫ. А почему нужно именно и2ц? Он же по длине не очень длинный. Или все слейвы сидят рядышком? Может есть смысл поставить один мощный камень?

Добавлено спустя 1 минуту 57 секунд:
Или слейвы с датчиками тоже связаны по и2ц? Тогда нафиг они нужны? Проясните архитектуру системы.
Аватара пользователя
Radist
 
Сообщения: 2253
Зарегистрирован: 01 июл 2009, 08:59
Откуда: Екатеринбург
прог. языки: асемблер AVR

Re: 1xAtmega(master) + 16xAtmega(slave) i2c

Сообщение aSt » 17 сен 2010, 22:00

Архитектура такова:

Есть общая шина, инфу с которой собирает мастер и посылает на комп. На эту шину повешены блоки (блок, к примеру, из 4 потенциометров и 2х кнопок, с которых считывается информация, и 10 светодиодов, на которые выводится информация).

Критерий - гибкость платформы (можно подключить 1 блок, 10 блоков, 16 (впринципе, максимум) блоков, каждый из которых взаимозаменяем)

девайс шириной примерно 600мм, расстояние не велико.


Сначала думал действительно поставить какую-нить 1280 и просто опрашивать последовательно каждый блок, но потом от идеи отказался в связи с условием гибкости и простоты системы (каждый блок должен быть легко вынимаемым)


Слейвы, по сути дела, представляют из себя некий i2c IO Expander с небольшой внутренней логикой



По ходу дела созрел вопрос. Когда устройство в режиме слейва - оно само послать ничего не может, может только ответить на запрос?
aSt
 
Сообщения: 8
Зарегистрирован: 15 сен 2010, 14:26

Re: 1xAtmega(master) + 16xAtmega(slave) i2c

Сообщение Radist » 17 сен 2010, 22:22

Мастер тот, кто делает клоки. Посылать запросы может только мастер.
Аватара пользователя
Radist
 
Сообщения: 2253
Зарегистрирован: 01 июл 2009, 08:59
Откуда: Екатеринбург
прог. языки: асемблер AVR

Re: 1xAtmega(master) + 16xAtmega(slave) i2c

Сообщение aSt » 17 сен 2010, 22:54

Печально)

а нет аналогичных шин, только у которых нету такой замороченности на мастер\слэйв, а просто есть линия передачи информации между МК?)
aSt
 
Сообщения: 8
Зарегистрирован: 15 сен 2010, 14:26

Re: 1xAtmega(master) + 16xAtmega(slave) i2c

Сообщение Radist » 18 сен 2010, 15:16

Да почему печально? Все будет работать. Каждый блок - это слейв. Он работает по запросу. По шине приходит команда записи - это вывод на светодиоды. По шине приходит команда чтения - это чтение заранее полученной информации от датчиков. Я так и не получил ответа на вопрос: датчики опрашиваются по и2ц? Ну а если и2ц уже разонравился, то можно посмотреть в сторону RS485 и 1- Wire.
Аватара пользователя
Radist
 
Сообщения: 2253
Зарегистрирован: 01 июл 2009, 08:59
Откуда: Екатеринбург
прог. языки: асемблер AVR

Re: 1xAtmega(master) + 16xAtmega(slave) i2c

Сообщение aSt » 18 сен 2010, 15:31

Нет, атмега-слэйв и будет из себя представлять некий "датчик":) Шина и2с только для связи МК между собой

просто я, как, изначально, программист, очень странно смотрю на необходимость опрашивать каждый из слэйвов постоянно, имхо лучше было бы сделать, чтобы слэйвы слали данные, если они этого захотят, на мастер
aSt
 
Сообщения: 8
Зарегистрирован: 15 сен 2010, 14:26

Re: 1xAtmega(master) + 16xAtmega(slave) i2c

Сообщение Michael_K » 18 сен 2010, 15:47

А если два одновременно захотят? шина-то одна...
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: 1xAtmega(master) + 16xAtmega(slave) i2c

Сообщение aSt » 18 сен 2010, 16:02

Принцип "кто первый встал, того и тапки"

эх, ладно, для начала - сделаю опрос каждого слэйва в постоянном цикле, а там уже посмотрим
aSt
 
Сообщения: 8
Зарегистрирован: 15 сен 2010, 14:26

Re: 1xAtmega(master) + 16xAtmega(slave) i2c

Сообщение Radist » 18 сен 2010, 21:36

Я же уже писал про мультимастер и арбитраж. Это ключевые слова, пихаете их в гугль и просвещаетесь. Для затравки ссылка
http://www.support17.com/component/cont ... ?task=view
Аватара пользователя
Radist
 
Сообщения: 2253
Зарегистрирован: 01 июл 2009, 08:59
Откуда: Екатеринбург
прог. языки: асемблер AVR


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8