ASV 0 12 сентября, 2005 Опубликовано 12 сентября, 2005 · Жалоба Вот такая проблемка. Делаю я устройство, одной из функций которого являеться связь с ПК по 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 12 сентября, 2005 Опубликовано 12 сентября, 2005 · Жалоба Не првлено настроены параметры портов (скорость,стоп биты, четность и т.д. ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BVU 0 12 сентября, 2005 Опубликовано 12 сентября, 2005 · Жалоба Для начала попробуйте передавать и принимать не блоками, а байтом (т.е. блок состоящий из одного элемента). Если все будет нормально увеличте на один и т.д. Когда обнаружиться ошибка вот тогда и надо будет разбираться. За одно проверьте правильность настройки Ваших портов - они должны быть полностью одинаковы настроены (только один на прием а другой на передачу). А для написания программы для портов лучше разберитесь с функциями WinAPI. Это будет гораздо полезней. Будете все это писать сами без использования каких либо сторонних библиотек. Вот Вам пара прекрасных статей: COM.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ASV 0 12 сентября, 2005 Опубликовано 12 сентября, 2005 · Жалоба С глюками при посылке нескольких байт поборолся, а вот не могу побороть вторую проблему. Когда я посылаю из Comspy в свою программу числа они поче му то искажаються по непонятному закону. Оба порта настроены идентично. И вообще возможно ли чтение из буфера первых 16 символов ANSI кода.? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BVU 0 12 сентября, 2005 Опубликовано 12 сентября, 2005 · Жалоба С глюками при посылке нескольких байт поборолся, а вот не могу побороть вторую проблему. Когда я посылаю из Comspy в свою программу числа они поче му то искажаються по непонятному закону. Оба порта настроены идентично. И вообще возможно ли чтение из буфера первых 16 символов ANSI кода.? <{POST_SNAPBACK}> Тогда по всей видимости придется Вам разбираться с byte-форматом посылаемый из Comspy. Возможно что идет передача какого-то информационного контекста вместе с Вашими данными о котором Вы не имеете никакого представления. Так что необходимо разобраться что 'выплевывает' Comspy. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lolikandr 0 13 сентября, 2005 Опубликовано 13 сентября, 2005 · Жалоба Раз уж ты принимаешь при помощи Delphi, то и передавай при ее помощи байты. Тогда уж точно будешь знать что передается и что принимается. А у меня была схожая проблема когда работал уже с устройством на AVR. Частота не совпадала толи на 7% толи на 10%, поэтому периодически один бит выскакивал лишний, как раз в конце, там где стоп бит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 13 сентября, 2005 Опубликовано 13 сентября, 2005 · Жалоба Раз уж ты принимаешь при помощи Delphi, то и передавай при ее помощи байты. Тогда уж точно будешь знать что передается и что принимается. А у меня была схожая проблема когда работал уже с устройством на AVR. Частота не совпадала толи на 7% толи на 10%, поэтому периодически один бит выскакивал лишний, как раз в конце, там где стоп бит. <{POST_SNAPBACK}> Тут бы добавить, как передаются байты через заглушку - сам на себя. Формат порта при этом точно совпадает, остаются проблемы с обработкой. Я передавал с компа на комп и если символы выдавались быстрее, чем через 5 -10 мс, то они пропадали. Удачи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ASV 0 14 сентября, 2005 Опубликовано 14 сентября, 2005 · Жалоба спасибо всем кто отвечал. тут была моя оплошность был лишний сто бит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Trashy 0 17 сентября, 2005 Опубликовано 17 сентября, 2005 · Жалоба 49 | 177 50 | 178 51 | 51 52 | 180 53 | 53 54 | 54 55 | 183 56 | 184 57 | 57 Шумит старший разряд. Не совпадение скорости передачи. Видимо, вы пользуете миароконтроллер от внутреннего генератора, а не от внешнего кварцевого резонатора. В случаях использования внутренних генераторов, нужно индивидуально, для каждого контроллера подбирать делитель. То есть, генерить на пин прямоугольники и смотреть частоту. После этого высчитывать делитель. Если так не делать, то можно очень встрять, например при прогреве или переохлаждениии устройства. Как раз начинает шуметь старший бит. В одном проекте(от -65градусов, до +65), даже пришлось считывать температуру с термодатчика и в соответствии с этим подстраивать делитель. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ASV 0 26 сентября, 2005 Опубликовано 26 сентября, 2005 · Жалоба Хотя действительно я работаю от внутреннего генератора, но дело тут не в этом. Это даже проявляеться когда я шлю данные с одного COM-порта на другой. Скорее всего я пропустил один из параметров при настройке ком порта. Но на данный момент, при использовании другого компонента, это не проявляеться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mik174 0 29 октября, 2007 Опубликовано 29 октября, 2007 · Жалоба Для облегчения отладки программ обмена с устройствами через СОМ порт есть замечательная программа portmon. Она "садится верхом" на выбранный порт и отслеживает весь обмен по нему. Т.е. программа пользователя, написанная, например, на Delphi, даже не "чувствует" ее присутствия. При этом показывается время событий, что именно произошло - например, имел место запрос на 15 байт (функция Windows), реально получено 7 и произошел таймаут, или получены все 15 успешно и т.д. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться