Вопросы по организации последовательной асинхронной связи

Итак. У меня есть несколько ардуино-плат (5). Все из них выполняют принципиально разные задачи. Есть желание подключить их в «сеть». В кавычках потому-что связь нужно организовать последовательную асинхронную.

Далее я изложу концепцию связи:

В сети существует n плат ардуино. Пусть первая из них, которая подключена непосредственно к компьютеру по USB называется X1. Она исполняет роль Ведущего контроллера. Остальные подключаются параллельно по двум проводам подключенным к цифровым вводам\выводам и являются ведомыми. Почему два провода? -для более уверенного сигнала и защиты от ошибок передачи. Канал А и канал Б. По каналу А будут идти данные, а по каналу Б будет идти инверсный сигнал.

Допустим, что каждые 100 мсек плата Х1 отправляет запрос вида «РАЗРЕШЕНИЕ ПЕРЕДАЧИ/№ID ПЛАТЫ ARDUINO/Данные/КОНЕЦ ПЕРЕДАЧИ». Сигнал идет ко всем платам, т.к. они подключены параллельно. Но данные обрабатываются только той платой, чей ID совпал с передаваемым. После чего плата Xn переключается в Ведущую, а плата Х1 — в ведомую и передаются сформированные данные из платы Xn в плату X1. После чего все возвращается на свои места и плата Х1 отправляет запрос, но уже с другим ID.

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

Сама билиотека должна делать следующее:
-Поднятие связи на изменяемой(не динамически) скорости и с возможностью выбора пинов, по которым будет осуществлена связь.
-Синхронизироваться по сигналу разрешения передачи.
-Обрабатывать данные из бинарного вида в char по таблице из 256 элементов.(один байт данных-один символ).
-Останавливать прием по сигналу конца передачи.
-Переходить из режима Передающего в Принимающий и обратно.
-Отслеживать ошибки.
Скетч ардуино будет видеть лишь преобразованные данные и обрабатывать их по установленной заранее логике.

Комментарии (6)

RSS свернуть / развернуть
+
0
почему то прочитав сразу подумал что речь идет о I2C… почему не заюзать его и не придумывать велосипед — те же 2 провода, несколько устрйоств на одной шине
avatar

capitan_blood

  • 19 августа 2011, 20:49
+
0
Arduino умеет работать по I2C только мастером.
Почему бы не использовать RS232.
С библиотекой SoftSerial порт можно создать практически на любых выводах.
Разные устройства — разные скорости передачи — к первому обратились на 9600, ко второму на 18400 и так далее…
avatar

Nixoid

  • 26 ноября 2011, 12:31
+
0
откуда информация о том что ардуина умеет быть только мастером? лично сам использовал ее в связке в качестве slave устройства. повторял это с успехом на разных платах (freeduino 168, 328, mega 2560)
avatar

capitan_blood

  • 2 декабря 2011, 06:26
+
0
Попутал.
Разбирался с семплами и всё в голове перемешалось.
Прошу прощения, спасибо что указали на ошибку.
avatar

Nixoid

  • 2 декабря 2011, 18:18
+
0
Я тоже за I2C. Вроде бы, скорость передачи изменить будет на так просто, а вот все остальное можно сделать без проблем. Главная плата — мастер, остальные — подчиненные.

Как известно, мастер может не только передавать данные, но и запрашивать их, т.е. вы можете делать запрос к ведомым платам — и получать либо данные, либо сигнал «не готово, повторите позже». В крайнем случае можно любую плату переключать в мастера динамически, отключая главную, но это не путь истинного джедая — будет очень много хлопот.

Вот ссылка на документацию http://arduino.cc/en/Reference/Wire
При выборе адресов для ведущей\ведомых плат не обязательно, но желательно придерживаться рекомендаций Выбираете девайс ближе к вашему и вперед

еще:
1
2
avatar

simon_ru

  • 2 декабря 2011, 08:24
+
0
опечатка… для мастера адрес, естветвенно, не нужен
avatar

simon_ru

  • 2 декабря 2011, 08:29

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.