Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту


 
Опции темы

Мультимастер через UART

Непрочитано 13.01.2017, 14:04  
awtoap
Прописка
 
Регистрация: 11.04.2006
Сообщений: 197
Сказал спасибо: 86
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
awtoap на пути к лучшему
По умолчанию Мультимастер через UART

Озадачился созданием устройств с управлением по однопроводной шине подобной K-Line. Есть желание прикрутить мультимастер для "общений" между собой.

Собственно вопрос...может есть уже у кого наработки по этому вопросу в виде исходников(С, Pascal) дабы не изобретать велосипед? Имею затык в виде разруливания коллизий на шине.
Реклама:
awtoap вне форума  
Непрочитано 13.01.2017, 17:35  
индюк
Гуру портала
 
Аватар для индюк
 
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 11,117
Сказал спасибо: 202
Сказали Спасибо 3,281 раз(а) в 2,148 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: Мультимастер через UART

Плохая затея.
Ну я бы мониторил бит idle line.
Хотя будет ли оно успевать хз.
Запили на каншине. Там аппаратно делается и приспособлено для мульти изначально
__________________
кагмаподэ магмаподэ
индюк вне форума  
Сказали "Спасибо" индюк
Alex9797 (14.01.2017)
Непрочитано 14.01.2017, 01:56  
awtoap
Прописка
 
Регистрация: 11.04.2006
Сообщений: 197
Сказал спасибо: 86
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
awtoap на пути к лучшему
По умолчанию Re: Мультимастер через UART

С кан шиной не вижу смысла затевать...мк с ним на борту дороже копеечных с UART. Подобный мультимастер реализован на BMW прошлых лет и зовут вроде IBUS. Но там юзают трансивер с контролем коллизий...ценник высоковат (проще тогда уже CAN заюзать). В общем надо разбираться...
awtoap вне форума  
Непрочитано 14.01.2017, 02:19  
индюк
Гуру портала
 
Аватар для индюк
 
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 11,117
Сказал спасибо: 202
Сказали Спасибо 3,281 раз(а) в 2,148 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: Мультимастер через UART

смотря для чего тебе эта шина
от коллизий ты не избавишься просто так.
тут или смириться с ними и слушать свое же эхо и если эхо не то то еще раз отсылать либо отказаться от мультимастера и просто одним мастером постоянно опрашивать ведомых. есть инфа - скачал, нету, следующего опрашиваешь. именно я так и делаю везде.

можно например линию занимать постоянным уровнем несколько десятков миллисек. при этом все остальные прочухают что передавать нельзя. хотя это тоже не полное решение проблемы.

да и к лайн сама по себе - гавно
__________________
кагмаподэ магмаподэ

Последний раз редактировалось индюк; 14.01.2017 в 02:21.
индюк вне форума  
Непрочитано 14.01.2017, 02:33  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,394
Сказал спасибо: 2,016
Сказали Спасибо 1,356 раз(а) в 591 сообщении(ях)
nml на пути к лучшему
По умолчанию Re: Мультимастер через UART

Когда-то давно, еще работали с x51 процессорами - назревала тема с несколькими МК в "типа микросетке", обмен между всеми но не очень напряженный - с паузами. И я начал было прорабатывать тему. Но тема не родившись умерла - и бросил.

Мысли по ней были такие:

1) Не на "шине" а по кольцу. Плюс - полная свобода, надо - передал пакет с адресом, далее его принимает следующий - не мой - передать далее, мой - принять и замолчать. Но - разрыв цепи - и все встало.

2) Вариант - шина, протокол типа - у всех есть номера, и по окончании передачи кого-либо (первого мастера) идут таймслоты, в которых определенный номер может начать передачу, а как она пошла - остальные "замолкли" и сбросили таймер. Но тут - получилось - приоритет - а хотелось бы равноправия. Можно было конечно замутить изменение приоритета по кольцу - но на тех (x51) процессорах это вышло бы, наверное, напряжно для них.

3) Один - основной "мастер" он же пульт, что более подходило к нашей конфигурации системы. Но у него есть пауза - тут он выдает пакет типа "я все, передаю мастера номеру 1". Тот - если нет чего сказать - выдает пакет "передаю мастера номеру 2". Но что-то не понравилось мне в этом.

Возможно, есть и еще варианты - но - как получилось, тема умерла, и "протоколы" остались "на бумаге".
__________________
[ жизнь приятна и красива, если выпить литр пива ]
nml вне форума  
Сказали "Спасибо" nml
Alex9797 (14.01.2017)
Непрочитано 14.01.2017, 02:53  
Alex9797
Почётный гражданин KAZUS.RUN
 
Аватар для Alex9797
 
Регистрация: 20.08.2010
Адрес: Днепр
Сообщений: 8,548
Сказал спасибо: 5,035
Сказали Спасибо 10,605 раз(а) в 3,594 сообщении(ях)
Alex9797 на пути к лучшему
По умолчанию Re: Мультимастер через UART

лучше организовать общение между мастерами так, чтобы коллизии просто исключались. Кстати, трудно представить, что это за устройство, состоящее из нескольких мастеров, которым только дай волю - такой галдеж могут устроить, что парализуют всю работу. Например, каждый будет упорно пытаться отправить какой-то байт, который он считает суперважным. И так - все одновременно. Ну, и до бесконечности.

В первую очередь надо присвоить мастерам приоритеты. Никаких равноправий. Хотя бы у одного должен быть приоритет более высокий, чем у остальных. А лучше, если у всех разные. Тогда, даже если коллизия возникнет, произойдет быстрый выход из нее, победит однозначно тот, у кого прав больше. В принципе, во многих протоколах это уже заложено, приоритет определяется адресом устройства. У кого адрес младше - тот на коне.

