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

 
 
10 страниц V  « < 8 9 10  
Reply to this topicStart new topic
> Помехозащищенный RS-485
=AK=
сообщение Nov 28 2015, 00:19
Сообщение #136


pontificator
******

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



Цитата(AHTOXA @ Nov 28 2015, 05:00) *
Символ же 0xFF, переданный перед началом пакета, гарантированно восстановит битовую синхронизацию:

Если уж закладываться на кривизну PC16550, то проще всего делать XOR 0xFF каждого байта при приеме и передаче. Тогда два 0 в начале и 0 в конце передачи на линии появятся как 0xFF.

Цитата(Plain @ Nov 28 2015, 07:26) *
Предлагаю конец теме — ... делаем задержку ... немного попринимали ... делаем задержку ...

Варианты с задержками (в частности, Modbus RTU) обсуждались ранее. Интереснее сделать вообще без задержек, на одном UART-е, без использования таймера.
Go to the top of the page
 
+Quote Post
Plain
сообщение Nov 28 2015, 02:06
Сообщение #137


Гуру
******

Группа: Участник
Сообщений: 6 776
Регистрация: 5-03-09
Из: Москва
Пользователь №: 45 710



Избыточное кодирование — та же задержка, плюс ещё сколько писанины, в сравнении хотя бы с тупо NOP'ами — автору наверное ещё вчера это сдать надо было, а теме уже 10-я страница.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Nov 28 2015, 03:03
Сообщение #138


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (=AK= @ Nov 28 2015, 02:19) *
Если уж закладываться на кривизну PC16550

Не наводите тень на плетень. Никакая и ничья кривизна здесь совершено ни причем. Абсолютно незавтсимое и естественое решение.

QUOTE (Plain @ Nov 28 2015, 04:06) *
тупо NOP'ами

Да уж sad.gif "трясти надо"(с)


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
=AK=
сообщение Nov 28 2015, 05:15
Сообщение #139


pontificator
******

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



Цитата(Plain @ Nov 28 2015, 12:36) *
автору наверное ещё вчера это сдать надо было, а теме уже 10-я страница.

А какая разница? Как ни сделай, хоть бы даже вообще тупо на подтяжки понадеяться, все равно первым сбиваться будет USB, а не RS485. Тем более что у ТС изохронная труба, которая не гарантирует доставку.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Nov 28 2015, 07:18
Сообщение #140


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(=AK= @ Nov 28 2015, 05:19) *
Если уж закладываться на кривизну PC16550, то проще всего делать XOR 0xFF каждого байта при приеме и передаче. Тогда два 0 в начале и 0 в конце передачи на линии появятся как 0xFF.

Суть в том, что последовательность 0xF0, 0xF0 "прочистит" приёмник не всегда, поскольку она опирается на framing error, который обрабатывается разными контроллерами по-разному.
То же самое и с последовательностью 0x00, 0x00.
А вот последовательность 0xFF, 0xFF "прочистит" приёмник гарантированно, поскольку она опирается на детектирование стартового бита, которое у всех контроллеров одинаковое.
Цитата(=AK= @ Nov 28 2015, 05:19) *
Интереснее сделать вообще без задержек, на одном UART-е, без использования таймера.

Надо сделать всё, как вы описали, просто заменить символ 0xF0 на символ 0xFF, и всё будет прекрасно работать на любом контроллере.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
=AK=
сообщение Nov 28 2015, 07:46
Сообщение #141


pontificator
******

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



Цитата(AHTOXA @ Nov 28 2015, 17:48) *
Надо сделать всё, как вы описали, просто заменить символ 0xF0 на символ 0xFF, и всё будет прекрасно работать на любом контроллере.

Когда используется COBS, то удобнее всего при кодировании как специальный символ использовать 0. Поэтому, если надо получить на физическом уровне специальный символ 0xFF, то проще всего делать XOR 0xFF.

Что же касается 0xF0 в том топике, то там мой (радио)канал требовал, чтобы количество 0 и 1 в последовательности было равно. Поэтому я использовал именно 0xF0 как специальный символ для байт-синхронизации и взвешенное кодирование 6b8b для данных, и все прекрасно работало с обычным микроконтроллерным UART-ом.
Go to the top of the page
 
+Quote Post
Atlantis-
сообщение Nov 30 2015, 06:24
Сообщение #142


Местный
***

Группа: Участник
Сообщений: 491
Регистрация: 18-05-11
Пользователь №: 65 102



Цитата(=AK= @ Nov 28 2015, 10:46) *
Когда используется COBS, то удобнее всего при кодировании как специальный символ использовать 0. Поэтому, если надо получить на физическом уровне специальный символ 0xFF, то проще всего делать XOR 0xFF.

