mery 0 20 декабря, 2012 Опубликовано 20 декабря, 2012 · Жалоба Добрый день! Помогите решить следующу проблему. У меня есть плата с выходом rs485 скорость передачи данных получается по документации 9615. подключаюсь к ней с ПК по переходнику rs232-rs485. Написала программу под winXP шлю данный по последовательному порту и принимаю их от платы. Когда работает шлю данные в бесконечном цикле, т.е с какой-то частотой шлю посылки с ПК на плату, иногда она в ответ вместо кода подтверждения выполнения команды шлет 0хЕ0 или 0хС0. Иногда она просто не отвечает. Что делать. Может это быть из-за того, что скорость передачи по rs232 - 9600, а в МК - 9615? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 16 20 декабря, 2012 Опубликовано 20 декабря, 2012 · Жалоба Может это быть из-за того, что скорость передачи по rs232 - 9600, а в МК - 9615? Нет, не может. 15/9600 = 0,156%, UART и СОМ-порт нормально работают при разбежках до 5% (которые на 10 битах суммируются в 50 и могут вызвать сбой) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 20 декабря, 2012 Опубликовано 20 декабря, 2012 · Жалоба Может это быть из-за того, что скорость передачи по rs232 - 9600, а в МК - 9615? Нет. Отбросьте сразу. Нормально там по скорости. Но Вы не сказали подробности: паритет, число стопов, каким образом "встаём" на передачу - аппаратным RTS или программно включили - и - поехали. Вернее, не такой вопрос. Передача прерывается? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mery 0 20 декабря, 2012 Опубликовано 20 декабря, 2012 · Жалоба скорость 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 0 20 декабря, 2012 Опубликовано 20 декабря, 2012 · Жалоба Может она за Вами банально не успевает. Ей же надо принять Ваш байт , что-то сделать, выполнить , посчитать , отослать Вам ответ. Попробуйте делать паузы в словах Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mery 0 20 декабря, 2012 Опубликовано 20 декабря, 2012 · Жалоба я то же так думала и слала информацию с различными промежутками времени от 50 до 1000 ms. Пробовала просто случайным образом нажатием кнопки отправить посылку отсылать данные. Результат тот же. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=AK= 10 20 декабря, 2012 Опубликовано 20 декабря, 2012 · Жалоба Иногда она просто не отвечает. Что делать. Поставить на линии RS485 два резистора по 1к, один резистор на +5, другой на 0. Резисторы поставить таким образом, чтобы в пассивном состоянии линии, когда все передатчики выключены, на входах UART-ов обеспечивался высокий логический уровень. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 20 декабря, 2012 Опубликовано 20 декабря, 2012 · Жалоба Дополню: Резисторы от 6 ноги к 8-й и от 7-й к 5-й трансивера Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lagman 1 20 декабря, 2012 Опубликовано 20 декабря, 2012 · Жалоба RS485 двухпроводный? У вас контроллер работает с UART? а потом стоит преобразователь в RS485? В этом преобразователе есть бит переключения Tx/Rx? почитайте в даташите, на этот преобразователь, какое время занимает переключение, надо его учитывать и в плате в процессе передачи или приема не изменять этот переключатель. Так же в преобразователе RS232/RS485 идет так же управление и там тоже не мешает посмотреть характеристики. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 21 декабря, 2012 Опубликовано 21 декабря, 2012 · Жалоба Если RTS не заведен, Вы делаете правильно, иначе - его надо дергать перед началом посылки, да еще и паузу желательно. Умные дядьки из отсюдава придумали заместо паузы свинячить первым байтом 0xF0, он позволяет восстановить синхру при возможном образовании помех от включения трансивера на передачу. Типа "продуть канал". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mery 0 21 декабря, 2012 Опубликовано 21 декабря, 2012 · Жалоба У меня микросхема max483. Жаль не могу выложить схему. К МК она подключена через hef4066bt. RE, DE соедины и подключены к МК. RO и DI подключены через hef4066bt на МК. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=AK= 10 21 декабря, 2012 Опубликовано 21 декабря, 2012 · Жалоба bla-bla-bla Вам русским языком сказали: включите подтягивающие резисторы. Все ваши симптомы выглядят как следствие того, что перед началом приема на входы UART-ов приходят произвольные уровни. Без резисторов подтяжки уровни на линии RS485 болтаются как говно в проруби, если вы не в курсе. А тут расписываете какая у вас микросхема и как она подключена, хотя это не играет никакой рояли. Включите резисторы и будет вам щастье, и не парьте нам мозги ненужными описаниями. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться