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

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Нужна свежая идея...
_VoRoN_
сообщение Jul 24 2006, 09:37
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 47
Регистрация: 3-07-06
Из: Россия, Краснодар
Пользователь №: 18 530



Есть преобразователь RS232->RS485. Желание отказаться от использования линий RTS и CTS для выбора прием/передача привели к необходимости использовать МК, а именно AT89C4051. Все бы ничего, но вот скорости передачи могут быть из числа: 9600, 38400, 115200.
Проблема состоит в необходимости определения этой скорости, ибо от этого зависит время удержания управляющего сигнала прием/передача.
Собственные размышления приводят к сложным конструкциям с мутным результатом smile.gif
Может кто сталкивался с подобным или просто есть мысли, буду рад помощи.
Go to the top of the page
 
+Quote Post
Deka
сообщение Jul 24 2006, 09:43
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 248
Регистрация: 18-07-06
Из: Сочи
Пользователь №: 18 890



Перед началом передачи отправлять маркер (все 1) по которому можно выполнить настройку скорости передачи. Вот такое вот решение навскидку.
Go to the top of the page
 
+Quote Post
andrvisht
сообщение Jul 24 2006, 09:43
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064



Цитата(_VoRoN_ @ Jul 24 2006, 12:37) *
Есть преобразователь RS232->RS485. Желание отказаться от использования линий RTS и CTS для выбора прием/передача привели к необходимости использовать МК, а именно AT89C4051. Все бы ничего, но вот скорости передачи могут быть из числа: 9600, 38400, 115200.
Проблема состоит в необходимости определения этой скорости, ибо от этого зависит время удержания управляющего сигнала прием/передача.
Собственные размышления приводят к сложным конструкциям с мутным результатом smile.gif
Может кто сталкивался с подобным или просто есть мысли, буду рад помощи.

А возможно ли зарезервировать первый байт, так чтобы первый импульс был всегда 1 а за ним 0.
чтобы по его длине определить скорость. а принимать данные уже со второго байта и настроенной скорости.
Go to the top of the page
 
+Quote Post
Igor26
сообщение Jul 24 2006, 09:46
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 10-02-05
Пользователь №: 2 544



А почему не использовать преобразователь USB<-->RS-485 и не париться?
Go to the top of the page
 
+Quote Post
_VoRoN_
сообщение Jul 24 2006, 10:06
Сообщение #5


Участник
*

Группа: Новичок
Сообщений: 47
Регистрация: 3-07-06
Из: Россия, Краснодар
Пользователь №: 18 530



К сожалению возможности резервировать байт или посылать маркер нет, т.к. передаваемые данные давно определены и внесение изменений в их состав невозможно (взаимодействуют 2-е железяки). В этом-то и загвоздка...

Кстати, забыл сказать, используется протокол ModBus.

Цитата(Igor26 @ Jul 24 2006, 13:46) *
А почему не использовать преобразователь USB<-->RS-485 и не париться?


Задача стоит именно модернизировать существующее устройство, а не создавать новое. Т.е. RS-232<->RS-485, с автоматическим определением направления и скорости передачи.
Go to the top of the page
 
+Quote Post
vesago
сообщение Jul 24 2006, 10:23
Сообщение #6


Тутэйшы
****

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



Интересно - схемка с сайта rs485.com позволяет это делать без заглавных символов и на таймере 555.
Прикрепленные файлы
Прикрепленный файл  lp24.zip ( 125.46 килобайт ) Кол-во скачиваний: 264
 
Go to the top of the page
 
+Quote Post
_Bill
сообщение Jul 24 2006, 10:42
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(_VoRoN_ @ Jul 24 2006, 12:37) *
Есть преобразователь RS232->RS485. Желание отказаться от использования линий RTS и CTS для выбора прием/передача привели к необходимости использовать МК, а именно AT89C4051. Все бы ничего, но вот скорости передачи могут быть из числа: 9600, 38400, 115200.
Проблема состоит в необходимости определения этой скорости, ибо от этого зависит время удержания управляющего сигнала прием/передача.
Собственные размышления приводят к сложным конструкциям с мутным результатом smile.gif
Может кто сталкивался с подобным или просто есть мысли, буду рад помощи.

