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

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

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

Сообщение SpaceQuester » 24 фев 2016, 19:29

Всем привет!

Подскажите с огранизацией протокола передачи данных по COM-порту.
Есть Arduino Nano (со своим скетчем) и PC (например реализация в MATLAB, это не суть важно).
Arduino считывает данные с трёх аналоговых пинов (по типу analogRead(A0)) и непрерывно передаёт в Serial COM-порт.
Это:
1) управляющее напряжение источника питания фотоумножителя (положительные 0-5 Вольт)
2) реальное напряжение источника питания (оно через инвертор ОУ от 0 до минус 800 Вольт конвертируется в положительные 0-5 Вольт)
3) питания с выхода фотоумножителя (оно через инвертор ОУ от 0 до минус 40 Вольт конвертируется в положительные 0-5 Вольт)
Т.е. с Ардуино на PC в COM-порт отдаётся три потока с цифрами напряжений, их нужно как то разделять при приёме на PC.
С PC на Ардуино в COM-порт тоже может придти информация для выставления уровня ШИМ.
Т.е. эта информация должна разбираться только в скетче Ардуины.

На ум приходит такое решение. С Ардуины идут непрерывно пакеты в виде "SupplyControlVoltage:2,35", "SupplyOutputVoltage:3,86" и "PTMVoltage:1,67"
С компа может придти например: "FromPCSupplyControlVoltage:1,89".

Вопросы - как организовать такую передачу данных, как формировать сообщения в канал и на другой стороне разбирать их. Как их не перепутать?
Покажите пожалуйста пример.
Нужны ли открывающие и закрывающие биты для таких сообщений?

Спасибо!
Аватара пользователя
SpaceQuester
 
Сообщения: 49
Зарегистрирован: 29 янв 2016, 11:56
Откуда: Нижний Новгород

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

Сообщение Romikgy » 24 фев 2016, 19:43

шлите интом все что читаете 512;768;312 и перевод строки ... на стороне компа приводите к уровню 5 вольт и делайте расчет
die Wahrheit ist irgendwo da draußen
Аватара пользователя
Romikgy
 
Сообщения: 750
Зарегистрирован: 15 ноя 2009, 13:37
Откуда: Porto Franco "Odessa"

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

Сообщение Myp » 24 фев 2016, 20:07

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

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

Сообщение lorry » 25 фев 2016, 00:41

Я так понимаю, что нужно не просто передать эти значения в монитор IDE Arduino. На стороне ПК будет работать какая то программа принимающая эти данные обрабатывающая их и передающая управляющие воздействия обратно в Arduino?
Если это так, то действительно без протокола не обойтись, иначе будут теряться данные, переполняться буфер и вообще не будет понятно какие значения находятся в буфере не данные момент.
Для решения вашей задачи имеется два пути:
1. написать собственный протокол обмена
2. воспользоваться готовым решением.
В первом случае придется писать модули приемо-передатчика как на стороне ПК, так и на стороне Arduino. При этом, нужно продумать последовательность обмена. На передающей стороне вместе с данными передавать какие то дополнительные признаки, типа начала и конца пакета с данными, и не передавать очередной пакет пока принимающая сторона не подтвердит получение текущего пакета. В общем задача не очень сложная, но при этом нужно четко представлять себе как работает асинхронный обмен данными.
Во втором варианте все на много проще - вы берете готовую библиотеку для Arduino, например "messenger" (на всякий случай прикрепил ее) и обмениваетесь из своего приложения с Arduino текстовыми сообщениями в которых содержатся ваши данные и еще некоторая служебная информация. С ней разобраться не трудно рассмотрев примеры имеющиеся в самой библиотеке. Удачи!
Вложения
messenger.rar
(11.18 КиБ) Скачиваний: 0
Аватара пользователя
lorry
 
Сообщения: 448
Зарегистрирован: 04 фев 2014, 13:53
Откуда: Комсомольск-на-Амуре
прог. языки: машинные коды
ФИО: Иван Иваныч

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

Сообщение Myp » 25 фев 2016, 12:30

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

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

Сообщение Romikgy » 25 фев 2016, 14:13

лучше md5 или sha-1
die Wahrheit ist irgendwo da draußen
Аватара пользователя
Romikgy
 
Сообщения: 750
Зарегистрирован: 15 ноя 2009, 13:37
Откуда: Porto Franco "Odessa"

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

