Да, я знаю, что поднимаю тему, которой посвящено очень много информации в интернете, но, тем не менее, я уже 2 недели гуглю этот вопрос и так до конца и не нашёл решения.
Есть мастер МК, он связан с компьютером по USART. Есть 16 других МК, которые весят на одной линии (TWI, он же i2c) с главным, и которые считывают с датчиков некие параметры и отсылают на главный МК их, ПЛЮС(!!!) сами могут принимать от главного некие сведения и выводить их на светодиодную шкалу.
Посоветуйте, пожалуйста, реализацию i2c, которая в полной мере описывает данную ситуацию, плюс, если можно, банальный пример (можно псевдокодом) как осуществить двунаправленную передачу между главной МК и слэйвами.
Краем уха что-то слышал про мульмастеровый режим, про арбитраж. Но вам этого и не надо, насколько я понял. Все общение идет через мастера. Один мастер всегда мастер, остальные всегда слейвы. Они могут опрашивать свои датчики и зажигать светодиоды, но мастеру информацию будут пересылать только по запросу.
ЗЫ. А почему нужно именно и2ц? Он же по длине не очень длинный. Или все слейвы сидят рядышком? Может есть смысл поставить один мощный камень?
Добавлено спустя 1 минуту 57 секунд: Или слейвы с датчиками тоже связаны по и2ц? Тогда нафиг они нужны? Проясните архитектуру системы.
Есть общая шина, инфу с которой собирает мастер и посылает на комп. На эту шину повешены блоки (блок, к примеру, из 4 потенциометров и 2х кнопок, с которых считывается информация, и 10 светодиодов, на которые выводится информация).
Критерий - гибкость платформы (можно подключить 1 блок, 10 блоков, 16 (впринципе, максимум) блоков, каждый из которых взаимозаменяем)
девайс шириной примерно 600мм, расстояние не велико.
Сначала думал действительно поставить какую-нить 1280 и просто опрашивать последовательно каждый блок, но потом от идеи отказался в связи с условием гибкости и простоты системы (каждый блок должен быть легко вынимаемым)
Слейвы, по сути дела, представляют из себя некий i2c IO Expander с небольшой внутренней логикой
По ходу дела созрел вопрос. Когда устройство в режиме слейва - оно само послать ничего не может, может только ответить на запрос?
Да почему печально? Все будет работать. Каждый блок - это слейв. Он работает по запросу. По шине приходит команда записи - это вывод на светодиоды. По шине приходит команда чтения - это чтение заранее полученной информации от датчиков. Я так и не получил ответа на вопрос: датчики опрашиваются по и2ц? Ну а если и2ц уже разонравился, то можно посмотреть в сторону RS485 и 1- Wire.
Нет, атмега-слэйв и будет из себя представлять некий "датчик":) Шина и2с только для связи МК между собой
просто я, как, изначально, программист, очень странно смотрю на необходимость опрашивать каждый из слэйвов постоянно, имхо лучше было бы сделать, чтобы слэйвы слали данные, если они этого захотят, на мастер