Например TDA7294

Форум РадиоКот • Просмотр темы - Программирование СОМ-порта на С++ начинающему! Помощь нужна!
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Вт мар 09, 2021 14:52:23

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Программирование СОМ-порта на С++ начинающему! Помощь нужна!
СообщениеДобавлено: Пт дек 10, 2010 12:34:57 
Родился

Зарегистрирован: Ср май 06, 2009 08:29:23
Сообщений: 3
Рейтинг сообщения: 0
Помогите, пожалуйста, научиться программировать на С++ (MS Visual C++2010) COM-порт. Причем интересует глубокое понимание процессов, отчасти основы программирования и архитектуры компьютером (основная база есть, немного программирую МК на Ассемблере). Может где-то что-то почитать и т.п. Может кто-то сможет прокурировать меня в этих вопросах. В долгу не останусь))))
В будущем хочу использовать USB-порт как виртуальный СОМ-порт через FTDI.
Вообщем буду признателен за любую помощь!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование СОМ-порта на С++ начинающему! Помощь ну
СообщениеДобавлено: Пт дек 10, 2010 12:57:50 
Опытный кот
Аватар пользователя

Карма: 10
Рейтинг сообщений: 64
Зарегистрирован: Ср апр 16, 2008 13:22:54
Сообщений: 878
Откуда: Приднестровье, Тирасполь
Рейтинг сообщения: 0
Не слишком давно писал небольшое приложение, которое сидит в трее и притворяется winlirc-ом. Прослушивая при этом виртуальный (или реальный) ком порт - cdc usb (или hid usb - на выбор) и работая при этом как tcp сервер - пересылая видоизмененные данные клиентам, поступивших с порта. В MVS2005...
Учится, конечно быстрее всего по статьям в нете. Но толковых мало, а ньюансов много. В частности, передача данных от потока чтения кома-а (критические секции), нюансы связанные именно с cdc... Делал через апи, ибо ни одна библиотека не работала как мне нужно, либо платные... Если что, спрашивайте...

_________________
Любой, заслуживающий внимания, опыт приобретается себе в убыток...


Вернуться наверх
 
Друзья! Скоро Новый Год! Китайский! Но мы работаем и в праздники тоже!

JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Отличное качество, подтвержденное более чем 600,000 пользователей! Более 10,000 заказов в день.

Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/quote

Не в сети
 Заголовок сообщения: Re: Программирование СОМ-порта на С++ начинающему! Помощь ну
СообщениеДобавлено: Пт дек 10, 2010 15:04:50 
Друг Кота
Аватар пользователя

Карма: 3
Рейтинг сообщений: 122
Зарегистрирован: Пн окт 11, 2010 19:00:08
Сообщений: 3109
Рейтинг сообщения: 0
genii-2002 писал(а):
В будущем хочу использовать USB-порт как виртуальный СОМ-порт через FTDI.
В архиве есть DLL'ка, позволяющая работать как с железным так и с виртуальным COM портом.


Вложения:
ComPort_Pb.rar [12.9 KiB]
Скачиваний: 752
Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Программирование СОМ-порта на С++ начинающему! Помощь ну
СообщениеДобавлено: Пт дек 10, 2010 18:41:47 
Родился

Зарегистрирован: Ср май 06, 2009 08:29:23
Сообщений: 3
Рейтинг сообщения: 0
Друзья, может кто поделиться своим опытом! Как и где вы добывали знания? С какими проблемами сталкивались в освоении программирования СОМ порта и т.п.? Что читали и и где учились?


Вернуться наверх
 
Как сделать ИП с ультрашироким диапазоном?

Ключевыми особенностями высоковольтных SiC MOSFET Wolfspeed являются малое сопротивление канала в открытом состоянии и минимальное значение паразитных емкостей, что позволяет максимально снизить статические и динамические потери, и, соответственно, увеличить рабочую частоту преобразователей.

Читать статью>>
Не в сети
 Заголовок сообщения: Re: Программирование СОМ-порта на С++ начинающему! Помощь ну
СообщениеДобавлено: Пт дек 10, 2010 19:13:28 
Опытный кот
Аватар пользователя

Карма: 10
Рейтинг сообщений: 64
Зарегистрирован: Ср апр 16, 2008 13:22:54
Сообщений: 878
Откуда: Приднестровье, Тирасполь
Рейтинг сообщения: 0
genii-2002 писал(а):
... где вы добывали знания?...

Я ж написал - в гугле! А проблемы сейчас вам ничего не скажут - столкнетесь, тогда и решать будем..

_________________
Любой, заслуживающий внимания, опыт приобретается себе в убыток...


Вернуться наверх
 