Вообще-то, логика выбора не совсем ясна. Я без проблем использую AVR. Там в UART имеется специальный флажок завершения передачи, фиксирующий момент выдачи последнего бита из UART, когда сдвиговый регистр передатчика опустошается. После передачи последнего байта в пакете нужно просто подождать установки этого флажка и смело переключать драйвер RS-485 на прием. Этот флажок может формировать запрос на прерывание, чем я, собственно и пользуюсь.
Go to the top of the page
 
+Quote Post
_VoRoN_
сообщение Jul 24 2006, 10:57
Сообщение #8


Участник
*

Группа: Новичок
Сообщений: 47
Регистрация: 3-07-06
Из: Россия, Краснодар
Пользователь №: 18 530



Цитата(_Bill @ Jul 24 2006, 14:42) *
Цитата(_VoRoN_ @ Jul 24 2006, 12:37) *

Есть преобразователь RS232->RS485. Желание отказаться от использования линий RTS и CTS для выбора прием/передача привели к необходимости использовать МК, а именно AT89C4051. Все бы ничего, но вот скорости передачи могут быть из числа: 9600, 38400, 115200.
Проблема состоит в необходимости определения этой скорости, ибо от этого зависит время удержания управляющего сигнала прием/передача.
Собственные размышления приводят к сложным конструкциям с мутным результатом smile.gif
Может кто сталкивался с подобным или просто есть мысли, буду рад помощи.

Вообще-то, логика выбора не совсем ясна. Я без проблем использую AVR. Там в UART имеется специальный флажок завершения передачи, фиксирующий момент выдачи последнего бита из UART, когда сдвиговый регистр передатчика опустошается. После передачи последнего байта в пакете нужно просто подождать установки этого флажка и смело переключать драйвер RS-485 на прием. Этот флажок может формировать запрос на прерывание, чем я, собственно и пользуюсь.


Применение AVR не является возможным. Использование UART, видимо, было бы лучшим вариантом, но увы...
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jul 24 2006, 13:41
Сообщение #9


Гуру
******

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



Цитата(_VoRoN_ @ Jul 24 2006, 12:37) *
... Все бы ничего, но вот скорости передачи могут быть из числа: 9600, 38400, 115200...
Может кто сталкивался с подобным или просто есть мысли, буду рад помощи.

Сталкивались.
В данном случае джампера помогут :-)
Или использовать программно считываемые перемычки регилия не позволяет?
Или скорость меняется в динамике?


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Kovrov
сообщение Jul 24 2006, 15:54
Сообщение #10


Мастер-фломастер
****

Группа: Свой
Сообщений: 611
Регистрация: 29-12-05
Пользователь №: 12 700



Цитата(Deka @ Jul 24 2006, 13:43) *
Перед началом передачи отправлять маркер (все 1) по которому можно выполнить настройку скорости передачи. Вот такое вот решение навскидку.

а дальше что? ну высветил я старт бит
таймером померил длительность...
и прикинул после этого бодрейт?
или не так?


--------------------
Вон ПОПОВ, клоун клоуном, а радио изобрел!!
Go to the top of the page
 
+Quote Post
_VoRoN_
сообщение Jul 24 2006, 20:54
Сообщение #11


Участник
*

Группа: Новичок
Сообщений: 47
Регистрация: 3-07-06
Из: Россия, Краснодар
Пользователь №: 18 530



Цитата(Dog Pawlowa @ Jul 24 2006, 17:41) *
Цитата(_VoRoN_ @ Jul 24 2006, 12:37) *

... Все бы ничего, но вот скорости передачи могут быть из числа: 9600, 38400, 115200...
Может кто сталкивался с подобным или просто есть мысли, буду рад помощи.

Сталкивались.
В данном случае джампера помогут :-)
Или использовать программно считываемые перемычки регилия не позволяет?
Или скорость меняется в динамике?


джампера - это уже не совсем автоматически получается smile.gif
Go to the top of the page
 
+Quote Post
rezident
сообщение Jul 24 2006, 22:03
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(_VoRoN_ @ Jul 25 2006, 02:54) *
Цитата(Dog Pawlowa @ Jul 24 2006, 17:41) *

Цитата(_VoRoN_ @ Jul 24 2006, 12:37) *

... Все бы ничего, но вот скорости передачи могут быть из числа: 9600, 38400, 115200...
Может кто сталкивался с подобным или просто есть мысли, буду рад помощи.

