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

 
 
> 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
 
Start new topic
Ответов
defunct
сообщение Dec 19 2008, 23:47
Сообщение #2


кекс
******

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



Цитата(korobov_michael @ Dec 18 2008, 23:43) *
P.S. Еще слышал решение (в документации на FTDI232BL), что можно линию DE устанавливать в 1 на время передачи, после чего снимать, а линию RE# держать все время в нуле. При это на линию RxD контроллера заводить логическое ИЛИ от сигнала RO и DE. Практикуется ли подобное и является ли такое решение более правильным?

Я бы так не стал делать - лишняя зависимость от некой сущности "логического ИЛИ".

Поступаю как и Вы - соединяю RE/DE вместе и управляю одной ногой контроллера. Мусор в момент переключения приемника/передатчика меня не особо беспокоит в силу защищенности протокола, хотя также отмечу, что ни разу с такой проблемой как у вас не столкнулся... Всмысле лишнего "0" после переключения ни разу не словил. И с пул-апом и без оного.

Может у Вас что-то фонит на плате излишне? Или с линией что-то не так (проверьте появляется ли этот "0" если поставить терминатор 120om между A и B )?

Цитата
Заодно можно и детектор конфликтов сделать.

Можно-то можно. Вопрос зачем? При идеологии шины "1" мастер "много" слейвов. Конфликт ловить бесполезно - т.к. слейв все равно не может делать перепосылку "по собственному хотению", а мастер и так всегда прав.

Как по мне, с позиции Rs485 мастера - удобно делать так:
- очистить приемный буфер
- послать запрос
- спать
- проверить приемный буфер (и вот чего в этом месте точно не нужно, так это получить собственный же запрос в начале буфера)

слейву как бы тоже все ясно:
- спать
- проверить приемный буфер
- ответить.

В обоих случаях RX спам своми же сообщениями бесполезен и только будет мешать.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 20 2008, 08:50
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(defunct @ Dec 20 2008, 02:47) *
Можно-то можно. Вопрос зачем? При идеологии шины "1" мастер "много" слейвов. Конфликт ловить бесполезно - т.к. слейв все равно не может делать перепосылку "по собственному хотению", а мастер и так всегда прав.

Хм, а откуда это вдруг взялась идеология "один мастер много слейвов"? Или уже по умолчанию считается, что RS-485 == modbus? Тут пока ни слова об этом не было.
Go to the top of the page
 
+Quote Post
defunct
сообщение Dec 20 2008, 23:39
Сообщение #4


кекс
******

Группа: Свой
Сообщений: 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

Сообщений в этой теме
- korobov_michael   AVR и ADM485   Dec 18 2008, 21:43
- - aaarrr   Цитата(korobov_michael @ Dec 19 2008, 00...   Dec 18 2008, 22:44
|- - korobov_michael   Цитата(aaarrr @ Dec 19 2008, 00:44) Повес...   Dec 19 2008, 06:00
||- - demiurg_spb   Цитата(korobov_michael @ Dec 19 2008, 09...   Dec 19 2008, 09:23
||- - korobov_michael   Цитата(demiurg_spb @ Dec 19 2008, 11:23) ...   Dec 19 2008, 15:21
||- - demiurg_spb   Цитата(korobov_michael @ Dec 19 2008, 18...   Dec 19 2008, 15:36
||- - aaarrr   Цитата(korobov_michael @ Dec 19 2008, 18...   Dec 19 2008, 15:49
||- - korobov_michael   Цитата(aaarrr @ Dec 19 2008, 17:49) Да, н...   Dec 19 2008, 20:20
||- - aaarrr   Цитата(korobov_michael @ Dec 19 2008, 23...   Dec 19 2008, 20:36
||- - demiurg_spb   Цитата(aaarrr @ Dec 19 2008, 23:36) Нет, ...   Dec 19 2008, 21:54
|- - swisst   Цитата(aaarrr @ Dec 19 2008, 00:44) Повес...   Dec 19 2008, 07:22
- - aaarrr   Цитата(korobov_michael @ Dec 19 2008, 09...   Dec 19 2008, 08:51
- - swisst   Цитата(aaarrr @ Dec 19 2008, 10:51) Работ...   Dec 19 2008, 12:22
||- - Dog Pawlowa   Цитата(aaarrr @ Dec 20 2008, 12:50) Хм, а...   Dec 20 2008, 10:35
|||- - korobov_michael   Цитата(Dog Pawlowa @ Dec 20 2008, 12:35) ...   Dec 20 2008, 13:14
|- - Baser   Цитата(defunct @ Dec 20 2008, 01:47) Пост...   Dec 20 2008, 15:03
- - Makki   Была у меня абсолютно такая же проблема. При выход...   Feb 6 2009, 02:50


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 12:26
Рейтинг@Mail.ru


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