Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
13 / 13 / 5
Регистрация: 21.06.2013
Сообщений: 128

Как принять 16 бит через Serial port?

15.12.2014, 14:54. Показов 2612. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Хочу осуществить следующую задачу:
имеется МК, который оцифровывает некий сигнал. Все данные складываются в память. АПЦ - 12 битный. Затем хочу из памяти передавать результаты измерений на ПК, для этого задействовал DMA. Все передается хорошо, но возник вопрос как лучше/правильнее осуществить склеивание принятый данных на ПК?
т.е. я отправляю, допустим, одно значение 4095 - 0x0fff. на ПК я приму вначале 0x0f, затем 0xff. Если действовать логически - необходимо первый байт сдвинуть на 8 и сложить со вторым. Но т.к. у меня идет поток данных я не могу так сделать из-за того, что если при обработки придет первым второй байт, а не первый...

Как вообще делают передачу потоковых данных длиной больше 8 бит? или как можно передать структуру через последовательный порт?

С уважением, Евгений
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.12.2014, 14:54
Ответы с готовыми решениями:

Принимаемые данные с датчика через Serial port преобразовать в RGB
Всем доброго времени суток! Стоит одна задача. Необходимо, получая строки с датчика цвета, поступающего в сериал порт, принимать на...

Работа Scilab Serial Port Library (COM port)
Как работает Scilab Serial Port Library ? (может кто то встречал описание подробное, поделитесь ссылкой) Нужно получать с COM port...

Как засунуть serial port в wpf?
Добрый день! Ну вопрос в уже "озвучен"... как засунуть serial port в wpf? Как это сделать не могу понять в упор.

8
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
15.12.2014, 15:11
Цитата Сообщение от Stelsing Посмотреть сообщение
как лучше/правильнее осуществить склеивание принятый данных на ПК?
Через битовые операции, как вы сами и указали. И собирать байты в какой-нибудь коллекции, ну например List<T>.
Цитата Сообщение от Stelsing Посмотреть сообщение
как можно передать структуру через последовательный порт?
Порт передает-принимает байты. Ему нет разницы, сказали передать 10-столько и передаст.
1
13 / 13 / 5
Регистрация: 21.06.2013
Сообщений: 128
15.12.2014, 15:27  [ТС]
Представляю пока так:
1 - Включаю передачу данных;
2 - Когда пришел первый байт - выставляю флаг;
3 - Когда пришел следующий байт, смотрю если флаг установлен - то сдвиг первого на 8, И со вторым байтом и записью в лист, сбрасываю флаг. Если флаг уже был сброшен - возвращаюсь на пункт 1.

Я просто думал, что можно как то более правильней чем по флагу смотреть какой байт пришел
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
15.12.2014, 15:32
Цитата Сообщение от Stelsing Посмотреть сообщение
можно как то более правильней чем по флагу смотреть какой байт пришел
Я немного не понял... Вы принимаете байты. Как вы определяете, какой первый какой второй? По порядку приема из порта? Если так, зачем тогда флаг... Приняли первый, и сохранили сдвинутое значение в переменной. Приняли второй-сложили со сдвинутым значением первого и используйте дальше.
0
13 / 13 / 5
Регистрация: 21.06.2013
Сообщений: 128
15.12.2014, 15:58  [ТС]
Я хочу сделать потоковую передачу от устройства на ПК. (подобие осциллографа) т.е. включаю оцифровку - результат складывается в память из которой его отправляю на ПК. Хорошо, без флага, но как мне тогда знать, что это второй байт? а не первый? и что после его принятия и обработки мне надо складывать все в список?
Может я не правильно представляю как такое организовать... но сейчас попробовал настроить выдачу по 1 байту и его принимать. на скорости 1228800 - обрабатываться не успевает, хотя обработка простая:
C#
1
2
3
4
5
6
7
8
9
10
        void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            this.Invoke(new Action(() =>
            {
                progressBar1.Value = serialPort.ReadByte();
                label1.Text = progressBar1.Value.ToString();
            }
        
            ));
        }
До этого делал по следующему принципу:
Переводил оцифрованное значение в строку, добавлял символы начала/конца и на ПК уже с помощью регулярных выражений выделял свое значение - минусы такого - скорость обработки... (пришлось ставить задержки между отправками, что в свою очередь сильно сказалось на точности получаемого графика, поэтому и думаю как лучше это сделать без строк)
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
15.12.2014, 16:07
Цитата Сообщение от Stelsing Посмотреть сообщение
на скорости 1228800 - обрабатываться не успевает, хотя обработка простая:
Stelsing, по моему опыту работы с последовательным портом, штука на самом деле немного тормознутая.
0
13 / 13 / 5
Регистрация: 21.06.2013
Сообщений: 128
15.12.2014, 16:17  [ТС]
Советуете пробовать с USB HID? я когда то пробовал разбираться, но особо быстро у меня не получилось
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
15.12.2014, 16:47
Stelsing, посмотрите, тут я реализовывал чатик на COM. Может вам чем поможет

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



Но функционал решил оставить, мало ли.
Вложения
Тип файла: rar ComChat.rar (44.1 Кб, 75 просмотров)
0
13 / 13 / 5
Регистрация: 21.06.2013
Сообщений: 128
16.12.2014, 13:05  [ТС]
Так попробовал с ЮСБ работать, отправляю по 64 байта. В программе использую USBHIDDRIVER, получается 150к-200к посылок в секунду, что равняется 9.6 мбайт/сек и 12.8 мбайт/сек. Но это с физическим интерфейсом и МК больше ничего не делает, кроме как подготавливает данные и отправляет их.
Вот, но есть несколько проблем, из-за которых я не использовал это раньше - при попытки остановить прием следующим образом:
C#
1
2
usb_interface.stopRead();
usb_interface.enableUsbBufferEvent(null);
ничего не происходит, как принимало так и принимает. Пробовал
C#
1
usb_interface.Disconnect();
Но результата не дает, только пишет что невозможен доступ к ликвидированному объекту.

Добавлено через 1 час 9 минут
хотя не, на счет скорости немного ошибся) 150-200к это уже в байтах
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.12.2014, 13:05
Помогаю со студенческими работами здесь

Опторазвязка Serial port,как сделать правильно логический 0
Использую последовательный порт, только передаю. Единица - +5В . Ноль - 0 (не -5 В, а именно 0, так реализовано в ардуино). Оптопара 4N35...

Как настраивать serial port под Linux для приёма данных от Arduino Uno
Здравствуйте! Есть устройство на базе Arduino Uno с которым ПК с Линкусом ( Федора ) осуществляет обмен по USB: с ПК уходит байт ...

Как настраивать serial port под Linux для приёма данных от Arduino Uno
Здравствуйте! Есть устройство на базе Arduino Uno с которым ПК с Линкусом ( Федора ) осуществляет обмен по USB: с ПК уходит байт...

serial port
Здравствуйте. Использую стандартные классы .net для работы с ком портом. Работу с портом прослушал программой Portmon. Вот кусочек...

QT serial port
Здравствуйте! пытаюсь заставить работать ком порт в QT для начала решил попробовать простой пример ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru