Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Ответить

Принять данные на ПК со скоростью 1 Мбит

Ср ноя 20, 2019 19:17:11

Во всех USB-UART преобразователях используется кварц на 12 мегагерц. Выходит и скорость ровно 1 Мегабит должна быть доступна и, напротив, скорость 921600 непонятно как как получить из 12 МГц?. Слышал, что в реестре Windows драйверу можно указать нестандартную скорость. Может кто объяснит подробности? Например ATMEGA с кварцем 16 Мгц прекрасно позволяет установить скорость UART 1 Мбит делитель на 16 или 2 Мбит с удвоенной скоростью но, как принять поток на ПК? Мне нужно для отправки пары байт из прерывания вызываемого с частотой 40 Килогерц. Кстати, видел 2 разных драйвера для PL2303HX в одном список скоростей был до 6 Мбит и, я проверил осциллографом, что PL2303HX на самом деле передает и принимает на скорости 6 Мегабит, а после обновления опять только 128 000 максимум, мне лень писать что-то свое для общения с СОМ использовал компонент визуальный для Борланд С++ 6.0. Может есть иной компонент потому как в моем нестандартные скорости не принимаются к сожалению.

P.S. Может поставить старый драйвер, но вот незадача, в визуальном компоненте Борланд С++ нет возможности выбрать скорость 6 Мегабит. Подскажите путь решения. Оптимально было-бы общаться с ATMEGA на скорости 2 Мбит, так как она просто устанавливается в Меге и, присутствует в списке драйвера PL2303HX старого драйвера 2008 года. Высокая скорость 2 и 6 Мбит для PL2303HX была мной протестированна из терминальной программы осциллографом посмотрел тайминги на PL2303HX (TTL) и терминал принимал эхо правильно. Выходит все должно срастись. Только компонент для Borland C++ 6 бы кто помог найти с полным списком скоростей. Писать обращаясь к, как ее DCB лениво. Или может кто исходник подкинет с программированием СОМ в Борланде через DCB. А то заколебался я ограничивать себя скорость 56 000 максимум что сумел согласовать между Мегой и приложением на Борланде С++. Памагите кто може, кто может памагите очень нужно для продолжения экспериментов с полностью цифровым ШИМ для управления преобразователем. Нужно из процессора на комп полуцить осциллограмму, для этого отправлять пару байт непрерывным потоком со скоростью прерывания 40 Килогерц.

Re: Принять данные на ПК со скоростью 1 Мбит

Ср ноя 20, 2019 20:26:47

astrahard писал(а):Оптимально было-бы общаться с ATMEGA на скорости 2 Мбит, так как она просто устанавливается в Меге
Подумайте о том хватит ли у меги производительности для работы с потоком 256 КБ/с и что мега кроме этого успеет сделать.

Re: Принять данные на ПК со скоростью 1 Мбит

Ср ноя 20, 2019 20:57:09

Я же говорю, у меня МЕГА работает с прерыванием АЦП со скоростью 40 Килогерц. В прерывании есть еще запас 10 микросекунд, там нужно вставить отправку 2 байт. Итого все успевает, а принимать мне нужно только запросы ModBus со скоростью 100 в секунду, даже на скорости порта 56 000 все работает и еще остается 30 процентов свободного процессорного времени, которое я меряю в цикле Idle осциллографом. (Весь рабочий код у меня в обработчиках прерываний, в Майн() только инициализация и простой цикл Idle где я дергаю свободной ногой для осциллографа, чтобы свободное время видеть визуально)

P.S. Вообще, я Мегой больше заниматься не буду. На Меге тренировался чисто из спортивного интереса сделать цифровой ШИМ на процике на котором все говорили что это не реально, в результате предсказатели опозорены. Я также упростил выражение векторного регулирования для обобщенного электродвигателя, опозорив авторов векторного регулирования немцев, до меня считалось что упростить выражение НЕВОЗМОЖНО!!!!! Кстати этим я раскрыл тайный секрет фирмы Ti, Возможно? хотя я не уверен, может я их опередил????

