Организация передачи данных по COM-порту

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Re: Организация передачи данных по COM-порту

Сообщение lorry » 28 фев 2016, 02:55

Scorpio, пожалуйста, поясните, что вы подразумеваете под XOR и KC? Я не совсем понимаю о чем идет речь.
XOR это сложение по модулю 2, КС как я понимаю это контрольная сумма. Или не так? Просветите. Может мы говорим об одном и том же только разными словами?
Аватара пользователя
lorry
 
Сообщения: 448
Зарегистрирован: 04 фев 2014, 13:53
Откуда: Комсомольск-на-Амуре
прог. языки: машинные коды
ФИО: Иван Иваныч

Re: Организация передачи данных по COM-порту

Сообщение Scorpio » 28 фев 2016, 08:33

Да, все верно. XOR (исключающее ИЛИ) - это последовательное сложение по модулю 2 всех байт строки. Примитивно, но в нашем случае вполне достаточно. Под КС я имел в виду более сложные алгоритмы подсчета контрольной суммы.
Аватара пользователя
Scorpio
 
Сообщения: 2681
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Организация передачи данных по COM-порту

Сообщение lorry » 28 фев 2016, 11:10

И как используете XOR для передачи данных?
Аватара пользователя
lorry
 
Сообщения: 448
Зарегистрирован: 04 фев 2014, 13:53
Откуда: Комсомольск-на-Амуре
прог. языки: машинные коды
ФИО: Иван Иваныч

Re: Организация передачи данных по COM-порту

Сообщение Scorpio » 28 фев 2016, 18:48

В конце пакета вставляется байт XOR всех предыдущих байт. Он проверяется на стороне приемника.
Аватара пользователя
Scorpio
 
Сообщения: 2681
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Организация передачи данных по COM-порту

Сообщение Myp » 28 фев 2016, 19:22

передача 3х цифр с контроллера на компьютер это детский примитив
в программе на пк принимаются данные из компорта и принятые строки складывается в буфер, размер которого делается с нужным запасом.
из буфера строки берутся по очереди и парсятся на значения, это элементарно, вот так в делфи например:
var
s:string;
list:TStrings;
begin
list :=TStringList.Create;
s :='123;567;1023'; //исходная строка
ExtractStrings([';'], [' '], PChar(s), list); //строка разбивается по разделителю ; или любому другому какой нравится.
end;

в TStrings лежат 3 значения которые преобразуются в число например StrToInt(list[0])

Добавлено спустя 14 минут 14 секунд:
кстати, со стороны контроллера программа передачи значений напряжения данных ещё проще будет
Serial.print(analogRead(analogIn1));
Serial.print(";");
Serial.print(analogRead(analogIn2));
Serial.print(";");
Serial.println(analogRead(analogIn3));
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Re: Организация передачи данных по COM-порту

Сообщение Dmitry__ » 28 фев 2016, 19:40

Myp писал(а):из буфера строки берутся по очереди и парсятся на значения

Так XOR и есть самый простой парсер :)
Умрешь различать начало и конец чисел без доп. символов. Я так понимаю, в твоем случае, строки - это CR/LF символы? Ну так XOR делает тоже самое, плюс элементарная проверка на корректность. Такшта - XOR - минимально возможный элемент передачи данных по послед. шинам в нашем шумном мире :)
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Организация передачи данных по COM-порту

Сообщение Scorpio » 28 фев 2016, 20:44

А зачем в данном случае передавать в символьном виде? По запросу от ПК передал 6 байт параметров + XOR.
Аватара пользователя
Scorpio
 
Сообщения: 2681
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Организация передачи данных по COM-порту

Сообщение Dmitry__ » 28 фев 2016, 20:56

Scorpio писал(а):А зачем в данном случае передавать в символьном виде?

Так многие и не знают что можно передавать не символами, printf же :)
Байты для них - хакерство, вот и непонимание xor-ов и crc.

Добавлено спустя 6 минут 29 секунд:
Scorpio писал(а):По запросу от ПК передал 6 байт