STM32L5 – первое семейство ST на ядре Cortex-M33 с ультранизким потреблением

Первое семейство STM32L5 на базе ядра ARM Cortex-M33, флагман семейств ST с низким потреблением. Область применения IoT, расходомеры, умные часы, промышленные датчики и многое другое. Опубликованы материалы двух практических вебинаров по расчету энергопотребления и работой с TrustZone. Рассмотрены особенности и примеры практической реализации CAN FD на STM32L5.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Программирование СОМ-порта на С++ начинающему! Помощь ну
СообщениеДобавлено: Пт дек 10, 2010 21:13:20 
Друг Кота
Аватар пользователя

Карма: 69
Рейтинг сообщений: 1197
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7445
Рейтинг сообщения: 0
Цитата:
В будущем хочу использовать USB-порт как виртуальный СОМ-порт через FTDI.


Реальный и виртуальный COM - разные вещи. Капитан Очевидность подсказывает, что для работы с микросхемами FTDI надо читать D2XX programmer's guide (это мануал на библиотеку от FTDI для работы с их микросхемами) и даташиты на сами микросхемы (самая распротраненная FT232R). Можно, конечно, и WinAPI использовать (гуглите функции CreateFile(...), WriteFile(...), ReadFile(...), CloseHandle(...) ), но специальная библиотека от FTDI дает гораздо большие возможности.

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: Программирование СОМ-порта на С++ начинающему! Помощь ну
СообщениеДобавлено: Сб дек 11, 2010 13:22:46 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 52
Зарегистрирован: Чт дек 31, 2009 19:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
Гораздо больше возможностей она даёт по не-компортовым вещам. В режиме «комп-порта» там в основном эмуляция того же, что в WinAPI плюс возможность читать/писать EEPROM-ку и уменьшить время таймаута отправки в комп недозаполненого буфера в микросхеме. По умолчанию 16 милисекунд и это крепко садит пропускную способность.
Но EEPROM-ку читать-писать нужно сначала придумать для чего, а таймаут можно раз и навсегда уменьшить в свойствах порта в windows.

Более того, я на этот таймаут и не нарывался вообще, хотя программа для работы с COM-портом через WinAPI была написана, пожалуй, до того, как миросхемы FTDI появились в природе.

Просто у меня была ещё под Win98 выписана событийная работа с COM-портом и применён пакетный протокол, основанный на рамке SLIP (её же Леонид Иванович в wake использовал). Любой пакет заканчивается флаговым байтом SLIP_END. Ком-порту по WinAPI при инициализации DCB устанавливается event char на этот флаговый байт SLIP_END. Программа, точнее, поток обслуживания COM-порта, не дёргается за каждым байтом, а через WaitCommEvent (в случае работы через OVERLAPPED IO - через WaitForMultipleObjects) ждёт события прихода концевого флага. Потом смотрит, сколько у Win в буфере ком-порта набралось данных и вычитывает ровно столько одним махом, потом разбирает.

Ну так вот этот же event character при работе с виртуальным портом FTDI передаётся через VCP драйвер в микросхему и та по этому байту делает отправку как по активации ножки send immedite — не ожидая даже минимальное время таймаута заполнения FIFO.

Программа, написанная таким образом в 1997-98 году для обычного ком-порта, забегала с FT8U245 на отличных скоростях :-) Ограничителем выступала мега128.

_________________
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.


Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: Программирование СОМ-порта на С++ начинающему! Помощь ну
СообщениеДобавлено: Пт дек 17, 2010 21:08:18 
Друг Кота
Аватар пользователя

Карма: 23
Рейтинг сообщений: 87
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4317
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
Такс..... :) Я не новичок в программировании COM портов, но есть у меня одна проблема с этим портом. Выкладываю отрывки Сишного кода, а потом проблему.
Код:
char in_p[50] = ".";
int RcvCounter=0;
HANDLE hFile = CreateFile("com1", GENERIC_READ|GENERIC_WRITE, 0,NULL,
                  OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL);
   

   if(hFile == INVALID_HANDLE_VALUE){display("COM Error!");}
   else{display("Порт открыт");}

      DWORD dwBytesRead1 = 0;

      while(1)
      {   
         ReadFile(hFile, in_p, sizeof(in_p), &dwBytesRead1, NULL);
         Sleep(1);
         if(dwBytesRead1 != 0){break;}
      }
      RcvCounter = dwBytesRead1;
      cout <<in_p<<" : "<<RcvCounter<<endl;