Добавлено after 11 minutes 19 seconds:
Вообще, я больше философ (наиболее общие вопросы познания) и математик чем программист и кодер, поэтому и задаю вопросы.

Re: Принять данные на ПК со скоростью 1 Мбит

Чт ноя 21, 2019 11:01:11

astrahard писал(а):Я же говорю, у меня МЕГА работает с прерыванием АЦП со скоростью 40 Килогерц.
Тогда для чего пишите о передаче на скорости 2 Мбод? Чем выше скорость, тем большая производительность должна быть.

astrahard писал(а):На Меге тренировался чисто из спортивного интереса сделать цифровой ШИМ на процике на котором все говорили что это не реально
В смысле программный? Какая частота и разрядность получилась? Что мега кроме шима успевает сделать и как это сказывается на "дрожании" импульсов шима и на задержках выполнения других задач?

Re: Принять данные на ПК со скоростью 1 Мбит

Чт ноя 21, 2019 11:13:54

В файле /usr/include/asm-generic/termbits.h есть параметр B1000000 → скорость в 1Мбит является вполне себе стандартной!
Другое дело, что все кончается B4000000, т.е. для скоростей выше 4Мбит нужно править модуль ядра и задавать свои параметры...

Re: Принять данные на ПК со скоростью 1 Мбит

Чт ноя 21, 2019 12:44:16

Эдя расслабьтся. Из первого сообщения ясно следует что речь про винду.

Re: Принять данные на ПК со скоростью 1 Мбит

Чт ноя 21, 2019 12:51:17

astrahard писал(а):Я же говорю, у меня МЕГА работает с прерыванием АЦП со скоростью 40 Килогерц.
Тогда для чего пишите о передаче на скорости 2 Мбод? Чем выше скорость, тем большая производительность должна быть.

astrahard писал(а): На Меге тренировался чисто из спортивного интереса сделать цифровой ШИМ на процике на котором все говорили что это не реально
В смысле программный? Какая частота и разрядность получилась? Что мега кроме шима успевает сделать и как это сказывается на "дрожании" импульсов шима и на задержках выполнения других задач?

Project1.rar
(6.51 KiB) Скачиваний: 324
Исходник. Программа на Хост.
ModBus.rar
(245.67 KiB) Скачиваний: 300
Разрядность ШИМ 8Бит, разрядность АЦП 10 Бит. Умеет ПИД регулирование и общение по ModBus для ввода уставок, я также получаю диагностику и кусочки осциллограммы. Вот хочу осциллограмму получить полностью.От Меги не потребуется больше чем в прерывании передать 2 байта. Напротив увеличение скорости UART сократит издержки на протокол ModBus. Одновременнная работа почти не отражается на дрожании импульсов, но, поскольку у меня осциллограмма не непрерывная, я смотрел толкно цифровым запоминающим осциллографом, серьезных сбоев не обнаружил. в этой теме подробнее https://radiokot.ru/forum/viewtopic.php?f=57&t=162148

Re: Принять данные на ПК со скоростью 1 Мбит

Чт ноя 21, 2019 13:06:03

То что нельзя выбрать нужную скорость в визуальном компоновщике или даже в списке предоставляемом драйвером ничего не значит. Никто не мешает прописать любую поддерживаемую железом скорость в программе и оно с большой вероятностью будет работать
Тоже самое касается и "залоченного" ком порта прописывайте напрямую и будет вам счастье

Re: Принять данные на ПК со скоростью 1 Мбит

Чт ноя 21, 2019 13:18:47

Я понял, визуальных компонент вряд-ли кто подкинет, да и проблемы с ними. Зачем спрашивается так писать, когда список скоростей спрашивают не у драйвера а зашивают свой?

Re: Принять данные на ПК со скоростью 1 Мбит

Чт ноя 21, 2019 14:12:38

Из первого сообщения ясно следует что речь про винду.

И что? Прошивка для игровых приставок не умеет скорость 1Мбит/с? Ну-ну...