Ой, забыл, угадай название след. темы? "Как преобразовать двоичный код в десятичный" :D
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Организация передачи данных по COM-порту

Сообщение lorry » 29 фев 2016, 01:08

Scorpio писал(а):В конце пакета вставляется байт XOR всех предыдущих байт. Он проверяется на стороне приемника.

Понято, но ведь это то же что и использовать символ окончания пакета, разве что это еще одна дополнительная проверка на правильность передачи.
Аватара пользователя
lorry
 
Сообщения: 448
Зарегистрирован: 04 фев 2014, 13:53
Откуда: Комсомольск-на-Амуре
прог. языки: машинные коды
ФИО: Иван Иваныч

Re: Организация передачи данных по COM-порту

Сообщение Dmitry__ » 29 фев 2016, 01:19

lori писал(а):Понято, но ведь это то же что и использовать символ окончания пакета

Это еще и увеличение в 2 раза передаваемых байт, т.к. цифра в ASCII занимает байт, а байтом можно передать 2 десятичные цифры.
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Организация передачи данных по COM-порту

Сообщение Scorpio » 29 фев 2016, 06:17

lori писал(а): но ведь это то же что и использовать символ окончания пакета

Символ окончания пакета м.б. только в символьном терминале. Он д.б. всегда одинаковый. XOR же всегда разный, т.к. зависит от содержания пакета. Если длина пакета заранее известна, то символ окончания не нужен. А XOR позволяет контролировать, что данные не искажены. UART запросто может передать неверное число, если скорость синхронизации приемника и передатчика разойдуться или линия слишком длинная. Многое зависит от физического уровня. RS232 или 485 или это просто TTL. Будет там скрутка или экранированные провода и т.д и т.п. Это я больше для топикастера пишу, остальные собеседники и так в курсе.
Аватара пользователя
Scorpio
 
Сообщения: 2681
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Организация передачи данных по COM-порту

Сообщение Myp » 01 мар 2016, 01:39

Dmitry__ писал(а):Умрешь различать начало и конец чисел без доп. символов.

Во многой мудрости много печали.

функция типа serial.read читает строку и кладёт её в буфер. не надо не начало ни конец искать, оно само всё делает, на ардуине делаешь Serial.println и всё.
функция ExtractStrings разбирает эту строку на части, тоже знать ничё не надо, просто поставь ; в нужном месте.

Dmitry__ писал(а):в нашем шумном мире :)

насколько много шума будет в шине между мегой328 и преобразователем uart->usb которые распаяны на одной ардуине на расстоянии в 1-2 см друг от друга?

ЗЫ
но вобще, у меня на работе, ребята делают свои штуковины в которых процессоры на одной плате по модбасу через 485 общаются, хотя там максимум 10 сантиметров дистанция, задача сводится к отображению текста на символьном экране, а корпус девайса стальной экранированный)))
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Re: Организация передачи данных по COM-порту

Сообщение Dmitry__ » 01 мар 2016, 02:29

Myp писал(а):хотя там максимум 10 сантиметров дистанция, задача сводится к отображению текста на символьном экране, а корпус девайса стальной экранированный)))

А у ТС - фотоумножитель с 800 вольт. :)
И никто не знает, в том числе и ТС, как у него будут организованы провода :)
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Организация передачи данных по COM-порту

Сообщение Duhas » 01 мар 2016, 08:34

у меня для подобных целей свой протокольчик с старт стоп последовательностями и CRC16.. с однйо стороны - гемор, проде все и без этого работает, а с другой - один раз сделал и все стабильно. либо с каналом все ок и данные идут, либо не идут, а неверных данных не бывает.
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: Организация передачи данных по COM-порту

Сообщение ALS » 01 мар 2016, 10:29

+1
Сделать один раз и не заморачиваться более. А применимо, как правило, в 99% всех последующих проектов.
Аватара пользователя
ALS
 
Сообщения: 803
Зарегистрирован: 24 окт 2011, 23:32
Откуда: Севастополь
прог. языки: асм

Пред.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11