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

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

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


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

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