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

 
 
> И снова RS485, и снова проблемы, программное управление потоком
Axxel
сообщение Feb 16 2007, 06:25
Сообщение #1


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

Группа: Новичок
Сообщений: 140
Регистрация: 31-01-07
Из: Челябинск
Пользователь №: 24 896



Всем доброго времени суток.

Я уже в принципе писал о своей проблеме в форуме
по микроконтроллерам, но проблема тогда возникала
из-за моих же неправильных действий unsure.gif

Сейчас проблема изменила свой "окрас", суть:

Собрал переходник RS232/RS485 по такой схеме (pdf внизу темы)
Программа в МК примерно следующая:"слушаем" линию-принимаем 20 символов-переходим в режим
передачи-передаем эти самые 20 символов обратно-"слушаем" линию.

На компе (пользуюсь компонентой COM library by Dejan Crnila):
все просто, взводим RTS-передаем-убираем RTS.
смысл кода таков:

RTS=1;
WriteStr(Str);
RTS=0;

происходят в данном случае глюки со следующими
симптомами:пакет передается то ли урезанный, то ли
с жуткими ошибками, но факт в том, что ожидаемый пакет
не отображается в окне терминала приема.После второй посылки
пакет приходит (т.е МК получает свои долгожданные 20 символов)
но естественно коряво.

Прикол также состоит в том что когда делаешь так:

RTS=1;
sleep(N msec);
WriteStr(Str);
sleep(N msec);
RTS=0;

то в зависимости от выбираемых задержек(методом научного тыка smile.gif )
пакет передается/принимается нормально.

Кто-нибудь имел дело с подобными проблемами?
Косяк безусловно мой, скорее железный.
Но в данный момент я окончательно запутался, и даже не знаю в какую
сторону идти. sad.gif

Кстати: скорость 9600, длина 10м, помех нет, терминаторы не ставлю
из-за короткой линии (да и когда ставил проблемы были такие же)
т.е возможность проблемы с линией можно сразу отбросить.
Прикрепленные файлы
Прикрепленный файл  rs485_rs232.pdf ( 15.4 килобайт ) Кол-во скачиваний: 143
 


--------------------
Если боишься - не говори. если сказал - не бойся. ©
Go to the top of the page
 
+Quote Post
2 страниц V  < 1 2  
Start new topic
Ответов (15 - 28)
Andy Mozzhevilov
сообщение Feb 19 2007, 08:45
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206



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


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post
Axxel
сообщение Feb 19 2007, 08:59
Сообщение #17


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

Группа: Новичок
Сообщений: 140
Регистрация: 31-01-07
Из: Челябинск
Пользователь №: 24 896



>Если это не серийное изделие, покрутите эти задержки и добейтесь нужного результата.
Что же делать? wacko.gif

То есть получается что проще спаять переходник с автоматическим Flow controlем,
и не заморачиваться с RTS?
Вы например какие инструменты используете дабы избежать подобных проблем?

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

Сообщение отредактировал Axxel - Feb 19 2007, 09:01


--------------------
Если боишься - не говори. если сказал - не бойся. ©
Go to the top of the page
 
+Quote Post
upc2
сообщение Feb 19 2007, 11:02
Сообщение #18


Знающий
****

Группа: Свой
Сообщений: 506
Регистрация: 29-09-05
Из: Донецк
Пользователь №: 9 063



1.Попробуйте заменить драйвер СОМ-порта. Если при закороченных Rx и Tx ПС переключение RTS
сбивает посылку, то такой драйвер вообще не годится.
2. Вместо RTS стандарт допускает использование одновибраторов для переключения
прием/передача. ..www.bb-elec.com
..http://www.bb-elec.com/tech_articles/rs422_485_app_note/overview.asp#rs485
Go to the top of the page
 
+Quote Post
Axxel
сообщение Feb 19 2007, 11:10
Сообщение #19


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

Группа: Новичок
Сообщений: 140
Регистрация: 31-01-07
Из: Челябинск
Пользователь №: 24 896



> Вместо RTS стандарт допускает использование одновибраторов для переключения

Адаптер с автоматическим управлением потоком?
Т.е все-таки проблема управления RTS-ом имеет место под Windows?
Или проблема все-таки в ДНК? biggrin.gif
И где взять "правильный" драйвер?
Просто программу проверял на 2-х разных компах- одна ерунда.

При использовании автоматического управления потоком проблема должна отпасть?


--------------------
Если боишься - не говори. если сказал - не бойся. ©
Go to the top of the page
 
+Quote Post
upc2
сообщение Feb 19 2007, 11:36
Сообщение #20


Знающий
****

Группа: Свой
Сообщений: 506
Регистрация: 29-09-05
Из: Донецк
Пользователь №: 9 063



О появлении сигнала RTS сигнализирует CTS. Дождитесь этого сигнала, а потом отпавляйте
данные в буфер.Вы наверно упустили контроль этого сигнала.
Go to the top of the page
 
+Quote Post
Axxel
сообщение Feb 19 2007, 11:41
Сообщение #21


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

Группа: Новичок
Сообщений: 140
Регистрация: 31-01-07
Из: Челябинск
Пользователь №: 24 896