не совсем понял, придется делать XOR всех байт пакета?

Цитата(=AK= @ Nov 28 2015, 08:15) *
А какая разница? Как ни сделай, хоть бы даже вообще тупо на подтяжки понадеяться, все равно первым сбиваться будет USB, а не RS485. Тем более что у ТС изохронная труба, которая не гарантирует доставку.

с чего это? USB наиболее удален от помех будет. и длина RS-485 будет 5 метров кабеля, а USB меньше 1 см на плате
Go to the top of the page
 
+Quote Post
Atlantis-
сообщение Nov 30 2015, 08:53
Сообщение #143


Местный
***

Группа: Участник
Сообщений: 491
Регистрация: 18-05-11
Пользователь №: 65 102



Цитата(AHTOXA @ Nov 28 2015, 10:18) *
Суть в том, что последовательность 0xF0, 0xF0 "прочистит" приёмник не всегда, поскольку она опирается на framing error, который обрабатывается разными контроллерами по-разному.
То же самое и с последовательностью 0x00, 0x00.
А вот последовательность 0xFF, 0xFF "прочистит" приёмник гарантированно, поскольку она опирается на детектирование стартового бита, которое у всех контроллеров одинаковое.

Надо сделать всё, как вы описали, просто заменить символ 0xF0 на символ 0xFF, и всё будет прекрасно работать на любом контроллере.

Поясните пожалуйста поподробней, что не так, если передавать 0x00, 0x00 вначале? Первый 0x00 вызовет ошибку фрейма, второй 0x00 будет принят
Если 0xFF передавать, то возможно, что стартовый бит 0xFF попадет на стоповый бит "байта помехи". И тоже будет ошибка фрейма.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Nov 30 2015, 09:19
Сообщение #144


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Atlantis- @ Nov 30 2015, 13:53) *
Поясните пожалуйста поподробней, что не так, если передавать 0x00, 0x00 вначале? Первый 0x00 вызовет ошибку фрейма, второй 0x00 будет принят

Не всегда. Существуют контроллеры, которые считают бит, на котором случился FE, стартовым для следующего фрейма. В случае такого контроллера второй байт 0x00 тоже вызовет FE. Вот тут я рисовал картинку. (Там для 0xF0, но суть та же).
Цитата(Atlantis- @ Nov 30 2015, 13:53) *
Если 0xFF передавать, то возможно, что стартовый бит 0xFF попадет на стоповый бит "байта помехи". И тоже будет ошибка фрейма.

Да, в случае такого контроллера это тоже не даст стопроцентной синхронизации. Но вероятность засинхронизироваться будет выше, чем при передаче 0x00.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Atlantis-
сообщение Nov 30 2015, 09:36
Сообщение #145


Местный
***

Группа: Участник
Сообщений: 491
Регистрация: 18-05-11
Пользователь №: 65 102



Цитата(AHTOXA @ Nov 30 2015, 12:19) *
Не всегда. Существуют контроллеры, которые считают бит, на котором случился FE, стартовым для следующего фрейма. В случае такого контроллера второй байт 0x00 тоже вызовет FE. Вот тут я рисовал картинку. (Там для 0xF0, но суть та же).

Да, в случае такого контроллера это тоже не даст стопроцентной синхронизации. Но вероятность засинхронизироваться будет выше, чем при передаче 0x00.

Я надеюсь, к "таким" контроллерам не относятся STM32 ? У них есть флаг Frame Error.
А вот в Silabs (C8051F320) я такого флага не нашел, вообще ничего про это не написано...
Go to the top of the page
 
+Quote Post
=AK=
сообщение Nov 30 2015, 09:39
Сообщение #146


pontificator
******

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



Цитата(Atlantis- @ Nov 30 2015, 16:54) *
не совсем понял, придется делать XOR всех байт пакета?

Ага. А вас по каким-то причинам напрягает операция XOR? Религия не позволяет, или типа того? Ну тогда не делайте, посылайте как есть, на практике результат будет одинаковый.

Цитата(Atlantis- @ Nov 30 2015, 16:54) *
с чего это? USB наиболее удален от помех будет. и длина RS-485 будет 5 метров кабеля, а USB меньше 1 см на плате

Да хоть миллиметр. Помехи-то все равно пройдут сквозь него. Наведутся они вовне, а пройдут сквозь ваш короткий USB, если им деваться больше некуда. Опторазвязка может помочь частично, но за счет паразитных емкостей помехи все равно пройдут.
Go to the top of the page
 
+Quote Post

10 страниц V  « < 8 9 10
Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


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


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