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


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

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

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

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

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

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

Скетч ардуино будет видеть лишь преобразованные данные и обрабатывать их по установленной заранее логике.


0 комментариев на «“Вопросы по организации последовательной асинхронной связи”»

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

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

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

    • Попутал.
      Разбирался с семплами и всё в голове перемешалось.
      Прошу прощения, спасибо что указали на ошибку.

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

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

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

    еще:
    1
    2

    • опечатка… для мастера адрес, естветвенно, не нужен

Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна конкурс манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение