Полная версия этой страницы:
rs485 9615
Добрый день!
Помогите решить следующу проблему. У меня есть плата с выходом rs485 скорость передачи данных получается по документации 9615. подключаюсь к ней с ПК по переходнику rs232-rs485. Написала программу под winXP шлю данный по последовательному порту и принимаю их от платы. Когда работает шлю данные в бесконечном цикле, т.е с какой-то частотой шлю посылки с ПК на плату, иногда она в ответ вместо кода подтверждения выполнения команды шлет 0хЕ0 или 0хС0.
Иногда она просто не отвечает. Что делать. Может это быть из-за того, что скорость передачи по rs232 - 9600, а в МК - 9615?
MrYuran
Dec 20 2012, 07:22
Цитата(mery @ Dec 20 2012, 11:10)

Может это быть из-за того, что скорость передачи по rs232 - 9600, а в МК - 9615?
Нет, не может.
15/9600 = 0,156%, UART и СОМ-порт нормально работают при разбежках до 5% (которые на 10 битах суммируются в 50 и могут вызвать сбой)
_Pasha
Dec 20 2012, 07:28
Цитата(mery @ Dec 20 2012, 11:10)

Может это быть из-за того, что скорость передачи по rs232 - 9600, а в МК - 9615?
Нет. Отбросьте сразу. Нормально там по скорости.
Но Вы не сказали подробности: паритет, число стопов, каким образом "встаём" на передачу - аппаратным RTS или программно включили - и - поехали.
Вернее, не такой вопрос.
Передача прерывается?
скорость 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;
с платы (МК) ответы прекращаютя, т.е. зависает
ILYAUL
Dec 20 2012, 10:42
Может она за Вами банально не успевает. Ей же надо принять Ваш байт , что-то сделать, выполнить , посчитать , отослать Вам ответ. Попробуйте делать паузы в словах
я то же так думала и слала информацию с различными промежутками времени от 50 до 1000 ms. Пробовала просто случайным образом нажатием кнопки отправить посылку отсылать данные. Результат тот же.
Цитата(mery @ Dec 20 2012, 17:40)

Иногда она просто не отвечает. Что делать.
Поставить на линии RS485 два резистора по 1к, один резистор на +5, другой на 0. Резисторы поставить таким образом, чтобы в пассивном состоянии линии, когда все передатчики выключены, на входах UART-ов обеспечивался высокий логический уровень.
_Pasha
Dec 20 2012, 12:07
Дополню:
Резисторы от 6 ноги к 8-й и от 7-й к 5-й трансивера
Lagman
Dec 20 2012, 19:18
RS485 двухпроводный? У вас контроллер работает с UART? а потом стоит преобразователь в RS485? В этом преобразователе есть бит переключения Tx/Rx? почитайте в даташите, на этот преобразователь, какое время занимает переключение, надо его учитывать и в плате в процессе передачи или приема не изменять этот переключатель. Так же в преобразователе RS232/RS485 идет так же управление и там тоже не мешает посмотреть характеристики.
_Pasha
Dec 21 2012, 06:52
Если RTS не заведен, Вы делаете правильно, иначе - его надо дергать перед началом посылки, да еще и паузу желательно. Умные дядьки из отсюдава придумали заместо паузы свинячить первым байтом 0xF0, он позволяет восстановить синхру при возможном образовании помех от включения трансивера на передачу. Типа "продуть канал".
У меня микросхема max483. Жаль не могу выложить схему. К МК она подключена через hef4066bt. RE, DE соедины и подключены к МК. RO и DI подключены через hef4066bt на МК.
Цитата(mery @ Dec 21 2012, 18:20)

bla-bla-bla
Вам русским языком сказали: включите подтягивающие резисторы. Все ваши симптомы выглядят как следствие того, что перед началом приема на входы UART-ов приходят произвольные уровни. Без резисторов подтяжки уровни на линии RS485 болтаются как говно в проруби, если вы не в курсе. А тут расписываете какая у вас микросхема и как она подключена, хотя это не играет никакой рояли. Включите резисторы и будет вам щастье, и не парьте нам мозги ненужными описаниями.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.