Сталкивались.
В данном случае джампера помогут :-)
Или использовать программно считываемые перемычки регилия не позволяет?
Или скорость меняется в динамике?


джампера - это уже не совсем автоматически получается smile.gif

В одной сетке скорости обычно уже определены и необходимости автоматического определения baud rate нет. Исключение составляет какой-нибудь хитрож@пый мастер, который конвертором протоколов работает. Но поскольку у вас протокол один - modbus и ряд скоростей известен заренее я считаю, что городить конвертор интерфейсов с автоподстройкой baud rate это, извините, пижонство и ухудшение надежности работы сети. А если уж вы хотите сделать нормальный конвертор RS232<->RS485, то нужно чтобы он выполнял как минимум две функции.
1. задержка выдачи битового потока в линию RS485 на определенный интервал времени (для RTU >=3,5 символа) после переключения приемопередатчика RS485 на передачу
2. задержка переключения приемопередатчика RS485 на прием после передачи в линию (учитывая буфер битового потока) последнего символа (для RTU >=3,5 символа)
Из этих двух функций вытекает еще и наличие буфера для битового потока, который нужно контролировать с двух сторон - на входе конвертора (RS-232) и на выходе (RS485).
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jul 24 2006, 22:18
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(_VoRoN_ @ Jul 24 2006, 13:06) *
К сожалению возможности резервировать байт или посылать маркер нет, т.к. передаваемые данные давно определены и внесение изменений в их состав невозможно (взаимодействуют 2-е железяки). В этом-то и загвоздка...

Кстати, забыл сказать, используется протокол ModBus.

Цитата(Igor26 @ Jul 24 2006, 13:46) *

А почему не использовать преобразователь USB<-->RS-485 и не париться?


Задача стоит именно модернизировать существующее устройство, а не создавать новое. Т.е. RS-232<->RS-485, с автоматическим определением направления и скорости передачи.


Задача "автобод" реализована во всех модемах и обсуждалась неоднократно в том числе на данном форуме. Я реализовывал, и по моим подсчётам необходимо примерно 7 мипсов для скорости 115к. Для получения достоверной информации. (т.е. рекомендую поставить 2313 для данной цели) Сам протокол MODBUS явно предназначен для rs485, так как в начале посылки указывает свою длину, что позволяет при перехвате посылки высчитать время для переключения. Существуют также различные схемы для автоматического перехода по таймеру. (Типа если не пришла "1" хх мс, то переключить.)
А вот ещё идея на вскидку. Можно сделать задержку. (Для этого вовсе не требуется вообще распознавать данные. Что пришло, - то ушло) Т.е. принимать все данные и передавать их с задержкой. Если за время задержки данные не пришли, то можно на передающей переключить.
Ещё один момент. Применение сигнала RTS для данной цели, по моему, фактически стандарт. Чем Вас данное решение не устраивает?
Go to the top of the page
 
+Quote Post
DuMaH
сообщение Jul 24 2006, 23:15
Сообщение #14


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

Группа: Участник
Сообщений: 89
Регистрация: 14-07-06
Пользователь №: 18 822



Вообще, можно и без микроконтроллера, если допускается достаточно большой таймаут на линии: RC-цепочка с Rout 232-го + триггер Шмитта выходом на DE приемопередатчика 485. Запускается от старт-бита. Сам не пробовал, но видел тех кто видел тех кто пробовал smile.gif Видимо пост. времени надо выбирать в 1.5 - 2 раза больше длительности передачи байта на самой низкой скорости.
Если все же с МК, то вот http://focus.ti.com/lit/an/slaa215/slaa215.pdf. Рекомендую, может поможет чем-нибудь.
Go to the top of the page
 
+Quote Post
Леонид Иванович
сообщение Jul 25 2006, 10:31
Сообщение #15


Местный
***

Группа: Участник
Сообщений: 318
Регистрация: 21-07-06
Из: Минск
Пользователь №: 18 986



Цитата(SasaVitebsk @ Jul 25 2006, 01:18) *
Применение сигнала RTS для данной цели, по моему, фактически стандарт. Чем Вас данное решение не устраивает?


Наверное тем, что есть косяки в управлении RTS под Виндами. Было бы правильнее разобраться с программой, чем городить лишнюю аппаратуру.


--------------------
Go to the top of the page
 
+Quote Post

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

 


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


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