Цитата(upc2 @ Feb 19 2007, 13:36) *
О появлении сигнала RTS сигнализирует CTS. Дождитесь этого сигнала, а потом отпавляйте
данные в буфер.Вы наверно упустили контроль этого сигнала.

То есть? blink.gif


--------------------
Если боишься - не говори. если сказал - не бойся. ©
Go to the top of the page
 
+Quote Post
upc2
сообщение Feb 19 2007, 11:51
Сообщение #22


Знающий
****

Группа: Свой
Сообщений: 506
Регистрация: 29-09-05
Из: Донецк
Пользователь №: 9 063



Появление сигнала RTS занимает много времени . Данные начинают идти, а передача еще закрыта.
Теряется стартовый бит и сбиваются посылки.По схеме RTS и CTS соединены.По появлению CTS
можно начинать передачу.Ну в контроллере необходима задержка.
Go to the top of the page
 
+Quote Post
Axxel
сообщение Feb 19 2007, 11:57
Сообщение #23


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

Группа: Новичок
Сообщений: 140
Регистрация: 31-01-07
Из: Челябинск
Пользователь №: 24 896



Цитата(upc2 @ Feb 19 2007, 13:51) *
Появление сигнала RTS занимает много времени . Данные начинают идти, а передача еще закрыта.
Теряется стартовый бит и сбиваются посылки.По схеме RTS и CTS соединены.По появлению CTS
можно начинать передачу.Ну в контроллере необходима задержка.


Да, должен сказать что упустил этот момент, даже в том
плане, что не использовал CTS из-за отсутствия необходимого
пина в разъеме от мыши (часть адаптера). Но на данный момент вроде
все это пока решается задержкой перед отправкой пакета.
А по какому событию можно определить конец посылки?


--------------------
Если боишься - не говори. если сказал - не бойся. ©
Go to the top of the page
 
+Quote Post
upc2
сообщение Feb 19 2007, 12:02
Сообщение #24


Знающий
****

Группа: Свой
Сообщений: 506
Регистрация: 29-09-05
Из: Донецк
Пользователь №: 9 063



Разные программы бывают. Если не влезать в регистры UART, то когда передающий буфер пуст.
Go to the top of the page
 
+Quote Post
Axxel
сообщение Feb 19 2007, 12:08
Сообщение #25


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

Группа: Новичок
Сообщений: 140
Регистрация: 31-01-07
Из: Челябинск
Пользователь №: 24 896



Цитата(upc2 @ Feb 19 2007, 14:02) *
Разные программы бывают. Если не влезать в регистры UART, то когда передающий буфер пуст.

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


--------------------
Если боишься - не говори. если сказал - не бойся. ©
Go to the top of the page
 
+Quote Post
cioma
сообщение Mar 8 2007, 13:37
Сообщение #26


Профессионал
*****

Группа: Свой
Сообщений: 1 226
Регистрация: 19-06-04
Из: Беларусь
Пользователь №: 65



Как уже говорил Andy Mozzhevilov, Винда для такого не предназначена.
У нас была такая же необходимость в переходнике 232-485. Железо сделали как у Вас (простое решение по-другому и не сделаешь). А потом началя секс с программерам и задержками сигнала RTS. Ну не позволяет винда детерминированно управлять RTS относительно потока данных. Ставили девайс на прогон с подключенным осциллом (с infinit отображением сигналов), так иногда выскакивали дикие задержки с установкой, снятием RTS. Между Вами и реальным UART - куча программных прослоек, управлять которыми во времени нет возможности. Выход из этого - ваять полноценный преобразователь например на микроконтроллере: вход - RS-232, выход - RS-485.
Go to the top of the page
 
+Quote Post
muravei
сообщение Mar 8 2007, 14:06
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



Цитата(cioma @ Mar 8 2007, 13:37) *
Выход из этого - ваять полноценный преобразователь например на микроконтроллере: вход - RS-232, выход - RS-485.

Сделайте , по типу:
http://electronix.ru/forum/index.php?act=A...ost&id=9396
и не надо никаких микроконтроллеров.
Go to the top of the page
 
+Quote Post
wangan
сообщение Mar 8 2007, 14:20
Сообщение #28


Местный
***

Группа: Свой
Сообщений: 265
Регистрация: 30-11-05
Из: Омск
Пользователь №: 11 590



Мне кажется кривизна в самой программе, как насчет вместо паузы использовать ожидания события ключивое слово OVERLAPPED. Еслиб посылка бы работала по возврату при постоянной передачи винда бы висла колом.
Go to the top of the page
 
+Quote Post
Axxel
сообщение Mar 19 2007, 11:27
Сообщение #29


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

Группа: Новичок
Сообщений: 140
Регистрация: 31-01-07
Из: Челябинск
Пользователь №: 24 896



Сделал преобразователь с автоматическим управлением потоком, простенький.
Вроде все стало нормально работать, RTS больше не использую.
smile.gif Пока все ОК, но думаю что вернусь еще к этому делу.


--------------------
Если боишься - не говори. если сказал - не бойся. ©
Go to the top of the page
 
+Quote Post

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

 


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


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