Сеть из Ардуин
- Войдите на сайт для отправки комментариев
Пнд, 10/11/2014 - 19:40
Хочу построить сеть из микроконтроллеров, задача котрых будет сообщать данные на сервер. А все логику возложить на сервер. Собрал сеть на UART 1 master 3 slave. Мастер опрашивает слэйвы они ему отвечают. Вроде бы идилия. Но только до тех пор, пока не нужно опреативно получать данные. Одна из них keypad, пока мастер опрашивает 3 устройства выпадают 2-3 нажатия. Потенциометр тоже рывками инфу шлет. А нужно не пропустить не одного бита.
Можно конечно все складывать в буфер, то тогда все логика теряется.
Я просмотрел i2c, wire, rs485 все по той же логике.
Может есть проводные релизации, где устройства шлют данные не спрашивая мастера об разрешении и при этом как-то разрешают коллизии?
сделайте сеть на радио модулях nrf24l01+ и библиотеке RF24 от maniacbug.
"мастер" - всегда на приёме.
остальные отправляют когда угодно. Автоповтор и автоподтверждение включены по умолчанию.
Хочу построить сеть из микроконтроллеров, задача котрых будет сообщать данные на сервер. А все логику возложить на сервер. Собрал сеть на UART 1 master 3 slave. Мастер опрашивает слэйвы они ему отвечают. Вроде бы идилия. Но только до тех пор, пока не нужно опреативно получать данные. Одна из них keypad, пока мастер опрашивает 3 устройства выпадают 2-3 нажатия. Потенциометр тоже рывками инфу шлет. А нужно не пропустить не одного бита.
Можно конечно все складывать в буфер, то тогда все логика теряется.
Я просмотрел i2c, wire, rs485 все по той же логике.
Может есть проводные релизации, где устройства шлют данные не спрашивая мастера об разрешении и при этом как-то разрешают коллизии?
Признаться, не совсем понял ваши потребности, но если есть необходимость некоторые ус-ва опрашивать регулярно, а другие по их инициативе, то можно заиметь отдельную линию "Запрос на обслуживание", которую любое из ведомых может установить в состояние "Активно" и тогда мастер бросает текущие дела и оправшивает всех ведомых на предмет "не ты ли меня звал" и при получении положительного ответа опрашивает устройство. Если ведомых немного, то можно каждому по линии дать и тогда не надо опрашивать "кто звал", а сразу опросить того кому надо.
сделайте сеть на радио модулях nrf24l01+ и библиотеке RF24 от maniacbug.
"мастер" - всегда на приёме.
остальные отправляют когда угодно. Автоповтор и автоподтверждение включены по умолчанию.
Мне бы по проводам, но возможно все же сделаю на радио.
Признаться, не совсем понял ваши потребности, но если есть необходимость некоторые ус-ва опрашивать регулярно, а другие по их инициативе, то можно заиметь отдельную линию "Запрос на обслуживание", которую любое из ведомых может установить в состояние "Активно" и тогда мастер бросает текущие дела и оправшивает всех ведомых на предмет "не ты ли меня звал" и при получении положительного ответа опрашивает устройство. Если ведомых немного, то можно каждому по линии дать и тогда не надо опрашивать "кто звал", а сразу опросить того кому надо.
Отдельный пин на устройство жаба душит.
Дергать все по запросу конечно лучше, чем постоянно всех опрашивать. Кстати можно по этой линии сразу и передать адрес устройства, и его опросить. Но тут опять мне кажется возможна коллизия, а вдруг 2 одновременно запросят.
Когдатто давно, когда еще не было коаксиального эзернета, я делал сеть типа токен ринг, только с дополнительным общим сигналом о передаче.
Логика такая : все слушают. Один хочет говорить, если линия занятости в единице, значит никто сейчас не говорит и можно ее выставить в ноль и начинать передачу. Пока линия в нуле никто другой не начинает передавать. Главное не забыть ее выставить в ежиницу после окончания трансляции. У каждого слушающего свой адрес , передача может быть адресована только ему, при указании широковещательного адреса слушают все. За один сеанс говорящий можнт послать много пакетов разным адресатам ( у меня было не более 10). Всего устройств было 32, сигнал занятости передавался 20ма токовой петлей, расстояние устойчивой работы было около 200м, если рядом не электросваривали.
Да, передача велась сом портом с уровнями (не , наврал не 12в) нулем с ок и монтажным или на диодах, 1200 бод, контроль четности. При большей частоте дальность уменьшалась.
Когдатто давно я делал сеть типа токен ринг, только с дополнительным общим сигналом о передаче.
Логика такая : все слушают. Один хочет говорить, если линия занятости в единице, значит никто сейчас не говорит и можно ее выставить в ноль и начинать передачу. Пока линия в нуле никто другой не начинает передавать. Главное не забыть ее выставить в ежиницу после окончания трансляции. У каждого слушающего свой адрес , передача может быть адресована только ему, при указании широковещательного адреса слушают все. За один сеанс говорящий можнт послать много пакетов разным адресатам ( у меня было не более 10). Всего устройств было 32, сигнал занятости передавался 20ма токовой петлей, расстояние устойчивой работы было около 200м, если рядом не электросваривали.
Да, передача велась сом портом с уровнями +-12в, 1200 бод, контроль четности. При большей частоте дальность уменьшалась.
Интересно, а на сколько вероятно, что 2 устройства сразу начнут передачу. Между чтением и записью проходит некоторое время, и другой мог начать чтение в этом промежутке.
Каждый, не начав еще передавать проверяет линию занятости на предмет нуля, если есть ноль, передача откладывается.
Каждый, не начав еще передавать проверяет линию занятости на предмет нуля, если есть ноль, передача откладывается.
Все верно, если запросы на проверку линии приходят с разницей более 1900 мкс (столько я прочитал на хабре длится DigitalRead(), а нужно время еще и на запись ), а если меньше, то 2 контроллера начнут передачу. Может конечно дискретность ниже, но все равно она есть.
В те времена далекие, теперь почти былинные, писалось на ассемблере и вероятность коллизий была малозначительная.
опять же если контроль четности выдавал ошибку, сеанс прерывался и пытался перезапуститься со случайной небольшой задержкой., что разрушало коллизию.
Отдельный пин на устройство жаба душит.
Дергать все по запросу конечно лучше, чем постоянно всех опрашивать. Кстати можно по этой линии сразу и передать адрес устройства, и его опросить. Но тут опять мне кажется возможна коллизия, а вдруг 2 одновременно запросят.
Чем-то надо жертвовать. Если у вас устройств не много, то опрос всех на предмет выявления позвавшего времени много не займёт, а коллизий не будет. Будет очередь без приоритетов.
человек не понимат разницу между коммутацей звезда и шина
и такой длинный баян
шиза