И такой вариант:
Код:
char in_p[50] = ".";
int RcvCounter=0;
HANDLE hFile = CreateFile("com1", GENERIC_READ|GENERIC_WRITE, 0,NULL,
                  OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL);
   

   if(hFile == INVALID_HANDLE_VALUE){display("COM Error!");}
   else{display("Порт открыт");}

      DWORD dwBytesRead1 = 0;

      while(dwBytesRead1 == 0)
      {   
         ReadFile(hFile, in_p, sizeof(in_p), &dwBytesRead1, NULL);
         Sleep(1);
      }
      RcvCounter = dwBytesRead1;
      cout <<in_p<<" : "<<RcvCounter<<endl;


Это два варианта моих отрывков кода, который должен сначала открыть порт,
за тем застрять в цикле, пока что-нибудь не придёт. Используется тут WinAPI.
Настройки битрейта порта и прочих его параметров, тут я не привёл. Но там вроде всё нормально.
Всё работает нормально, но если нагрузить процессор хотя бы на 60-70% так
начинаются траблы. Не принимаются все байты с порта. И количество принятых байтов может отличаться от содержимого в RcvCounter.
Что мне сделать, чтобы от этого избавиться. Стабильность приёма данных очень важна.

_________________
ааааааааааааа
Изображение I am DX168B and this is my favourite forum on internet!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование СОМ-порта на С++ начинающему! Помощь ну
СообщениеДобавлено: Сб дек 18, 2010 00:26:04 
Друг Кота
Аватар пользователя

Карма: 23
Рейтинг сообщений: 87
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4317
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
Ай дурак я. Разобрался. Таймауты порта по нулям выставил. В итоге - поток ещё не успел прочитаться, а таймаут истёк. Вот такие пЕроги. :)

_________________
ааааааааааааа
Изображение I am DX168B and this is my favourite forum on internet!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование СОМ-порта на С++ начинающему! Помощь ну
СообщениеДобавлено: Пт дек 24, 2010 15:54:16 
Родился

Зарегистрирован: Ср май 06, 2009 08:29:23
Сообщений: 3
Рейтинг сообщения: 0
так кто может прокурировать мое обучение? Сейчас осваиваю С++ в MS Visual Studio 2010. Как ыставлять логические уровни на сом-порт?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование СОМ-порта на С++ начинающему! Помощь ну
СообщениеДобавлено: Пт дек 24, 2010 16:47:56 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 227
Зарегистрирован: Пт янв 29, 2010 10:27:40
Сообщений: 3805
Откуда: Москва
Рейтинг сообщения: 0
Не помню как остальными, но линиями DTR и RTS можно рулить через функцию EscapeCommFunction


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование СОМ-порта на С++ начинающему! Помощь ну
СообщениеДобавлено: Пт дек 24, 2010 17:56:00 
Друг Кота
Аватар пользователя

Карма: 23
Рейтинг сообщений: 87
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4317
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
Объяснять долго.
Короче...... вот в архиве мой изврат (класс для работы с COM портом)
Можешь откомпилировать её как DLL (он и рассчитан на компиляцию в DLL файл)
Ищи в классе функцию:
Код:
extern "C" __declspec (dllexport) void DXCOM::SetLine(OUT_LINES_NAME ln, bool state)
{
   if(!state)
      return ;

   unsigned char value;
   
   if(ln == DTR)
   {
      if(state)
         value = 6;
      else
         value = 5;
   }

   
   if(ln == RTS)
   {
      if(state)
         value = 4;
      else
         value = 3;
   }

   EscapeCommFunction(m_hFile, value);   
}

Если не будут пахать линии DTR и RTS, то замени параметры DCB на:
Код:
    dcb.fDtrControl = DTR_CONTROL_ENABLE;
    dcb.fRtsControl = RTS_CONTROL_ENABLE;


Вложения:
Комментарий к файлу: Исходник + заголовочник.
DXCOM.rar [3.04 KiB]
Скачиваний: 400

_________________
ааааааааааааа
Изображение I am DX168B and this is my favourite forum on internet!
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование СОМ-порта на С++ начинающему! Помощь ну
СообщениеДобавлено: Вс янв 03, 2021 16:55:05 
Родился

Зарегистрирован: Вс янв 03, 2021 16:47:43
Сообщений: 1
Рейтинг сообщения: 0
А можно подробнее. мне не все понятно. И главное: так ли работает код в линукс системах? Я просто хочу написать драйвер для ком мыши в современной Mageia 7.
Заранее огромное спасибо за подсказки.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование СОМ-порта на С++ начинающему! Помощь ну
СообщениеДобавлено: Сб янв 09, 2021 11:27:28 
Друг Кота
Аватар пользователя

Карма: 50
Рейтинг сообщений: 689
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 4431
Откуда: Minsk
Рейтинг сообщения: 3
А ничего, что последний пост в этой теме - 11 лет тому назад?

_________________
Изображение


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y