Re: Принять данные на ПК со скоростью 1 Мбит

Чт ноя 21, 2019 14:32:23

Плохо, все плохо. Не нашел сквозного описания прохождения данных по пути, как я себе представляю, TTL сигнал > буфер микросхемы USB-UART 384 или 256 байт > собственно конечные точки USB со скоростью 12 мегабит и темпом 1000 опросов в сек > прерывание USB > файл ОС. Как Вы думаете? правильно представил себе путь данных? И еще, если в микросхеме USB-UART буфер на прием 256 байт, то скорость будет 256*1000(темп USB HOST)=256 Kb/Sec? это если без потерь?

P.S. Кстати, если, как говорит nds , бестолку смотреть на список скоростей в Windows интерфейсе драйвера. То, может существует утилита которая его прочешет на предмет того, что драйвер может запрограммировать в USB-UART микросхему. Тут не так все однозначно, так как я встречал утверждение, что драйвер хранит этот список в реестре Windows в виде соответствия скорость-число делитель для USB-UART (для PL2303HX встречал такое утверждение) микросхемы. Короче мутно как-то. Хочу все знать...

Re: Принять данные на ПК со скоростью 1 Мбит

Чт ноя 21, 2019 15:12:43

Usb-uart не обязательно низкоскоростное устройство, никто не запрещает ему общаться с компом на 480 мегабитах.
ЗЫ все знать не получится

Re: Принять данные на ПК со скоростью 1 Мбит

Чт ноя 21, 2019 15:29:01

Зачем вообще городить дополнительный тормозной буфер, если можно просто взять микроконтроллер с аппаратным USB, поднять на нем CDC ACM и гонять хоть 4 мегабита?

Re: Принять данные на ПК со скоростью 1 Мбит

Чт ноя 21, 2019 15:44:12

Ну зачем Вы так "Usb-uart не обязательно низкоскоростное устройство, никто не запрещает ему общаться с компом на 480 мегабитах." Конечно может теоретически, но практических дешевых реализаций нет. Лучше бы сказали про путь прохождения данных правильно-ли я его представил себе?

Добавлено after 2 minutes 28 seconds:
Зачем вообще городить дополнительный тормозной буфер, если можно просто взять микроконтроллер с аппаратным USB, поднять на нем CDC ACM и гонять хоть 4 мегабита?

Затем, что часть работы уже сделана, и это самое дешевое решение. Мне нужно именно 2 мегабита, вернее 80 килобайт в секунду без потерь. Кроме того в этом случае дешевле выполнить гальваническую изоляцию, чем на USB. Вообще, я планирую освоить передачу данных Манчестерским кодом через пластиковое оптоволокно как Toslink S/PDIF там как раз Манчестер бегает. Изоляция будет Мегавольты. Для ЧПУ и Энергетики сгодиться.

Добавлено after 12 minutes 8 seconds:
Вот еще мысль пришла. Должно-же быть недорогое решение для скоростей порядка 2-20 Мегабит как Toslink S/PDIF к примеру. Эта ниша не заполнена примерами решений. USB интерфейс на очень короткие дистанции с ужасно плохой помехоустойчивостью и без изоляции. Есть еще Ethernet, но опять-же это значительно дороже. Теперь надеюсь все понятно?

Re: Принять данные на ПК со скоростью 1 Мбит

Чт ноя 21, 2019 17:28:59

astrahard писал(а):Исходник.
Используется аппаратный ШИМ. Тогда непонятно что подразумевалось под этим.
astrahard писал(а):На Меге тренировался чисто из спортивного интереса сделать цифровой ШИМ на процике на котором все говорили что это не реально


Eddy_Em писал(а):И что? Прошивка для игровых приставок не умеет скорость 1Мбит/с?
Я что-то подобное писал?

Re: Принять данные на ПК со скоростью 1 Мбит

Чт ноя 21, 2019 17:38:30

astrahard писал(а): Мне нужно именно 2 мегабита, вернее 80 килобайт в секунду без потерь

