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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
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
aaarrr
сообщение Dec 18 2008, 22:44
Сообщение #2


Гуру
******

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



Цитата(korobov_michael @ Dec 19 2008, 00:43) *
Линии RE#, DE соединены вместе, контроллер управляет этой парой ножек. Когда я перевожу ножку контроллера из 0 в 1 (т.е. перевожу ADM485 из приемника в передатчик), то по УАРТу получаю прерывание по приходу символа (обычно это 0). Обойти решил изуверским способом. Перед переключением ПРМ->ПРД запретить приемник (RXEN = 0). Но чую, что что-то неправильно. Кто-нибудь сталкивался с подобным? Подскажите, как бороться с проблемой?

Повесьте pull-up резистор на RXD - линия повисает в воздухе, если nRE = 1.

Цитата(korobov_michael @ Dec 19 2008, 00:43) *
P.S. Еще слышал решение (в документации на FTDI232BL), что можно линию DE устанавливать в 1 на время передачи, после чего снимать, а линию RE# держать все время в нуле.

Правильное решение...

Цитата(korobov_michael @ Dec 19 2008, 00:43) *
При это на линию RxD контроллера заводить логическое ИЛИ от сигнала RO и DE. Практикуется ли подобное и является ли такое решение более правильным?

...а вот это лишнее: тогда лучше или pull-up, или фильтровать прием. Заодно можно и детектор конфликтов сделать.
Go to the top of the page
 
+Quote Post
korobov_michael
сообщение Dec 19 2008, 06:00
Сообщение #3


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

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



Цитата(aaarrr @ Dec 19 2008, 00:44) *
Повесьте pull-up резистор на RXD - линия повисает в воздухе, если nRE = 1.

Я правильно понимаю, что если включен UART, то команда PORTE |= _BV(PE0) для включения подтяжки не будет работать? Т.е. нужен внешний pull-up?

Цитата(aaarrr @ Dec 19 2008, 00:44) *
Заодно можно и детектор конфликтов сделать.

Об этом даже не думал. Спасибо. Действительно ценная идея
Go to the top of the page
 
+Quote Post
swisst
сообщение Dec 19 2008, 07:22
Сообщение #4


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

Группа: Свой
Сообщений: 163
Регистрация: 16-02-07
Из: Харьков
Пользователь №: 25 425



Цитата(aaarrr @ Dec 19 2008, 00:44) *
Повесьте pull-up резистор на RXD - линия повисает в воздухе, если nRE = 1.



Цитата
Receiver Output Enable. A low level enables the receiver output, RO. A high level places it in a high impedance state.


я работаю без подтяжек...нареканий не было...с переключением тоже
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 19 2008, 08:51
Сообщение #5


Гуру
******

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



Цитата(korobov_michael @ Dec 19 2008, 09:00) *
Я правильно понимаю, что если включен UART, то команда PORTE |= _BV(PE0) для включения подтяжки не будет работать? Т.е. нужен внешний pull-up?

Работать будет, но я бы в любом случае рекомендовал внешний резистор.

Цитата(swisst @ Dec 19 2008, 10:22) *
я работаю без подтяжек...нареканий не было...с переключением тоже

Вам просто повезло.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 19 2008, 09:23
Сообщение #6


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(korobov_michael @ Dec 19 2008, 09:00) *
Я правильно понимаю, что если включен UART, то команда PORTE |= _BV(PE0) для включения подтяжки не будет работать?
Будет. Только порт на ввод должен быть настроен. Продано несколько тысяч приборов - нареканий нет.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
swisst
сообщение Dec 19 2008, 12:22
Сообщение #7


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

Группа: Свой
Сообщений: 163
Регистрация: 16-02-07
Из: Харьков
Пользователь №: 25 425



Цитата(aaarrr @ Dec 19 2008, 10:51) *
Работать будет, но я бы в любом случае рекомендовал внешний резистор.

да будет так ! smile.gif
Go to the top of the page
 
+Quote Post
korobov_michael
сообщение Dec 19 2008, 15:21
Сообщение #8


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

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



Цитата(demiurg_spb @ Dec 19 2008, 11:23) *
Будет. Только порт на ввод должен быть настроен.

Насколько я знаю, при включенном УАРТе ножка RxD автоматически настраивается на вход
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 19 2008, 15:36
Сообщение #9


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(korobov_michael @ Dec 19 2008, 18:21) *
Насколько я знаю, при включенном УАРТе ножка RxD автоматически настраивается на вход
А когда отключаете приёмник, что там будет Вы задумывлись?
Я думал что уарт состоит как-бы из двух частей, управляемых независимо через TXEN и RXEN...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 19 2008, 15:49
Сообщение #10


Гуру
******

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



Цитата(korobov_michael @ Dec 19 2008, 18:21) *
Насколько я знаю, при включенном УАРТе ножка RxD автоматически настраивается на вход

Да, но управление pull-up'ом это не отменяет.
Go to the top of the page
 
+Quote Post
korobov_michael
сообщение Dec 19 2008, 20:20
Сообщение #11


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

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



Цитата(aaarrr @ Dec 19 2008, 17:49) *
Да, но управление pull-up'ом это не отменяет.

Я имел ввиду, что при включении функции УАРТ управление ножками контроллера (включая возможность управления подтяжками) полностью переходит к модулю УАРТ и он блокирует мои выбрыки вроде PORTE |= _BV(PE0); и делает с подтяжками так, как ему это удобно. Надо, блин, покурить мануал
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 19 2008, 20:36
Сообщение #12


Гуру
******

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



Цитата(korobov_michael @ Dec 19 2008, 23:20) *
Я имел ввиду, что при включении функции УАРТ управление ножками контроллера (включая возможность управления подтяжками) полностью переходит к модулю УАРТ и он блокирует мои выбрыки вроде PORTE |= _BV(PE0); и делает с подтяжками так, как ему это удобно. Надо, блин, покурить мануал

Нет, управление pull-up'ами остается. Курите мануал.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 19 2008, 21:54
Сообщение #13


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(aaarrr @ Dec 19 2008, 23:36) *
Нет, управление pull-up'ами остается. Курите мануал.
Правильно.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
defunct
сообщение Dec 19 2008, 23:47
Сообщение #14


кекс
******

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


Гуру
******

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

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

 


RSS Текстовая версия Сейчас: 4th July 2025 - 04:40
Рейтинг@Mail.ru


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