Как вариант, можно жестко задать очередность передачи права голоса, от одного мастера к другому. То есть, сначала права мастера получает первый в очереди. И делает все, что хочет. Но ограниченное время. Или просто, выполняет определенную конкретную последовательность действий. Например, может опрашивать конкретных слейвов (в том числе и тех, которые могут быть мастерами). А может просто выдавать некие данные, на всеобщее пользование. Ну, как в том же CANе, в котором куча инфы крутится, и пользуются ею все, кому она нужна.

Так вот, выдал он все, что хотел. Или опросил всех, кого хотел. После этого выдает пакет, в котором содержится адрес очередного устройства, которому передается право мастера. Ну, и так по кругу.

Но тут надо предусмотреть ситуацию, когда один из мастеров выкинет фортель. Может он завис, или вообще умер. И тогда вся цепочка остановится. Чтобы выйти из такой ситуации, нужен арбитр, который знает правила игры, и следит за их соблюдением. И если он видит, что очередному передали право мастера, а он долго сопли жует, и не использует это право - то надо быстренько взять его на заметочку. поставить на счетчик, а тем временем право мастера передать следующему.

Кому быть таким арбитром? Как вариант, такую функцию можно доверить всем участникам. Каждый должен знать адрес не только следующего, но и адрес того, кому он передает право голоса. И тогда, после передачи права следующему, он некоторое время должен проследить, как этот следующий себя ведет. Если не пользуется, значит умер, и тогда его вычеркиваем, а передаем право дальше по кругу.

Ну, для затравки достаточно.
Alex9797 вне форума  
Сказали "Спасибо" Alex9797
nml (14.01.2017)
Непрочитано 14.01.2017, 03:13  
индюк
Гуру портала
 
Аватар для индюк
 
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 11,117
Сказал спасибо: 202
Сказали Спасибо 3,281 раз(а) в 2,148 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: Мультимастер через UART

Ахренеешь все это прописывать. Оно того стоит?
__________________
кагмаподэ магмаподэ
индюк вне форума  
Непрочитано 14.01.2017, 05:15  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО/МО
Сообщений: 12,268
Сказал спасибо: 11,852
Сказали Спасибо 4,157 раз(а) в 3,175 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Мультимастер через UART

Для полного отказа от попытки реализации своего варианта стоит посмотреть на реализации промышленных протоколов.
Читаем CSMA/CD и желание писать все с 0 сразу пропадает.
Тут таки стоит оценить затраты на разработку и стоимость готовых решений (тот же CAN).
Расчёты явно в пользу готовых решений.
Кстати в ценнике на МК учитывается и память на все нужные библиотеки для реализации.
С простым и дешевым вся дорогая программа в итоге может просто не поместиться в память.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
mike-y-k вне форума  
Непрочитано 14.01.2017, 16:27  
awtoap
Прописка
 
Регистрация: 11.04.2006
Сообщений: 197
Сказал спасибо: 86
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
awtoap на пути к лучшему
По умолчанию Re: Мультимастер через UART

Нашел инфу о предшественнике CAN, а именно SAE J1708...в общем ничего сложного с арбитражом в теории.
Собственно ждем простоя линии равное 10 длительностям одного бита...передаем один байт и сами себя слушаем что приняли...если совпадает, значит фигачем оставшуюся последовательность с проверкой каждого байта. Если не совпали отправленный и принятый, то опять ждем простоя линии, но увеличиваем интервал ожидания на случайную величину...это на случай, если одновременно несколько устройств захотят поговорить и повторяем отправку.
Остается красиво это все реализовать на прерываниях, без блокировки в основном цикле...это в идеале, а так можно и самоблокирующиеся функции пока не передаст/примет с некоторым таймаутом, дабы не было вечного залипания. В общем как-то так.
Жаль, что придется пилить самому ))) Или плюнуть и реализовать по простому один мастер и куча слейвов. В любом случае отказ одного слейва должен приводить к остановке всего агрегата в целом и не допускаться дальнейшая эксплуатация.
awtoap вне форума  
Непрочитано 15.01.2017, 16:19  
shindax
Прописка
 
Регистрация: 04.09.2009
Сообщений: 167
Сказал спасибо: 1
Сказали Спасибо 35 раз(а) в 25 сообщении(ях)
shindax на пути к лучшему
По умолчанию Re: Мультимастер через UART

Сообщение от awtoap Посмотреть сообщение
Озадачился созданием устройств с управлением по однопроводной шине подобной K-Line. Есть желание прикрутить мультимастер для "общений" между собой...
А мультимастер действительно необходим? На USART легко ложится LIN. Вы опишите задачу более детально, тогда глядишь и советы будут, исходя из Ваших "хотелок".
shindax вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Тормоза при передаче данных через UART в Bluetooth модуль rus_12345 Микроконтроллеры, АЦП, память и т.д 8 05.01.2015 19:39
Парапсихология, гомеопатия и паранаука Marc2005 Отвлекитесь, эмбеддеры! 2616 05.09.2014 23:07
Передача 8-битных данных через мобильник begun Микроконтроллеры, АЦП, память и т.д 9 12.07.2010 13:36
Нужна консультация по связи МК AVR через uart в кабине трансп.с-ва code-by Микроконтроллеры, АЦП, память и т.д 2 05.04.2010 18:19
Как быстро читать через FT232R? Chudilo Микроконтроллеры, АЦП, память и т.д 9 13.02.2010 00:57


Часовой пояс GMT +4, время: 01:06.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.