Итак. У меня есть несколько ардуино-плат (5). Все из них выполняют принципиально разные задачи. Есть желание подключить их в «сеть». В кавычках потому-что связь нужно организовать последовательную асинхронную.
Далее я изложу концепцию связи:
В сети существует n плат ардуино. Пусть первая из них, которая подключена непосредственно к компьютеру по USB называется X1. Она исполняет роль Ведущего контроллера. Остальные подключаются параллельно по двум проводам подключенным к цифровым вводам\выводам и являются ведомыми. Почему два провода? -для более уверенного сигнала и защиты от ошибок передачи. Канал А и канал Б. По каналу А будут идти данные, а по каналу Б будет идти инверсный сигнал.
Допустим, что каждые 100 мсек плата Х1 отправляет запрос вида «РАЗРЕШЕНИЕ ПЕРЕДАЧИ/№ID ПЛАТЫ ARDUINO/Данные/КОНЕЦ ПЕРЕДАЧИ». Сигнал идет ко всем платам, т.к. они подключены параллельно. Но данные обрабатываются только той платой, чей ID совпал с передаваемым. После чего плата Xn переключается в Ведущую, а плата Х1 — в ведомую и передаются сформированные данные из платы Xn в плату X1. После чего все возвращается на свои места и плата Х1 отправляет запрос, но уже с другим ID.
Мне нужна помощь либо совет, чтобы написать библиотеку для ардуино, с помощью которой можно реализовать данный замысел.
Сама билиотека должна делать следующее:
-Поднятие связи на изменяемой(не динамически) скорости и с возможностью выбора пинов, по которым будет осуществлена связь.
-Синхронизироваться по сигналу разрешения передачи.
-Обрабатывать данные из бинарного вида в char по таблице из 256 элементов.(один байт данных-один символ).
-Останавливать прием по сигналу конца передачи.
-Переходить из режима Передающего в Принимающий и обратно.
-Отслеживать ошибки.
Скетч ардуино будет видеть лишь преобразованные данные и обрабатывать их по установленной заранее логике.
0 комментариев на «“Вопросы по организации последовательной асинхронной связи”»
почему то прочитав сразу подумал что речь идет о I2C… почему не заюзать его и не придумывать велосипед — те же 2 провода, несколько устрйоств на одной шине
Arduino умеет работать по I2C только мастером.
Почему бы не использовать RS232.
С библиотекой SoftSerial порт можно создать практически на любых выводах.
Разные устройства — разные скорости передачи — к первому обратились на 9600, ко второму на 18400 и так далее…
откуда информация о том что ардуина умеет быть только мастером? лично сам использовал ее в связке в качестве slave устройства. повторял это с успехом на разных платах (freeduino 168, 328, mega 2560)
Попутал.
Разбирался с семплами и всё в голове перемешалось.
Прошу прощения, спасибо что указали на ошибку.
Я тоже за I2C. Вроде бы, скорость передачи изменить будет на так просто, а вот все остальное можно сделать без проблем. Главная плата — мастер, остальные — подчиненные.
Как известно, мастер может не только передавать данные, но и запрашивать их, т.е. вы можете делать запрос к ведомым платам — и получать либо данные, либо сигнал «не готово, повторите позже». В крайнем случае можно любую плату переключать в мастера динамически, отключая главную, но это не путь истинного джедая — будет очень много хлопот.
Вот ссылка на документациюhttp://arduino.cc/en/Reference/Wire рекомендаций Выбираете девайс ближе к вашему и вперед
При выборе адресов для ведущей\ведомых плат не обязательно, но желательно придерживаться
еще:
1
2
опечатка… для мастера адрес, естветвенно, не нужен