Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не получаеться считать данные из COM порта на ПК
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
ASV
Вот такая проблемка. Делаю я устройство, одной из функций которого являеться связь с ПК по RS-232. Для чтения COM порта на ПК я написал програмку на Delphi и получилась вот такая неприятная ситуация:
(два ком порта соеденены Rx-Tx)
При чтении данных из буфера к некоторым байтам прибавляеться 128 и при чем тут нет никакой закономерности. Вот пример отправленных и полученных байт:

отправил получил
49 | 177
50 | 178
51 | 51
52 | 180
53 | 53
54 | 54
55 | 183
56 | 184
57 | 57

И еще одна проблема при передаче одного байта все нормально, а когда я передаю хотя бы два байта подряд, то получаеться вообще черт знает что.

Использовал компоненты ComPort от Winsoft, и ComDrv32.
MALLOY2
Не првлено настроены параметры портов (скорость,стоп биты, четность и т.д. )
BVU
Для начала попробуйте передавать и принимать не блоками, а байтом (т.е. блок состоящий из одного элемента). Если все будет нормально увеличте на один и т.д. Когда обнаружиться ошибка вот тогда и надо будет разбираться.
За одно проверьте правильность настройки Ваших портов - они должны быть полностью одинаковы настроены (только один на прием а другой на передачу).
А для написания программы для портов лучше разберитесь с функциями WinAPI. Это будет гораздо полезней. Будете все это писать сами без использования каких либо сторонних библиотек.
Вот Вам пара прекрасных статей:
ASV
С глюками при посылке нескольких байт поборолся, а вот не могу побороть вторую проблему.
Когда я посылаю из Comspy в свою программу числа они поче му то искажаються по непонятному закону. Оба порта настроены идентично.
И вообще возможно ли чтение из буфера первых 16 символов ANSI кода.?
BVU
Цитата(ASV @ Sep 12 2005, 17:15)
С глюками при посылке нескольких байт поборолся, а вот не могу побороть вторую проблему.
Когда я посылаю из Comspy в свою программу числа они поче му то искажаються по непонятному закону. Оба порта настроены идентично.
  И вообще возможно ли чтение из буфера первых 16 символов ANSI кода.?
*


Тогда по всей видимости придется Вам разбираться с byte-форматом посылаемый из Comspy. Возможно что идет передача какого-то информационного контекста вместе с Вашими данными о котором Вы не имеете никакого представления. Так что необходимо разобраться что 'выплевывает' Comspy.
lolikandr
Раз уж ты принимаешь при помощи Delphi, то и передавай при ее помощи байты. Тогда уж точно будешь знать что передается и что принимается. А у меня была схожая проблема когда работал уже с устройством на AVR. Частота не совпадала толи на 7% толи на 10%, поэтому периодически один бит выскакивал лишний, как раз в конце, там где стоп бит.
iosifk
Цитата(lolikandr @ Sep 13 2005, 12:42)
Раз уж ты принимаешь при помощи Delphi, то и передавай при ее помощи байты. Тогда уж точно будешь знать что передается и что принимается. А у меня была схожая проблема когда работал уже с устройством на AVR. Частота не совпадала толи на 7% толи на 10%, поэтому периодически один бит выскакивал лишний, как раз в конце, там где стоп бит.
*


Тут бы добавить, как передаются байты через заглушку - сам на себя. Формат порта при этом точно совпадает, остаются проблемы с обработкой. Я передавал с компа на комп и если символы выдавались быстрее, чем через 5 -10 мс, то они пропадали.
Удачи.
ASV
спасибо всем кто отвечал. тут была моя оплошность был лишний сто бит.
Trashy
Цитата(ASV @ Sep 12 2005, 12:44)
  49      |    177
  50      |    178
  51      |      51
  52      |    180
  53      |      53
  54      |      54
  55      |    183
  56      |    184
  57      |      57
 



Шумит старший разряд.
Не совпадение скорости передачи. Видимо, вы пользуете миароконтроллер от внутреннего генератора, а не от внешнего кварцевого резонатора. В случаях использования внутренних генераторов, нужно индивидуально, для каждого контроллера подбирать делитель. То есть, генерить на пин прямоугольники и смотреть частоту. После этого высчитывать делитель. Если так не делать, то можно очень встрять, например при прогреве или переохлаждениии устройства. Как раз начинает шуметь старший бит.
В одном проекте(от -65градусов, до +65), даже пришлось считывать температуру с термодатчика и в соответствии с этим подстраивать делитель.
ASV
Хотя действительно я работаю от внутреннего генератора, но дело тут не в этом. Это даже проявляеться когда я шлю данные с одного COM-порта на другой. Скорее всего я пропустил один из параметров при настройке ком порта. Но на данный момент, при использовании другого компонента, это не проявляеться.
Mik174
Для облегчения отладки программ обмена с устройствами через СОМ порт есть замечательная программа portmon.
Она "садится верхом" на выбранный порт и отслеживает весь обмен по нему.
Т.е. программа пользователя, написанная, например, на Delphi, даже не "чувствует" ее присутствия.
При этом показывается время событий, что именно произошло - например, имел место запрос на 15 байт (функция Windows), реально получено 7 и произошел таймаут, или получены все 15 успешно и т.д.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.