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

 
 
 
Reply to this topicStart new topic
> rs485 9615, проблема передачи/приема данных по rs485
mery
сообщение Dec 20 2012, 07:10
Сообщение #1


Участник
*

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



Добрый день!
Помогите решить следующу проблему. У меня есть плата с выходом rs485 скорость передачи данных получается по документации 9615. подключаюсь к ней с ПК по переходнику rs232-rs485. Написала программу под winXP шлю данный по последовательному порту и принимаю их от платы. Когда работает шлю данные в бесконечном цикле, т.е с какой-то частотой шлю посылки с ПК на плату, иногда она в ответ вместо кода подтверждения выполнения команды шлет 0хЕ0 или 0хС0.
Иногда она просто не отвечает. Что делать. Может это быть из-за того, что скорость передачи по rs232 - 9600, а в МК - 9615?
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Dec 20 2012, 07:22
Сообщение #2


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(mery @ Dec 20 2012, 11:10) *
Может это быть из-за того, что скорость передачи по rs232 - 9600, а в МК - 9615?

Нет, не может.
15/9600 = 0,156%, UART и СОМ-порт нормально работают при разбежках до 5% (которые на 10 битах суммируются в 50 и могут вызвать сбой)


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Dec 20 2012, 07:28
Сообщение #3


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(mery @ Dec 20 2012, 11:10) *
Может это быть из-за того, что скорость передачи по rs232 - 9600, а в МК - 9615?

Нет. Отбросьте сразу. Нормально там по скорости.
Но Вы не сказали подробности: паритет, число стопов, каким образом "встаём" на передачу - аппаратным RTS или программно включили - и - поехали.
Вернее, не такой вопрос. Передача прерывается?
Go to the top of the page
 
+Quote Post
mery
сообщение Dec 20 2012, 10:10
Сообщение #4


Участник
*

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



скорость 9615
паритет нет
стоп биты 1
четность нет
на winapi программирую так:
Код
dcb.BaudRate = 9600;//temp;//9600;//StrToInt(Form1->ComboBox2->Text);       //задаём скорость передачи 115200 бод
dcb.fBinary = TRUE;                                    //включаем двоичный режим обмена
dcb.fOutxCtsFlow = FALSE;                              //выключаем режим слежения за сигналом CTS
dcb.fOutxDsrFlow = FALSE;                              //выключаем режим слежения за сигналом DSR
dcb.fDtrControl = DTR_CONTROL_DISABLE;                 //отключаем использование линии DTR
dcb.fDsrSensitivity = FALSE;                           //отключаем восприимчивость драйвера к состоянию линии DSR
dcb.fNull = FALSE;                                     //разрешить приём нулевых байтов
dcb.fRtsControl = RTS_CONTROL_DISABLE;                 //отключаем использование линии RTS
dcb.fAbortOnError = FALSE;                             //отключаем остановку всех операций чтения/записи при ошибке


dcb.ByteSize = 8;                                      //задаём 8 бит в байте
dcb.Parity = 0;


с платы (МК) ответы прекращаютя, т.е. зависает
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Dec 20 2012, 10:42
Сообщение #5


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

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



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


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
mery
сообщение Dec 20 2012, 11:28
Сообщение #6


Участник
*

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



я то же так думала и слала информацию с различными промежутками времени от 50 до 1000 ms. Пробовала просто случайным образом нажатием кнопки отправить посылку отсылать данные. Результат тот же.
Go to the top of the page
 
+Quote Post
=AK=
сообщение Dec 20 2012, 11:44
Сообщение #7


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(mery @ Dec 20 2012, 17:40) *
Иногда она просто не отвечает. Что делать.


Поставить на линии RS485 два резистора по 1к, один резистор на +5, другой на 0. Резисторы поставить таким образом, чтобы в пассивном состоянии линии, когда все передатчики выключены, на входах UART-ов обеспечивался высокий логический уровень.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Dec 20 2012, 12:07
Сообщение #8


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Дополню:
Резисторы от 6 ноги к 8-й и от 7-й к 5-й трансивера
Go to the top of the page
 
+Quote Post
Lagman
сообщение Dec 20 2012, 19:18
Сообщение #9


Знающий
****

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



RS485 двухпроводный? У вас контроллер работает с UART? а потом стоит преобразователь в RS485? В этом преобразователе есть бит переключения Tx/Rx? почитайте в даташите, на этот преобразователь, какое время занимает переключение, надо его учитывать и в плате в процессе передачи или приема не изменять этот переключатель. Так же в преобразователе RS232/RS485 идет так же управление и там тоже не мешает посмотреть характеристики.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Dec 21 2012, 06:52
Сообщение #10


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Если RTS не заведен, Вы делаете правильно, иначе - его надо дергать перед началом посылки, да еще и паузу желательно. Умные дядьки из отсюдава придумали заместо паузы свинячить первым байтом 0xF0, он позволяет восстановить синхру при возможном образовании помех от включения трансивера на передачу. Типа "продуть канал".
Go to the top of the page
 
+Quote Post
mery
сообщение Dec 21 2012, 07:50
Сообщение #11


Участник
*

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



У меня микросхема max483. Жаль не могу выложить схему. К МК она подключена через hef4066bt. RE, DE соедины и подключены к МК. RO и DI подключены через hef4066bt на МК.
Go to the top of the page
 
+Quote Post
=AK=
сообщение Dec 21 2012, 12:23
Сообщение #12


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(mery @ Dec 21 2012, 18:20) *
bla-bla-bla

Вам русским языком сказали: включите подтягивающие резисторы. Все ваши симптомы выглядят как следствие того, что перед началом приема на входы UART-ов приходят произвольные уровни. Без резисторов подтяжки уровни на линии RS485 болтаются как говно в проруби, если вы не в курсе. А тут расписываете какая у вас микросхема и как она подключена, хотя это не играет никакой рояли. Включите резисторы и будет вам щастье, и не парьте нам мозги ненужными описаниями.
Go to the top of the page
 
+Quote Post

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

 


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


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