Работа с COM портом
- Сообщения: 213
- Зарегистрирован: Ср дек 15, 2010 14:37:38
Добрый день товарищи, подскажите с чего начать - пытаюсь разобраться как работать с COM портом, приём и передача данных - но литературы много и информации с чего лучше копать? В итоге нужно, что бы в программе написанной на Microsoft Visual Studio с++ я мог получать данные с кажем с датчика температуры, и посылал команду при достижении температуры на включение тэна. Это самое простое пока хочется освоить.
Я понимаю на avr это просто как два пальца, но хочется освоить именно интеграцию с ПК и пока, что COM т.к USB пока сложновато...
- Реклама
- Сообщения: 1817
- Зарегистрирован: Пн ноя 29, 2010 15:58:43
разделите свою задачу на две:
1. подготовка данных с датчика и передача этих данных в формате UART , пребразование в уровни RS232 .
2. прием данных с СОМ порта на ПК и визулизация (или сохранение) данных на компе.
каждая задача может быть отлажена по отдельности. например когда сделали устройство передающее данные на комп по RS232 , эти данные можно принять программками предназначенными для работы с эти портом (я предпочитаю PUTTY).
после этого можно переходить в VS для обработки принимаемых данных.
вот как то так ?
1. подготовка данных с датчика и передача этих данных в формате UART , пребразование в уровни RS232 .
2. прием данных с СОМ порта на ПК и визулизация (или сохранение) данных на компе.
каждая задача может быть отлажена по отдельности. например когда сделали устройство передающее данные на комп по RS232 , эти данные можно принять программками предназначенными для работы с эти портом (я предпочитаю PUTTY).
после этого можно переходить в VS для обработки принимаемых данных.
вот как то так ?
Подключить датчик (тот же температурный) к AVR и уже с него гнать в комп. Ну а в компе делать с ними всё, что заблагорассудится.gdoom писал(а):...получать данные с кажем с датчика температуры...на avr это просто как два пальца,.
Docendo discimus
- Сообщения: 213
- Зарегистрирован: Ср дек 15, 2010 14:37:38
ну да тут я согласен.igor-x писал(а):разделите свою задачу на две:
1. подготовка данных с датчика и передача этих данных в формате UART , пребразование в уровни RS232 .
2. прием данных с СОМ порта на ПК и визулизация (или сохранение) данных на компе.
каждая задача может быть отлажена по отдельности. например когда сделали устройство передающее данные на комп по RS232 , эти данные можно принять программками предназначенными для работы с эти портом (я предпочитаю PUTTY).
после этого можно переходить в VS для обработки принимаемых данных.
вот как то так ?
тогда сразу возникают вопросы:
1) можете ткнуть носом на примеры устройств.....
2) непосредственно на программу желательно с исходниками где описывается сам процесс приёма и передачи данных. - скажем зажечь лампочку если пришёл сигнал внешний от выключателя.
сохранение и обработка и отображение - это достаточно тривиально простые задачи, уже знаю как можно решить.
такой вариант пока не хочется рассматривать.pyzhman писал(а):Подключить датчик (тот же температурный) к AVR и уже с него гнать в комп. Ну а в компе делать с ними всё, что заблагорассудится.gdoom писал(а):...получать данные с кажем с датчика температуры...на avr это просто как два пальца,.
- Сообщения: 60
- Зарегистрирован: Пт янв 11, 2013 10:54:43
Что за датчик?gdoom писал(а): с датчика температуры
Кому и какую команду посылал?gdoom писал(а): и посылал команду при достижении температуры на включение тэна
PS
С нуля задача трудоемкая и значительно упрощается при использовании мк.хочется освоить именно интеграцию с ПК
- Реклама
- Сообщения: 145
- Зарегистрирован: Ср фев 01, 2012 10:55:53
Самое сложное в этой задаче это получить имя последовательного порта которое можно использовать для открытия файла CreateFile.
Многие используют наивный подход, добавляя к базовому имени \\.\COM последовательные индексы. Более продвинутые сканируют ветку реестра HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM.
Однако самое правильное, IMHO, это использование функций из группы SetupDi. Найти интерфейс с требуемым GUID (GUID_DEVINTERFACE_COMPORT), получить DEVICE_INTERFACE_DETAIL_DATA и открыть файл. Все остальное совсем просто, правда если чтение-запись делать в одном потоке, надо настроить COMMTIMEOUTS так чтобы операция чтения завершалась по таймауту.
Вообще у Microchip'а в примерах есть исходники в которых все эти моменты можно посмотреть. Можно у них скачать MLA.
Многие используют наивный подход, добавляя к базовому имени \\.\COM последовательные индексы. Более продвинутые сканируют ветку реестра HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM.
Однако самое правильное, IMHO, это использование функций из группы SetupDi. Найти интерфейс с требуемым GUID (GUID_DEVINTERFACE_COMPORT), получить DEVICE_INTERFACE_DETAIL_DATA и открыть файл. Все остальное совсем просто, правда если чтение-запись делать в одном потоке, надо настроить COMMTIMEOUTS так чтобы операция чтения завершалась по таймауту.
Вообще у Microchip'а в примерах есть исходники в которых все эти моменты можно посмотреть. Можно у них скачать MLA.
- Сообщения: 82
- Зарегистрирован: Чт мар 22, 2012 20:28:49
Для освоения программной части работы с COM-портом советую воспользоваться следующей связкой программ. Proteus - Программа для моделирования электронных схем с возможностью эмуляции работы микроконтроллеров AVR. VSPE - программа для создания виртуальных COM-портов, к которым можно приконнектиться из любой программы. COM Port Toolkit - программа-терминал для приема/передачи байтов через COM-порт. Пишем программу для МК, создаем необходимую схему в Proteus с использованием элемента COMPIM. В программе VSPE создаем пару виртуальных COM-портов связанных между собой. Далее элемент COMPIM в Proteus соединяем с одним из созданных портов, а COM Port Toolkit со вторым. Отлаживаем программу МК. Потом пишем необходимую программу для компьютера и используем её вместо COM Port Toolkit.
Вот такой общий алгоритм действий. По каждому из этих пунктов могу проконсультировать отдельно, если потребуется. Пиши в личку.
Вот такой общий алгоритм действий. По каждому из этих пунктов могу проконсультировать отдельно, если потребуется. Пиши в личку.
- Сообщения: 1817
- Зарегистрирован: Пн ноя 29, 2010 15:58:43
да примеров просто немеряно если полазить гуглом, ну вот несложный пример:1) можете ткнуть носом на примеры устройств.....
http://denialmedia.ca/weather-station/
на первый взгляд чтото очень сложное - но на самам деле всего один чип Atmega32 читает данные с датчика (ов) ,
и передает по СОМ порту на комп. На компе
- обработка и даже то что вы считаете очень простым -сохранение и отображение
в приведенном примере есть исходники для прошивки МК , и комповой программы.
- Сообщения: 213
- Зарегистрирован: Ср дек 15, 2010 14:37:38
- спасибо!ddimochka писал(а):Для освоения программной части работы с COM-портом советую воспользоваться следующей связкой программ. Proteus - Программа для моделирования электронных схем с возможностью эмуляции работы микроконтроллеров AVR. VSPE - программа для создания виртуальных COM-портов, к которым можно приконнектиться из любой программы. COM Port Toolkit - программа-терминал для приема/передачи байтов через COM-порт. Пишем программу для МК, создаем необходимую схему в Proteus с использованием элемента COMPIM. В программе VSPE создаем пару виртуальных COM-портов связанных между собой. Далее элемент COMPIM в Proteus соединяем с одним из созданных портов, а COM Port Toolkit со вторым. Отлаживаем программу МК. Потом пишем необходимую программу для компьютера и используем её вместо COM Port Toolkit.
Вот такой общий алгоритм действий. По каждому из этих пунктов могу проконсультировать отдельно, если потребуется. Пиши в личку.
С МК не хочу связыватсья, так как потом будет мк участвовать в этом:igor-x писал(а):да примеров просто немеряно если полазить гуглом, ну вот несложный пример:1) можете ткнуть носом на примеры устройств.....
http://denialmedia.ca/weather-station/
на первый взгляд чтото очень сложное - но на самам деле всего один чип Atmega32 читает данные с датчика (ов) ,
и передает по СОМ порту на комп. На компе
- обработка и даже то что вы считаете очень простым -сохранение и отображение![]()
в приведенном примере есть исходники для прошивки МК , и комповой программы.
http://kibermaster.net/upravlenie-elekt ... pyami-che/
решил начать пока без МК - и с СОМ так как хочется освоить это в начале....
это простой пример - который я взял из головы.... Если расписывать на компе стоит программа где ставим температуру при которой включать тэн и он работает пока температура не поднимется до установленной, датчик тут думать нужно - типа DS.Vano79 писал(а):Что за датчик?gdoom писал(а): с датчика температурыКому и какую команду посылал?gdoom писал(а): и посылал команду при достижении температуры на включение тэна
PSС нуля задача трудоемкая и значительно упрощается при использовании мк.хочется освоить именно интеграцию с ПК
- Сообщения: 213
- Зарегистрирован: Ср дек 15, 2010 14:37:38
НУ пока накопал вот интересный материал - отсюда уже можно, что то сделать:
http://www.kernelchip.ru/pcports/PS054.php
- но мне не понравилось
но вот что то есть живое:
http://www.labkit.ru/html/autocontrol?id=136
- но всё упрётся уже в Microsoft Visual Studio С++ - так как исходника нет
а было бы здорово посмотреть, что там... . Но остаётся разобраться с работой СОМ глубже как я понял....
http://www.kernelchip.ru/pcports/PS054.php
- но мне не понравилось
но вот что то есть живое:
http://www.labkit.ru/html/autocontrol?id=136
- но всё упрётся уже в Microsoft Visual Studio С++ - так как исходника нет
- Сообщения: 3385
- Зарегистрирован: Пн окт 11, 2010 19:00:08
С какого? Например DS18B20?gdoom писал(а):я мог получать данные с кажем с датчика температуры
Можете посмотреть журнал Радио №1 2015. Там есть статья о работе с подобными датчиками через COM порт (в т. ч. виртуальный). Компонент приложения используемый в статье. ftp://ftp.radio.ru/pub/2015/01/OWire.zip
Его можно подключить к проекту VS и использовать для чтения температуры. Преимущество в том что не нужно знать как работать с COM портом и датчиком. Все это берет на себя компонент. А если все же хочется разобраться как это работает, можно посмотреть исходник компонента - файл OWire_Module.pbi находящийся в папке Library\Src.
Ну я бы так не сказал бы. Смотрите журнал Радио №4 2011. Там есть статья о работе с USB HID, а также компонент приложения, который сможете подключить к проекту VS C++.gdoom писал(а):USB пока сложновато...
Последний раз редактировалось Мурик Чт июн 25, 2015 13:55:19, всего редактировалось 2 раза.
- Сообщения: 60
- Зарегистрирован: Пт янв 11, 2013 10:54:43
поэтому и говорю - процесс трудоемкий, если с нуля. Если только компорт начните сgdoom писал(а):остаётся разобраться с работой СОМ глубже как я понял....
Гугл в помощь, исходников на VC++ море.Агуров П. "Последовательные интерфейсы ПК. Практика программирования".
- Сообщения: 13796
- Зарегистрирован: Чт сен 20, 2007 14:08:00
без мк ком порт "не работает"gdoom писал(а):решил начать пока без МК - и с СОМ так как хочется освоить это в начале..
либо тебе надо будет ставить специальный софт для создания виртуального порта, чтобы соединить твой софт и терминал, который будет показывать тебе работу твоей проги
алгоритм работы с портом такой
открыть порт с параметрами скорости, например 9600 (там еще есть опции контроля передачи)
отправить байт в порт или принять
слушать порт на наличие данных
закрыть его, когда закрываеш приложение или по кнопке
слушание порта делается в главном цикле, если софт однопоточный или по таймеру
есть еще готовые библиотеки для работы с портами и они могут предоставлять более удобные механизмы взаимодействия с портом
а насчет управления и команд, то ты сам п ридумываеш протокол
например контроллер тебе шлет с датчика температуру в виде t 25
ты ищеш в строке подстроку в виде буквы t и понимаеш, что дальше следует число и это интерпретируется как температура
на стороне контроллера примерно так же
вот пример http://sheepdogguides.com/dt4t.htm
тематические ответы только в форуме, в приват не пишите
- Сообщения: 3385
- Зарегистрирован: Пн окт 11, 2010 19:00:08
Т. е. если подключить DS18B20 к COM порту - работать не будет?kalobyte писал(а):без мк ком порт "не работает"
DS это не МК, что уже противоречит высказыванию. Наверное его стоит перефразировать в "без чего-либо, подключенного к порту это бессмысленно, т. к. данные отправляются в никуда и нечего принимать кроме помех".
К ком-порту можно подключать разные датчики напрямую, используя пины DTR/RTS/CTS и "дрыгая" ими из своей программы.
Разумеется, надо согласовывать уровни.
Получается не совсем по-людски, но работает нормально (во всяком случае, в ВинХП и более старых виндах).
Напр, вот схема подключения АЦП MCP3550 :

