|
Сеть из AVR |
|
|
|
May 8 2011, 22:11
|
Группа: Новичок
Сообщений: 1
Регистрация: 26-10-09
Пользователь №: 53 214

|
Нужен совет. Хочу создать сеть из нескольких AVR по USART. Кто нибудь сделал такое. На рисунке нарисовал примерную схему. Все будет управляться от компа, скажем хочу включить какую то ножку на AVR2, как должен выставлять адреса. С одним AVR-ом практика есть, а вот с несколькими... увы не могу разобраться. Заранее спасибо.
|
|
|
|
|
 |
Ответов
|
Jul 10 2011, 15:28
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (=AK= @ Jul 10 2011, 17:43)  Modbus RTU относится к наличию этой помехи индиферентно. Согласно протоколу, передающий узел обязан включить свой передатчик заранее и удерживать RS-485 в пассивном состоянии, ничего не передавая Этот волшебный "200 кратного  уменьшения влияния помех" механизм де факто реализуется во всех примитивных протоколах типа Master/Slave запрос/ответ, ибо по другому еще надо постараться сделать. Master вообще может держать свой передатчик сколь угодно долго. Даже страшно подумать во во сколько возрастет "помехащищенность"  . При этом вот это Ваше утверждение: QUOTE Согласно протоколу, передающий узел обязан включить свой передатчик заранее и... не есть требование протокола. Требование протокола распространяется только на наличие silent interval. Что там должно быть с физикой и как это обеспечивавается это дело десятое. Вы его можете включать заранее, Вы его можете вообще не выключать, и АБСОЛЮТНО также могут поступать реализаторы в любого подобного протокола в том числе и Pbus. Самое жуткое для борца с помехами состоит в том, что в нормальных протоколах (а это не Modbus RTU  ) началом/концом фрейма является не одиночный (один, совсем один) стартовый бит а определенная последовательность битов. Причем к нормальным протоколам относится и тот самый Modbus ASCII (последовательность из 10 bit), который как Вы экспертно оценили, цитирую "Он непригоден для RS-485, поскольку в этом случае обеспечивает крайне низкую помехоустойчивость". Фраза "Modbus ASCII предназначен для интерфейсов "точка-точка" (RS-232, RS-422, и т.п), о чем прямо написано в стандарте" тоже хороша, если, конечно, не знать что а в спецификации (а не стандарте, которого нет) Modbus over Serial такой глупости, естественно не написано. К этому можно добавить, что за счет избыточности в том-же Modbus ASCII можно пробовать восстанавливать битую информацию. Вот такой вот странный протокол с "крайне низкой помехоустойчивостью". Нет, наверное все-таки не протокол странный, а "эксперт" очень странный  . QUOTE Мне искренне жаль тех заказчиков, для которых вы "протоколов всех уровней реализовывали своими руками".  Главное, что им не жаль  . QUOTE (GetSmart @ Jul 10 2011, 17:42)  Официально лето с 1 июня до 31 августа. Читайте первоисточники. Вы же любите/уважаете стандарт  Не знаю, что Вы называете первоисточником, я ориентируюсь по РЕАЛЬНОМУ первоисточнику - Солнцу. Возражения по поводу его прав считаться первоисточником есть? Ну а чего-уж там кто что думает... Я вот знаю дюжину человек, так они вообще, чудаки, все, как один думают, что у них сейчас совсем даже не лето - +10, дождь. Зима говорят у нас в Сиднее.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 12 2011, 11:23
|

pontificator
     
Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483