Сообщение Madf » 25 фев 2016, 14:53

ну с контролем данных никому хуже не бывало) контрольную сумму можно и считать...
Madf
 
Сообщения: 3298
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...

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

Сообщение Myp » 25 фев 2016, 15:03

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

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

Сообщение Romikgy » 25 фев 2016, 19:46

... идеальный вариант ! подписывать пакеты RSA-1024 !!! никто не перехватит , очень сильно увеличим защищенность канала!
die Wahrheit ist irgendwo da draußen
Аватара пользователя
Romikgy
 
Сообщения: 750
Зарегистрирован: 15 ноя 2009, 13:37
Откуда: Porto Franco "Odessa"

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

Сообщение lorry » 26 фев 2016, 01:09

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

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

Сообщение Duhas » 26 фев 2016, 09:43

Myp писал(а):главное чтобы ничё не сгорело за то время пока ардуина эту контрольную сумму будет вычислять)))

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

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

Сообщение Madf » 26 фев 2016, 11:57

да, бурги (даже в коммерческих проектах) халтурят и вместо КС используют ксор :D
Madf
 
Сообщения: 3298
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...

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

Сообщение Myp » 26 фев 2016, 12:55

lori писал(а):Человеку нужно организовать простой и надежный способ передачи потоков данных от адуино в ПК и обратно
ага, это значит что нужно просто передавать 3 числа через точку с запятой по уже имеющемуся протоколу, uart сам по себе достаточно простой и надёжный.
незачем запихивать эти 3 цифры ещё и во второй протокол.
lori писал(а):И с каких это мы пор с вами на "ты " перешли?

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

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

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

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

SpaceQuester ставит конкретную задачу, не просто передать пакеты данных через COM-порт, а еще и обработать их и подать обратное управление в контроллер. И обрабатывать их будет не человек, а какая то программа, а программа должна понимать, что за данные она получила, и что это именно те данные которые ей нужны, а затем сформировать ответ и переслать его обратно. При этом и контроллер, в свою очередь, тоже должен понять что за информация в него поступила. И здесь речь идет не о низкоуровневом UART, а о протоколе более высокого уровня. К примеру, упрощенно, вам нужно передать число "3,25", после передачи посредством UART у вас в буфере окажется три байта данных содержащих следующие ASCI-символы "3" "," "2" "5" и что дальше с ними делать прикажете? А дальше ваша программа должна извлечь эти байты из буфера, "понять", что это именно те данные которые предназначены для нее, превратить эти ASCI коды обратно в число 3,25 принять какое то решение и вернуть управляющее воздействие в контроллер, опять же в виде какого то числа или строки. А вот UART, как раз, обеспечит передачу этого числа или строки в контроллер. На стороне контроллера должна произойти аналогичная операция по декодированию принятой информации.
Мур, похоже вы не очень в теме. Почитайте теорию. UART это низкоуровневый протокол, который развернет ваши байты в длинную цепочку битов и передаст их без потерь и искажений. UART это асинхронный приемо-передатчик, он обеспечивает передачу данных между приемником и передатчиком и поместит эти данные в буфере приемника, а вот что с ними дальше то делать? Расскажите подробнее если знаете!? Как их оттуда извлечь? Как понять что за байты вы получили? У вас в буфере окажется "куча" бессмысленной и не связанной, на первый взгляд, информации состоящей из переданных передатчиком байт данных. Как понять где закончится первый пакет и начнется второй, третий, четвертый, а при этом учтите разность в быстродействии ПК и ардуино. Кто то из них "напихает" в буфер кучу пакетов, при этом второй не успеет прочитать, произойдет переполнение буфера, данные могут потеряться. Вы вообще пробовали передать данные с контроллера в ПК и обратно? И не просто увидеть цифры в окне терминала, а передать в работающую программу, при этом это должен быть не один единственный байт, а бесконечный поток пакетов данных, при чем проходящий в обе стороны. Затем, как-то обработать их и вернуть ответ в контроллер. Если нет, то попробуйте. И с вашим НЕпониманием в этом вопросе все встанет на свои места.

Да и вообще, что мы тут полемику развели между собой? Где сам SpaceQuester, который тему поднял? SpaceQuester, что молчишь?

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

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

Сообщение Scorpio » 27 фев 2016, 20:49

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

След.

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

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

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