С аврки? Да ладно! У нее же практически все время выжрет отправка данных. А как их получать в этом случае?
Или у аврки есть DMA, чтобы пока очередная порция данных отправляется, получить следующую?

Re: Принять данные на ПК со скоростью 1 Мбит

Чт ноя 21, 2019 19:12:47

ComPort->CustomBaudRate=2000000; Все заработало. Оказывается драйвер поддерживает 2 Мбит. Атмега справляется тоже. В смысле все время выжрет? Отправляю через прерывание. Время передачи одного байта 8 микросекунды на 2000 000. А время прерывания 31 микросекунда, мне нужно 16 микросекунд чтобы передать два байта с частотой 31 Килогерц и они нашлись.

Добавлено after 9 minutes 13 seconds:
Проверил сейчас осциллографом. PL2303HX работает на скорости 2 Мегабит, вижу импульсы по 400 наносекунд и это из приложения на С++ билдере. Ура работает!!!

Добавлено after 22 minutes 3 seconds:
Кстати, с такой задачей справляется только Prolific Pl2303HX. CP2102, FT232R и CH340 не тянут 4 Мбит!!!! Ат Мега работает портом в Аsynchronous Mode тоже на 2 Мегабит с кварцем 16 мегагерц. Все срослось как нельзя лучше.

Добавлено after 23 minutes 7 seconds:
Prolific Pl2303HX самая дешевая Китайская со старым драйвером 2008 года. Все равно 6 мбит умеет, кажеться она и 12 Мбит тянет. Надо проверить. Кроме того, как я понял, непрерывный поток зависит от величины буфера в и вряд-ли больше 6 Мбит потянет. Для Меги предел 2 Мбит. Вот на TMS320F28016 завтра обкатаю скорость 12 Мегабит и 6 Мегабит. Где непрерывный поток получиться там и остановлюсь. Это мне для осциллографирования работы цифрового ШИМ нужно. 6 Мегабит/16 это 375 Килобайт/секунда, а мне нужно 4*2*20000= 160 Килобайт в секунду. Это 4 канала АЦП по 2 байта и на частоте 20 Килогерц.

Re: Принять данные на ПК со скоростью 1 Мбит

Пт ноя 22, 2019 11:17:56

astrahard писал(а):Это мне для осциллографирования работы цифрового ШИМ нужно.
Проще взять. https://ru.aliexpress.com/item/4000257258147.html

Re: Принять данные на ПК со скоростью 1 Мбит

Пт ноя 22, 2019 11:24:42

Жду из Китая такую штуку. Впрочем, Вы не поняли, у меня есть контроллер где успешно крутиться задача цифрового ШИМ контроллера. Контроллер МЕГА16 подключен к компьютерному БП заместо выпаяноq TL494. Контроллер помимо задачи ШИМ и ПИД параллельно выполняет задачу протокол ModBus, я еще добавлю осциллографирование. Уже мне подсказали, как, и проверил что работает, и проблема исчерпана. Я запустил в микроконтроллере задачу осциллограф, добавив в прерывание две строчки. Комп тоже справляется с потоком, поток 2 Мбит непрерывный. Мне помог VladislavS с изиэлектроникс и radteh местный, спасибо им большущее!!!!.

P.S. Исходники я выкладывал в теме https://radiokot.ru/forum/viewtopic.php?f=57&t=162148 Исправления выложу попозже. Скорость получилась 2 Мбит.... Это только на первый взгляд кажется что 2 Мбит не подъемно для МЕГИ16, на самом деле оказалось сущие пустяки...

Re: Принять данные на ПК со скоростью 1 Мбит

Пт ноя 22, 2019 12:11:40

astrahard писал(а): Это только на первый взгляд кажется что 2 Мбит не подъемно для МЕГИ16
Передайте непрерывный поток на этой скорости, а не несколько байт. Передачу выполняет аппаратный UART и его скорость не важна. Важно сколько байт будет отправлено за определенное время.
Ответить