реклама на сайте
подробности

 
 
> AVR и ADM485, правильное использование линий RE#, DE
korobov_michael
сообщение Dec 18 2008, 21:43
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 118
Регистрация: 11-03-07
Из: Украина, Харьков
Пользователь №: 26 059



Добрый день.
Суть вопроса в следующем. Работаю с 485 интерфейсом. Линии RE#, DE соединены вместе, контроллер управляет этой парой ножек. Когда я перевожу ножку контроллера из 0 в 1 (т.е. перевожу ADM485 из приемника в передатчик), то по УАРТу получаю прерывание по приходу символа (обычно это 0). Обойти решил изуверским способом. Перед переключением ПРМ->ПРД запретить приемник (RXEN = 0). Но чую, что что-то неправильно. Кто-нибудь сталкивался с подобным? Подскажите, как бороться с проблемой?

P.S. Еще слышал решение (в документации на FTDI232BL), что можно линию DE устанавливать в 1 на время передачи, после чего снимать, а линию RE# держать все время в нуле. При это на линию RxD контроллера заводить логическое ИЛИ от сигнала RO и DE. Практикуется ли подобное и является ли такое решение более правильным?
Go to the top of the page
 
+Quote Post
2 страниц V  < 1 2  
Start new topic
Ответов (15 - 19)
Dog Pawlowa
сообщение Dec 20 2008, 10:35
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(aaarrr @ Dec 20 2008, 12:50) *
Хм, а откуда это вдруг взялась идеология "один мастер много слейвов"? Или уже по умолчанию считается, что RS-485 == modbus? Тут пока ни слова об этом не было.

Одномастерная идеология самая массовая для RS485.
Я тут немножко сопровождаю три десятка последовательных протоколов, две трети из них на RS485/RS422.
Статистика такова - все одномастерные, ни одного modbus. smile.gif

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


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
korobov_michael
сообщение Dec 20 2008, 13:14
Сообщение #17


Частый гость
**

Группа: Свой
Сообщений: 118
Регистрация: 11-03-07
Из: Украина, Харьков
Пользователь №: 26 059



Цитата(Dog Pawlowa @ Dec 20 2008, 12:35) *
Кажется, автор вообще про необходимость согласования задержек переключения не ведает.
Потом начнется - почему пропадают первый символ сообщения, почему мусор...

Весьма далеко идущее предположение. Ведаю. и вопросов про пропадание и мусор не будет.
И вопрос был не по задержкам - проблема была в переходе из Rх в Tx и последующим за этим приходом левого символа. Эта проблема была решена именно задержками и отключением приемника в момент перевода из ПРМ в ПРД. Просто было интересно узнать как подобная проблема решается "по-правильному".
Go to the top of the page
 
+Quote Post
Baser
сообщение Dec 20 2008, 15:03
Сообщение #18


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(defunct @ Dec 20 2008, 01:47) *
Поступаю как и Вы - соединяю RE/DE вместе и управляю одной ногой контроллера. Мусор в момент переключения приемника/передатчика меня не особо беспокоит в силу защищенности протокола, хотя также отмечу, что ни разу с такой проблемой как у вас не столкнулся... Всмысле лишнего "0" после переключения ни разу не словил. И с пул-апом и без оного.

Я думаю, что на самом деле вы не проверяли, ловите вы лишние нули при переключении RO в высокоимпедансное состояние или нет smile.gif
Без подтяжки (внешней или внутренней в МК) все зависит только от наводок на эту линию.
Я вот тоже никогда этим вопросом не "заморачивался" по двум причинам, о которых уже было сказано:
- наличием подтяжек (если позволяет МК, то только внутренних - зачем лишняя детать);
- "правильным" софтом. Ну, словит обработчик приемника лишний байт - "понюхает его, пожует и выплюнет" - есть же протокол передачи данных, есть защитные таймауты. Я про это событие даже и не узнаю smile.gif

Если связь рушиться из-за парочки паразитных переходов на RxD, то нужно что-то в обработчике менять... sad.gif
Go to the top of the page
 
+Quote Post
defunct
сообщение Dec 20 2008, 23:39
Сообщение #19


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(aaarrr @ Dec 20 2008, 10:50) *
Хм, а откуда это вдруг взялась идеология "один мастер много слейвов"?

А откуда вдруг взялась идеология точка-точка при использовании RS-232?
Очевидно из природы интерфейса.

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

Этим и обусловлена его область применения.
Допускаю, что в качестве контр агрумента можно привести Profibus использующую маркерный метод доступа для организации multimaster через RS-485. Но это IMHO уже костыль.

Цитата
Или уже по умолчанию считается, что RS-485 == modbus? Тут пока ни слова об этом не было.

есть еще много всяких xxx-bus, идеология которых - "1 мастер много слейвов", и они прекрасно ложаться на RS485.


Цитата(Baser @ Dec 20 2008, 17:03) *
Я думаю, что на самом деле вы не проверяли, ловите вы лишние нули при переключении RO в высокоимпедансное состояние или нет smile.gif

Я понимаю, что это никак недоказуемо, до тех пор пока не показать в живую... Но все-таки как говорится "зуб даю" - проверил! smile.gif

При работе в Modbus-ASCII - алгоритм у меня используется такой как привел выше:
1. Мастер очищает приемный буфер,
2. шлет запрос слейву,
3. спит некоторое время,
4. вытаскивает ответ из приемного буфера.

Мастер не ищет начала пакета каким-то специальным образом, он предполагает, что ответ слейва начинается с [0]-го символа приемного буфера. Если бы при переключении постоянно выскакивал лишний "0" оно б у меня браковало бы все ответы т.к. данные были бы сдвинуты!! А я вижу адекватные респонзы от слейвов. Буквально сегодня специально проделал этот экперимент.

Помониторил линию RxD, как и ожидал - наблюдал на ней уровень VCC, каких либо всплесков при переключении драйвера не обнаружил.
(подтяжки внешней нет, внутренняя специально отключена, RXEN включен). Подопытные МК - m128, m162 (оба тестировал с UART0), подопытный драйвер - adm485arz

Усложнил задачку - сделал так, что драйвер переключается после отправки каждого! символа на прием, и обратно на передачу (если есть что слать) - полет нормальный! Так что остаюсь пока при своем мнении - у автора проблемы не с подтяжкой. Или фонит что-то ооочень сильно, или снаружи A и B попутаны.


А в остальном Вас поддерживаю beer.gif
Go to the top of the page
 
+Quote Post
Makki
сообщение Feb 6 2009, 02:50
Сообщение #20


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 8-10-07
Пользователь №: 31 163



Была у меня абсолютно такая же проблема. При выходе из режима передачи приемник ловил ложный стартовый бит и вся посылка ни к черту... У меня просто не стояло подтягивающих резисторов на +5 и землю (на самой линии). А в реализации для adm485 рекомендуют... избавился заменой на adm4853
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 18:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.0141 секунд с 7
ELECTRONIX ©2004-2016