|
Цитата(zltigo @ Jul 11 2011, 00:58)  Требование протокола распространяется только на наличие silent interval. Вот что написано про Modbus RTU в самом стандарте:
Промежуток между фреймами, действительно, разделен интервалами молчания длительностью 3.5T. Однако не о них речь, речь идет о самом фрейме, который состоит из стартовой паузы 3.5Т, Модбас сообщения и завершающей паузы 3.5Т. Черным по белому написано, что весь фрейм обязан передаваться непрерывно, как единый поток. Соответственно, согласно этому протоколу, передающей узел обязан включить свой передатчик заранее, не менее чем за 3.5Т до начала передачи сообщения, и держать его включенным еще не менее 3.5Т после передачи последнего символа сообщения. С сожалением приходится констатировать, что некоторые даже такое более-менее прозрачное описание способны истолковать совершенно превратно. На рисунке внизу показано, когда правильно включать передатчик (сигнал TX_EN). А неправильный вариант, который отстаивают местные воинствующие невежды, применять ни в коем случае нельзя, поскольку он резко, на два порядка, ухудшает помехоустойчивость.
Цитата(zltigo @ Jul 12 2011, 04:31)  про в 200 раз повышающий оставим на Вашей совести Я объясню, откуда взялись цифры. Это будет полезно знать не только вам, но и другим начинающим. Линия RS485 с двух сторон должна быть терминирована резисторами, равными волновому сопротивлению кабеля. Типично волновое сопротивление кабеля (витой пары) находится в диапазоне 100...150 Ом, наиболее часто встречается 120 Ом. Таким образом, два параллельно включенных терминирующих резистора имеют сопротивление 50...75 Ом. Резисторы растяжки на линии RS485 обычно подвешиваются к земле и к питанию приемопередатчика RS485, т.е к +5В. Величина этих резисторов выбирается как компромисс между двумя противоречивыми требованиями. С одной стороны, чем меньше сопротивление резисторов растяжки, тем выше помехоустойчивость "висящей в воздухе" линии. Поскольку это именно тот уровень помехоустойчивости, который только и достижим с самопальными протоколами (а также в изделиях, где недотепы превратно понимают правильные протоколы), то, как правило, резисторы подтяжки стараются сделать как можно более низкоомными. С другой стороны, низкоомные резисторы подтяжки вносят неоднородность в линию, а также дополнительно нагружают передатчики, поэтому беспредельно их уменьшать нельзя. Чаще всего используют резисторы в диапазоне 470R...680R. Замечу, что правильному протоколу для RS-485 вообще не нужны резисторы растяжки. Никакие. И это является хорошей проверкой "на вшивость" для протокола: убери резисторы растяжки или, еще лучше, загони через них в линию помеху от генератора - и тогда воочию увидишь, хорош ли протокол и правильно ли он реализован. Итак, резисторы растяжки по 470R создадут на терминаторах 120R||120R смещение 300 мВ. Типичный RS485 приемник имеет входной гистерезис всего 50 мВ, а его дифф. порог срабатывания находится в диапазоне от +200мВ до -200мВ. Соответственно, не вдаваясь в ненужные мелочи, можно принять, что для получения ложного сигнала на входе приемника помехе достаточно преодолеть смещение в 300 мВ. Ток через резисторы растяжки равен 5 мА, напряжение 0.3В, а мощность помехи, которая их пересилит, соответственно, должна составить 1.5 мВт. Когда в линии RS485 есть включенный передатчик, он обеспечивает на линии типично 2.5 В дифф напряжения. Выход драйвера обеспечивает ток не менее 60 мА. Таким образом, для преодоления включенного выхода помеха должна развить мощность 150 мВт. Учитывая, что ток короткого замыкания у драйвера существенно больше (порядка 150 мА), от помехи может потребоваться еще большая мощность. Вот это и дает мне основания утверждать, что правильный (и правильно реализованный) протокол, такой как Modbus RTU, обеспечит в 100-200 раз большую помехоустойчивость, чем типичный самопал. Цитата(aaarrr @ Jul 12 2011, 18:22)  На специальной "гнусной" помехе, которая портит весь фрейм, ага. Условие "худшего из возможных" воздействий - вполне правомерное для серьезных изделий. А радиолюбительские поделки вообще испытывать не требуется, так что - расслабьтесь, очевидно, сказанное к вам не относится.  Цитата(zltigo @ Jul 12 2011, 04:31)  В любом вменяемом базирующимся на ассинхронной передачи байтов протоколе это "долгое время" менее ОДНОГО байта. Один байт, который будучи принятым с ошибкой (paryty или frame) и/или НЕ будет соответствовать комбинации начала фрейма будет отброшен. Опасное, так сказать время (почему всю "помехоустойчивось" Вы сводите только к нему оставим на Вашей совести) за время которого помеха способна вызвать потерю всего фрейма это время менее передачи одного символа. В дебильнейшем даже с этой точки оценки Modbus RTU помеха в 1+1,5 символьном интервале перед началом фрейма вызывает облом со всем фреймом. Вот такой он оказывается "обеспечивающий максимально возможную для RS-485 помехоустойчивость" протокол. Абыдно, да.... Вы не понимаете. Никакая помеха, наведенная на свободную линию перед началом фрейма (т.е. до того, как будет включен передатчик) в Modbus RTU и не способна вызвать потерю фрейма. В течении стартового интервала фрейма, который длится 3.5Т, все помехи, наведенные ранее, будут отброшены приемниками. К началу прихода сообщения все UARTs будут готовы к приему, приемные буфера пусты. Фрейм будет принят без искажений. Вот в Modbus ASCII - там помеха, наведенная на свободную линию, действительно, способна ложно запустить UARTы приемников и исказить стартовый символ ":", в результате чего весь фрейм будет потерян. Неважно, какой длительности этот критический интервал. Если протокол имеет такой критический ("опасный") интервал, в течении которого слабая помеха может его испортить, то это никуда не годный протокол. Правда, Modbus ASCII можно легко улучшить, сделать помехоустойчивым. Для этого достаточно, например, чтобы в начале фрейма передатчик выдавал символ ":" не один раз, а дважды. Первый символ может быть испорчен помехой, однако второй - очистит буфера приемников и весь фрейм будет принят правильно. Такой улучшенный вариант Modbus ASCII дает пример помехоустойчивого интерфейса, которому не нужны тайм-ауты. Учитесь, GetSmart, авось и правда поумнеете.  Цитата(Dog Pawlowa @ Jul 11 2011, 21:40)  Что касается стартовой последовательности бит... Как использовать это с помощью стандартного UARTа во всем диапазоне параметров передачи? Пример "улучшенного Modbus ASCII" дает общую идею: среди всех возможных символов выделяется несколько, при помощи которых организуется управление потоком. Более изящная реализация этой идеи может быть обеспечена несколькими способами. Простое решение получается при помощи байт-стаффинга. Выделяем, например, два символа специального назначения. Один называем "START", второй - "ESC". Если во входном потоке встречается "START", то все приемники обязаны выбросить текущий фрейм и очистить буфера приема. Если в потоке встречается "ESC", то следующий за ним символ интерпретируется особым образом, как команда. Команды могут быть такие: - добавить в приемный буфер символ, код которого соответствует символу "START" - добавить в приемный буфер символ, код которого соответствует символу "ESC" - завершить прием фрейма Понятное дело, что в том случае, когда в передаваемом пакете есть много символов "START" или "ESC", то передаваемое сообщение будет раздуваться, достигая в пределе (в наихудшем случае) примерно удвоенной исходной длины. Несколько более трудное в реализации решение получается если использовать, например, кодирование 6b8b, зато сообщение раздуется всего на четверть, а заодно обеспечивается проверка на четность для каждого байта.
|
|
|
|
|
Jul 12 2011, 11:42
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(=AK= @ Jul 12 2011, 14:23)  А неправильный вариант, который отстаивают местные воинствующие невежды, применять ни в коем случае нельзя, поскольку он резко, на два порядка, ухудшает помехоустойчивость. "Некоторые вопросы реализации интерфейса служат почвой для холивара у эмбеддеров." http://eewiki.ru/wiki/RS-485  Цитата(=AK= @ Jul 12 2011, 14:23)  Вот в Modbus ASCII - там помеха, наведенная на свободную линию, действительно, способна ложно запустить UARTы приемников и исказить стартовый символ ":", в результате чего весь фрейм будет потерян. ...
Правда, Modbus ASCII можно легко улучшить, сделать помехоустойчивым. Для этого достаточно, например, чтобы в начале фрейма передатчик выдавал символ ":" не один раз, а дважды. Первый символ может быть испорчен помехой, однако второй - очистит буфера приемников и весь фрейм будет принят правильно. Остановитесь, дружище! В пылу полемики наговорите фигни, потом будет неловко. Если первый символ ':' (код 0x3A ) искажен, то ничто не помешает исказиться и второму символу, они же передаются со стандартным стопом.
--------------------
Уходя, оставьте свет...
|
|
|
|
Сообщений в этой теме
antosh Сеть из AVR May 8 2011, 22:11 smalcom RS-485 May 9 2011, 05:18 Xenia Это будет суперкомпьютер на AVR!
Вообще-то, ... May 9 2011, 06:07 MaslovVG Почитайте про про алгоритмическую структуру интерф... May 9 2011, 06:39 e-serg Цитата(Xenia @ May 9 2011, 15:07) Это буд... May 9 2011, 06:51 _pv Цитата(Xenia @ May 9 2011, 13:07) ... Тог... May 9 2011, 14:52 VladislavS Действительно, ничего юмористического. Вот есть у ... May 9 2011, 07:15 e-serg Цитата(VladislavS @ May 9 2011, 16:15) ==... May 9 2011, 07:39 zhevak Вагончики... паровозики... кольцо... -- а если я с... May 9 2011, 17:42 e-serg Цитата(zhevak @ May 10 2011, 02:42) Там ж... May 10 2011, 09:21 Клим А в чем проблема использовать RS-232, параллельно ... May 10 2011, 14:23 Xenia Цитата(Клим @ May 10 2011, 18:23) А в чем... May 10 2011, 15:23  _pv Цитата(Xenia @ May 10 2011, 22:23) Паралл... May 10 2011, 17:06   zhevak Цитата(_pv @ May 10 2011, 23:06) вот поэт... May 10 2011, 17:40  zhevak Цитата(Xenia @ May 10 2011, 21:23) Паралл... May 10 2011, 17:21   Клим Цитата(zhevak @ May 10 2011, 20:21) Э-э... May 11 2011, 04:52    zhevak Цитата(Клим @ May 11 2011, 10:52) Ну рису... May 11 2011, 05:42     e-serg Цитата(zhevak @ May 11 2011, 14:42) абсол... May 11 2011, 08:57      iosifk Цитата(e-serg @ May 11 2011, 12:57) ... May 11 2011, 09:34       e-serg Цитата(iosifk @ May 11 2011, 18:34) Посмо... May 11 2011, 09:49        _Pasha Цитата(e-serg @ May 11 2011, 12:49) ... May 19 2011, 14:08         e-serg Цитата(_Pasha @ May 19 2011, 23:08) Интер... May 28 2011, 08:15          haker_fox QUOTE (e-serg @ May 28 2011, 17:15) ... May 28 2011, 12:47     =AK= Цитата(zhevak @ May 11 2011, 15:12) Если ... Jul 10 2011, 02:59      zhevak Цитата(=AK= @ Jul 10 2011, 08:59) Существ... Jul 10 2011, 05:15       =AK= Цитата(zhevak @ Jul 10 2011, 14:45) Предл... Jul 10 2011, 07:25        zltigo QUOTE (=AK= @ Jul 10 2011, 10:25) Для тог... Jul 10 2011, 08:58         =AK= Цитата(zltigo @ Jul 10 2011, 18:28) Дальш... Jul 10 2011, 11:57          zltigo QUOTE (=AK= @ Jul 10 2011, 14:57) Протоко... Jul 10 2011, 12:43           =AK= Цитата(zltigo @ Jul 10 2011, 22:13) И это... Jul 10 2011, 13:14            zltigo QUOTE (=AK= @ Jul 10 2011, 16:14) Да, име... Jul 10 2011, 13:48             =AK= Цитата(zltigo @ Jul 10 2011, 23:18) Ну-ну... Jul 10 2011, 14:43           GetSmart Цитата(zltigo @ Jul 10 2011, 17:43) Просн... Jul 10 2011, 14:27            zltigo QUOTE (GetSmart @ Jul 10 2011, 17:27) Раз... Jul 10 2011, 14:35             GetSmart Цитата(zltigo @ Jul 10 2011, 19:35) Серед... Jul 10 2011, 14:42 ILYAUL А растояния какие между AVR May 10 2011, 17:22 Xenia Нет интерфейса лучше, чем SPI! (С) Холивар May 11 2011, 09:49 MrYuran Цитата(Xenia @ May 11 2011, 13:49) Нет ин... May 11 2011, 10:13  defunct Цитата(MrYuran @ May 11 2011, 13:13) Есть... May 19 2011, 11:46   haker_fox QUOTE (defunct @ May 19 2011, 20:46) Пляс... May 20 2011, 08:01    kolobok0 Цитата(haker_fox @ May 20 2011, 12:01) ..... May 20 2011, 09:22    defunct Цитата(haker_fox @ May 20 2011, 11:01) Не... May 26 2011, 15:09 _Pasha Цитата(Xenia @ May 11 2011, 12:49) Нет ин... May 20 2011, 03:43 _Pasha PC817 на переключение рием/передача
H11L1 на все о... May 20 2011, 12:12 haker_fox Спасибо, друзья! Учту все советы и пожелания... May 27 2011, 03:07 Sirko Цитата...а если драйвер все таки надо ставить - то... May 31 2011, 17:35 Sirko Вот, для размышления, да и просто для "пополн... Jun 8 2011, 20:54 гигипотамм ...и вот еще... Jul 10 2011, 02:25 GetSmart Летнее обострение Jul 10 2011, 12:13 GetSmart Вообще-то любой не совсем уже бездарный протокол о... Jul 10 2011, 15:13 =AK= Цитата(GetSmart @ Jul 11 2011, 00:43) Воо... Jul 11 2011, 10:08  Dog Pawlowa Поскольку мне приходится поддерживать пару десятко... Jul 11 2011, 12:10   zltigo QUOTE (Dog Pawlowa @ Jul 11 2011, 15:10) ... Jul 11 2011, 19:01  sonycman Цитата(=AK= @ Jul 11 2011, 14:08) Более п... Jul 11 2011, 14:35   GetSmart Цитата(sonycman @ Jul 11 2011, 19:35) Хм,... Jul 11 2011, 15:45   =AK= Цитата(sonycman @ Jul 12 2011, 00:05) Хм,... Jul 12 2011, 08:49    aaarrr Цитата(=AK= @ Jul 12 2011, 12:49) Соответ... Jul 12 2011, 08:52 GetSmart Цитата(zltigo @ Jul 10 2011, 20:28) Не зн... Jul 11 2011, 07:50  ViKo Цитата(GetSmart @ Jul 11 2011, 10:50) Пер... Jul 14 2011, 17:29   =AK= Цитата(ViKo @ Jul 15 2011, 02:59) не наше... Jul 15 2011, 00:06    zltigo QUOTE (=AK= @ Jul 15 2011, 02:06) Вам пол... Jul 15 2011, 05:31     =AK= Цитата(zltigo @ Jul 15 2011, 03:08) 422 ... Jul 15 2011, 07:10      zltigo QUOTE (=AK= @ Jul 15 2011, 09:10) Это оче... Jul 15 2011, 11:43       =AK= Цитата(zltigo @ Jul 15 2011, 21:13) Тольк... Jul 15 2011, 11:48       Maverick Цитата(zltigo @ Jul 15 2011, 14:43) Тольк... Jul 15 2011, 12:03        zltigo QUOTE (Maverick @ Jul 15 2011, 14:03) при... Jul 15 2011, 13:07 =AK= Цитата(zltigo @ Jul 11 2011, 00:58) Этот ... Jul 11 2011, 23:09  zltigo QUOTE (=AK= @ Jul 12 2011, 02:09) Я уже г... Jul 12 2011, 04:22   Dog Pawlowa Цитата(zltigo @ Jul 12 2011, 07:22) Дальш... Jul 12 2011, 06:45    zltigo QUOTE (Dog Pawlowa @ Jul 12 2011, 09:45) ... Jul 12 2011, 07:35  GetSmart Цитата(=AK= @ Jul 12 2011, 04:09) Я уже г... Jul 12 2011, 09:30   =AK= Цитата(Dog Pawlowa @ Jul 12 2011, 21:12) ... Jul 12 2011, 11:55  aaarrr Цитата(=AK= @ Jul 12 2011, 15:23) Условие... Jul 12 2011, 12:27  zltigo QUOTE (=AK= @ Jul 12 2011, 14:23) Черным ... Jul 12 2011, 12:30   =AK= Цитата(zltigo @ Jul 12 2011, 22:00) В деб... Jul 12 2011, 13:48    GetSmart Цитата(=AK= @ Jul 12 2011, 18:48) Modbus ... Jul 12 2011, 14:01     =AK= Цитата(GetSmart @ Jul 12 2011, 23:31) У м... Jul 12 2011, 14:06      Maverick Цитата(=AK= @ Jul 12 2011, 17:06) В сочет... Jul 15 2011, 10:51    zltigo QUOTE (=AK= @ Jul 12 2011, 16:33) "К... Jul 12 2011, 17:35     Dog Pawlowa Цитата(zltigo @ Jul 12 2011, 20:35) Естес... Jul 12 2011, 20:00 GetSmart Кажется я всё понял. =AK= изобретатель.
До знакомс... Jul 12 2011, 13:27 haker_fox Гопода, не проще ли сделать адекватный физический ... Jul 14 2011, 06:30 GetSmart А зачем? Найдутся изобретатели, которые умудрятся ... Jul 14 2011, 16:02 zltigo QUOTE (GetSmart @ Jul 14 2011, 18:02) Кро... Jul 14 2011, 17:38  GetSmart Цитата(zltigo @ Jul 14 2011, 22:38) 422 ... Jul 14 2011, 18:12   zltigo QUOTE (GetSmart @ Jul 14 2011, 20:12) И ч... Jul 14 2011, 18:26    GetSmart Цитата(zltigo @ Jul 14 2011, 23:26) Дупле... Jul 14 2011, 18:33     Dog Pawlowa Цитата(GetSmart @ Jul 14 2011, 21:33) Так... Jul 14 2011, 18:44     zltigo QUOTE (GetSmart @ Jul 14 2011, 20:33) Щас... Jul 14 2011, 19:01      Dog Pawlowa Цитата(zltigo @ Jul 14 2011, 22:01) из-за... Jul 15 2011, 02:30    MrYuran Цитата(zltigo @ Jul 14 2011, 22:26) Дупле... Jul 15 2011, 07:13     ViKo Цитата(MrYuran @ Jul 15 2011, 10:13) Не г... Jul 15 2011, 08:16      MrYuran Цитата(ViKo @ Jul 15 2011, 12:16) ... чем... Jul 15 2011, 08:19       ViKo Цитата(MrYuran @ Jul 15 2011, 11:19) Там ... Jul 15 2011, 08:25     =AK= Цитата(MrYuran @ Jul 15 2011, 16:43) Не г... Jul 15 2011, 08:37      MrYuran Цитата(=AK= @ Jul 15 2011, 12:37) В RS422... Jul 15 2011, 08:45       =AK= Цитата(MrYuran @ Jul 15 2011, 18:15) Стра... Jul 15 2011, 08:56
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|