Перейти к содержанию
    

rs485 9615

Добрый день!

Помогите решить следующу проблему. У меня есть плата с выходом rs485 скорость передачи данных получается по документации 9615. подключаюсь к ней с ПК по переходнику rs232-rs485. Написала программу под winXP шлю данный по последовательному порту и принимаю их от платы. Когда работает шлю данные в бесконечном цикле, т.е с какой-то частотой шлю посылки с ПК на плату, иногда она в ответ вместо кода подтверждения выполнения команды шлет 0хЕ0 или 0хС0.

Иногда она просто не отвечает. Что делать. Может это быть из-за того, что скорость передачи по rs232 - 9600, а в МК - 9615?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может это быть из-за того, что скорость передачи по rs232 - 9600, а в МК - 9615?

Нет, не может.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может это быть из-за того, что скорость передачи по 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;

 

с платы (МК) ответы прекращаютя, т.е. зависает

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я то же так думала и слала информацию с различными промежутками времени от 50 до 1000 ms. Пробовала просто случайным образом нажатием кнопки отправить посылку отсылать данные. Результат тот же.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Иногда она просто не отвечает. Что делать.

 

Поставить на линии RS485 два резистора по 1к, один резистор на +5, другой на 0. Резисторы поставить таким образом, чтобы в пассивном состоянии линии, когда все передатчики выключены, на входах UART-ов обеспечивался высокий логический уровень.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

RS485 двухпроводный? У вас контроллер работает с UART? а потом стоит преобразователь в RS485? В этом преобразователе есть бит переключения Tx/Rx? почитайте в даташите, на этот преобразователь, какое время занимает переключение, надо его учитывать и в плате в процессе передачи или приема не изменять этот переключатель. Так же в преобразователе RS232/RS485 идет так же управление и там тоже не мешает посмотреть характеристики.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если RTS не заведен, Вы делаете правильно, иначе - его надо дергать перед началом посылки, да еще и паузу желательно. Умные дядьки из отсюдава придумали заместо паузы свинячить первым байтом 0xF0, он позволяет восстановить синхру при возможном образовании помех от включения трансивера на передачу. Типа "продуть канал".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня микросхема max483. Жаль не могу выложить схему. К МК она подключена через hef4066bt. RE, DE соедины и подключены к МК. RO и DI подключены через hef4066bt на МК.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

bla-bla-bla

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...