Нужна библиотека двустороннего обмена между двумя Arduino по одному проводу до 10м

osetroff
Offline
Зарегистрирован: 27.08.2014

Здравствуйте,

Есть главный контроллер и несколько обслуживающих контроллеров (на каждом несколько датчиков).

От главного к обслуживающим идут трехпроводные кабели (до 10м) с проводниками GND, VCC и DATA.

Сейчас DATA соединяет RX главного через мультиплексор с TX обслуживающего.

Т.е. имеем одностороннюю связь от обслуживающих к главному.

Подскажите, пожалуйста, пример или библиотеку, как реализовать двустороннюю связь по одному проводу между двумя Arduino?

Благодарю.

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

по двум проводам - односторонняя:

RX - TX

GND - GND

библиотека serial

osetroff
Offline
Зарегистрирован: 27.08.2014

Еще раз: имеем GND,VCC и DATA.

Нужно организовать по DATA двустороннюю связь "а-ля" 1-wire,

только между двумя Arduino.

Как я понимаю

- DATA притянем к VCC,

- у каждого Arduino будет задействовано по 2 pina: одним прижимаем к земле DATA,

другим детектируем уровень на DATA.

Наверное, уже все расписано и отлажено.

Только я, пока, не нашел.

 

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

osetroff пишет:

Еще раз: имеем GND,VCC и DATA.

Нужно организовать по DATA двустороннюю связь "а-ля" 1-wire,

только между двумя Arduino.

Как я понимаю

- DATA притянем к VCC,

- у каждого Arduino будет задействовано по 2 pina: одним прижимаем к земле DATA,

другим детектируем уровень на DATA.

Наверное, уже все расписано и отлажено.

Только я, пока, не нашел.

ещё раз: UART, библиотека Serial

схема подключения:

RX - TX

TX - RX

GND - GND

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

osetroff пишет:

Еще раз: имеем GND,VCC и DATA.

- у каждого Arduino будет задействовано по 2 pina: одним прижимаем к земле DATA,

это как?

osetroff
Offline
Зарегистрирован: 27.08.2014

Вы меня не поняли.

Нельзя два провода пожертвовать на TX и RX, т.к. у нас для данных всего один провод.

Два других - это питание - GND и VCC.

Без питания обслуживающие Arduino не будут работать.

osetroff
Offline
Зарегистрирован: 27.08.2014

Так же как сделано прерывание  в ds3231, например.

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

В DHT11, по-моему, тоже так.

Не хочется изобретать велосипед.

Вот реализацию чего-нибудь подобного LIN нужно https://ru.wikipedia.org/wiki/LIN

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

ну, можно попробовать по UART одним проводом пользоваться, программно переключая его к RX-TX командой по этой же линии

nevkon
Offline
Зарегистрирован: 20.01.2015

Можно и такое организовать. Для этого вам нужно все соединяемые дуни объявить принимающими. Какая-то одна должна быть ведущей и отправлять синхронизационный пакет. После этого можно будет общаться. Синхронизацию лучше делать через определенное время. На вторичных устройствах указать разрешенное время чуть меньше периода синхронизации и период передачи должен быть продуман так чтобы не получилось что отправляется информация с нескольких устройств.

lean_74
Offline
Зарегистрирован: 22.12.2015
osetroff
Offline
Зарегистрирован: 27.08.2014

nevkon пишет:

Можно и такое организовать. Для этого вам нужно все соединяемые дуни объявить принимающими. Какая-то одна должна быть ведущей и отправлять синхронизационный пакет.

Дык, ясно.

Еще нужно знать, какие железки и как соединить.

Хотелось бы на оптронах pc817.

Все еще надеюсь найти где-то либу и картинку.

osetroff
Offline
Зарегистрирован: 27.08.2014

Спасибо, поковыряю исходники. Пока с железом не ясно.

Gmail
Offline
Зарегистрирован: 15.05.2017

osetroff пишет:
Подскажите, пожалуйста, пример или библиотеку, как реализовать двустороннюю связь по одному проводу между двумя Arduino?

Библиотека 1-Wire  https://www.pjrc.com/teensy/td_libs_OneWire.html  подойдет ? Или рассмотрите Modbus

Gmail
Offline
Зарегистрирован: 15.05.2017

nevkon пишет:
Можно и такое организовать. Для этого вам нужно все соединяемые дуни объявить принимающими. Какая-то одна должна быть ведущей и отправлять синхронизационный пакет. После этого можно будет общаться. Синхронизацию лучше делать через определенное время. На вторичных устройствах указать разрешенное время чуть меньше периода синхронизации и период передачи должен быть продуман так чтобы не получилось что отправляется информация с нескольких устройств.
Modbus так и работает slave/master

osetroff
Offline
Зарегистрирован: 27.08.2014

Gmail пишет:

osetroff пишет:
Подскажите, пожалуйста, пример или библиотеку, как реализовать двустороннюю связь по одному проводу между двумя Arduino?

Библиотека 1-Wire  https://www.pjrc.com/teensy/td_libs_OneWire.html  подойдет ? Или рассмотрите Modbus

Поскольку там есть код и для мастера и для slave - похоже на то, что нужно. Спасибо!

Надеюсь, код работает на прерываниях.

 

С железом все еще не до конца понятно.

Во-первых, у меня топология получается - звезда.

Как будет работать 1-wire на звезде?

Во-вторых, можно запитать шину 1-wire от 3.3в и от 12в.

Что выбрать?

Даже на 10м могут быть наводки. Хочется развязку по питанию.

Хотя, раз земля одна на всех, нужна не развязка, а защита от перенапряжения.

Нашел appnote avr274 как раз про однопроводную двустороннюю передачу по uart.