Разумеется, надо согласовывать уровни.
Получается не совсем по-людски, но работает нормально (во всяком случае, в ВинХП и более старых виндах).
Напр, вот схема подключения АЦП MCP3550 :

>(*.*)<
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)
- Сообщения: 213
- Зарегистрирован: Ср дек 15, 2010 14:37:38
ну вот http://www.kernelchip.ru/pcports/PS054.phpМурик писал(а):Т. е. если подключить DS18B20 к COM порту - работать не будет?kalobyte писал(а):без мк ком порт "не работает"
DS это не МК, что уже противоречит высказыванию. Наверное его стоит перефразировать в "без чего-либо, подключенного к порту это бессмысленно, т. к. данные отправляются в никуда и нечего принимать кроме помех".
и цитата:
Код: Выделить всё
С аппаратной частью нам тоже придется "повозиться", в том смысле что она будет сложнее чем с первым устройством для LPT порта. Дело в том что протокол RS-232 по которому идет обмен данными в COM порту, имеет несколько отличное соотношение логическое состояние - напряжение. Если обычно это логический 0 <-> 0 В, логическая 1 <-> +5 В, то в RS-232 это соотношение следующее: логический 0 <-> +12 В, логическая 1 <-> -12 В.
И например, получив -12 В не сразу понятно что с этим напряжением делать. Обычно проводят преобразование уровней RS-232 в ТТЛ (0, 5 В). Самый простой вариант - стабилитроны. Но я предлагаю сделать этот преобразователь на специальной микросхеме. Называется она MAX232.
- Сообщения: 13796
- Зарегистрирован: Чт сен 20, 2007 14:08:00
как повезет, для любительских целей может и будет работать, я не пробовалМурик писал(а):Т. е. если подключить DS18B20 к COM порту - работать не будет?
тематические ответы только в форуме, в приват не пишите
но при этом - сразу , безапелляционно :kalobyte писал(а): я не пробовал
ну так и чО сразу лезть в тему с ТАКИМИ советами, если нет своего опыта и твое мнение - чисто умозрительное ?kalobyte писал(а):без мк ком порт "не работает"
Да и по поводу "любительских целей" ты снова не попал.
Вот схема вполне заводского девайса, продававшегося миллионными тиражами :

>(*.*)<
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)
- Сообщения: 13796
- Зарегистрирован: Чт сен 20, 2007 14:08:00
потому что делал программатор по такому же принципуabc писал(а):ну так и чО сразу лезть в тему с ТАКИМИ советами, если нет своего опыта и твое мнение - чисто умозрительное ?
если он там в старых системах работал, то в новых тайминги не совпадали и нихера не работало
а серийный девайс этот то же гавно древнее, у меня был такой, только там стояла специальная мс - железный адаптер под ком порт и эту шину, стоил дороже намного
а так автор начнет использовать порт в ненормальном режиме, у него нихера не заработает и будет он потом плеваться и материть все подряд
тематические ответы только в форуме, в приват не пишите
Т.е. конкретно у тебя не заработал программатор ? И это повод говорить, что ком-порт без МК не работает ?
Охренеть...
Но тот самый MCP3550 у меня работал на XP 24/7 в теч. трех месяцев. А у тысяч людей - таблетки DS1990 в паре с DS9097.
Да и о чем спрашивает ТС в своем первом сообщении - о конкретно твоем программаторе или о датчиках вообще ?
Охренеть...
Но тот самый MCP3550 у меня работал на XP 24/7 в теч. трех месяцев. А у тысяч людей - таблетки DS1990 в паре с DS9097.
Да и о чем спрашивает ТС в своем первом сообщении - о конкретно твоем программаторе или о датчиках вообще ?
>(*.*)<
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)


