Работа с COM портом
-
pirotehnick
- Потрогал лапой паяльник
- Сообщения: 327
- Зарегистрирован: Пт фев 08, 2008 13:46:03
- Откуда: Воронеж
- Контактная информация:
Работа с COM портом
Вот захотел поработать с COM портом. Первым делом я решил протестить линии RTS и DTR, т.е. отобразить сигнал на светодиодах. Схему и прочий материал я брал здесь http://www.pcports.ru/articles/com_1.php Написал программу, спаял схему. Всё вроде бы хорошо, порт открывается, ошибок в программе нету. Подключил схему,…ни чего не происходит, т.е. светодиоды так и оставались гореть. Интересно, а они вообще должны гореть, после подачи питания на схему?
Ещё меня насторожила сама схема, т.е. её правильность . Во-первых не понятно с полярностью конденсаторов, похоже её перепутали, во-вторых нумерация выводов тоже кажется не правильной. По другим источникам RTS- 7, DTR-4.
И вообще как можно проверить сигнал на этих линиях без использования MAX232?. Тестером померить не получилось.
Помогите, пожалуйста, разобраться с этой проблемой.
Ещё меня насторожила сама схема, т.е. её правильность . Во-первых не понятно с полярностью конденсаторов, похоже её перепутали, во-вторых нумерация выводов тоже кажется не правильной. По другим источникам RTS- 7, DTR-4.
И вообще как можно проверить сигнал на этих линиях без использования MAX232?. Тестером померить не получилось.
Помогите, пожалуйста, разобраться с этой проблемой.
- Реклама
На том сайте если не ошибаюсь проги на Си, и работа с портом ведётся посредством API функций?
Лично я не очень API люблю (запутано там слишком) поэтому пишу проги на PureBasic
С его помощью можно написать прогу без API.
Например, с помощью библиотеки MVCOM можно легко с портом работать не используя API.
Скажем, для управления линией DTR существует функция ComSetDTR( Handle , Status )
где Handle идентификатор порта, Status - необходимый логический уровень на выходе (возможные значения 0,1).
Лично я не очень API люблю (запутано там слишком) поэтому пишу проги на PureBasic
С его помощью можно написать прогу без API.
Например, с помощью библиотеки MVCOM можно легко с портом работать не используя API.
Скажем, для управления линией DTR существует функция ComSetDTR( Handle , Status )
где Handle идентификатор порта, Status - необходимый логический уровень на выходе (возможные значения 0,1).
-
pirotehnick
- Потрогал лапой паяльник
- Сообщения: 327
- Зарегистрирован: Пт фев 08, 2008 13:46:03
- Откуда: Воронеж
- Контактная информация:
Я же сказал, что с прогой всё в порядке, проблема скорее всего в схеме.
Ещё я использовал прогу, специально предназначеннную для тестов COM портов.
Всё равно ни чего не работает
http://www.pcports.ru/files/articles/Se ... rminal.rar
Ещё я использовал прогу, специально предназначеннную для тестов COM портов.
Всё равно ни чего не работает
http://www.pcports.ru/files/articles/Se ... rminal.rar
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18560
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
я с вас балдею - API-шную функцию переименовали - вы и рады, что с API не работаете.PB_EXPERT писал(а):Например, с помощью библиотеки MVCOM можно легко с портом работать не используя API.![]()
Скажем, для управления линией DTR существует функция ComSetDTR( Handle , Status )
где Handle идентификатор порта, Status - необходимый логический уровень на выходе (возможные значения 0,1).
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18560
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
pirotehnick, почитай на моем сайте статью о работе с портами через API.
выкинь МАХ232, подключайся напрямую к сигналам относительно общего провода - только обязательно ограничивай ток резистором - не более 20 мА!!!
выкинь МАХ232, подключайся напрямую к сигналам относительно общего провода - только обязательно ограничивай ток резистором - не более 20 мА!!!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Реклама
Я имел в виду не только работу с портом используя API, но и вообще работу с API при написании программы.я с вас балдею - API-шную функцию переименовали - вы и рады, что с API не работаете
Возможно, чтобы быть полностью в этом увереным проверте порт с помощью моей проги, написаной на PureBasic.что с прогой всё в порядке, проблема скорее всего в схеме
Она позволяет изменять логические уровни на выводе DTR (4 контакт) порта. Исходник с комментариями прилагается. Можете сами убедится, ни одной API функции.
- Вложения
-
- PureBasic__For_COM_Port.rar
- (9.76 КБ) 650 скачиваний
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18560
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
то, что в вашем бейсике вызовы API-функций заменены синонимами - сути дела не меняет. Даже параметры почти совпадают в них. Если нравится - я совсем ни чего не имею против, просто обращаю ваше внимание, на как бы истинуPB_EXPERT писал(а):Исходник с комментариями прилагается. Можете сами убедится, ни одной API функции.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Да нет, как раз меняет!то, что в вашем бейсике вызовы API-функций заменены синонимами - сути дела не меняет
Это упрощает написание программы. Согласитесь, что проще использовать одну встроеную функцию чем несколько API, это экономит не только вреня но и нервы.
Например, работа встроеных функций достаточно хорошо описана в справке PureBasic, а вот полное описание API-функций на русском мне так и не удалось найти.
Естествено встроеные функции переводятся в API при компиляции, только так можно объяснить небольшёй размер EXEшника. Главное приемущество встроеных функций это простота написания программ.может, вы искренне заблуждаетесь, думая что API тут не используется...
-
sevastianov
- Первый раз сказал Мяу!
- Сообщения: 29
- Зарегистрирован: Ср июн 06, 2007 07:02:13
- Откуда: Ульяновск
- Контактная информация:
По схеме
Схема верная, даташитам соответствует. Правда сомнение вызывают номиналы конденсаторов 10 мкФ. В даташитах они 0.1мкФ и только для одного типа 1.0 мкФ.pirotehnick писал(а):Я же сказал, что с прогой всё в порядке, проблема скорее всего в схеме.
Ещё я использовал прогу, специально предназначеннную для тестов COM портов.
Всё равно ни чего не работает![]()
http://www.pcports.ru/files/articles/Se ... rminal.rar
Возможно это не важно, но лучше выполнять требования разработчика чипа.
.
О программе: При использовании MSComm может не получиться установки какого-либо сигнала USART отдельно от других. Они там как-то завязаны между собой. Один установите - другой сбросится!
Была у меня такая проблема, когда я пытался сделать ICSP протокол для JDM программатора.
Только когда сделал обращение к COM через API функции - всё прошло!
Но это так, на всякий случай. Поскольку схема готовая, то надо полагать автор её тестировал и проблем не должно быть.
-
pirotehnick
- Потрогал лапой паяльник
- Сообщения: 327
- Зарегистрирован: Пт фев 08, 2008 13:46:03
- Откуда: Воронеж
- Контактная информация:
Re: По схеме
Народ, извиняюсь за тупизну. 
Причина неполадки оказалась самой неожиданной, т.е. причины было две:
- ПЕРВАЯ - неисправный шнур...
, каковы шансы, что шнур купленный в фирменном магазине и запечатанный в заводскую упаковку окажется неисправным!!!??? Более половины пинов в нём неисправны. Чтож... будет для меня уроком, как говорится "доверяй, но проверяй"
-ВТОРАЯ - на предложенной схеме (http://www.pcports.ru/articles/com_1.php) не правильно указано расположение линий RTS и DTR (в действительности RTS-7, DTR-4).

Причина неполадки оказалась самой неожиданной, т.е. причины было две:
- ПЕРВАЯ - неисправный шнур...
-ВТОРАЯ - на предложенной схеме (http://www.pcports.ru/articles/com_1.php) не правильно указано расположение линий RTS и DTR (в действительности RTS-7, DTR-4).
что-то сильно сомневаюсь,...как надо было умудриться, что бы собрать и сфоткать неправильную схему (расположение RTS и DTR), заверяя что она работает.... не хорошо...sevastianov писал(а): надо полагать автор её тестировал и проблем не должно быть.
-
sevastianov
- Первый раз сказал Мяу!
- Сообщения: 29
- Зарегистрирован: Ср июн 06, 2007 07:02:13
- Откуда: Ульяновск
- Контактная информация:
А ведь верно!
Подключение и правда не то.
Усыпил мою бдительность горящий светодиод на фотографии...

Усыпил мою бдительность горящий светодиод на фотографии...
Если программе от сюда http://www.pcports.ru/articles/com_1.php
добавить пару кнпок, и прописать в обрабтке их нажатия следующий код: EscapeCommFunction(hFile, 7); - для включения, EscapeCommFunction(hFile,
; - для выключения, то можно дополнительно управлять выводом №3 (TXD).
добавить пару кнпок, и прописать в обрабтке их нажатия следующий код: EscapeCommFunction(hFile, 7); - для включения, EscapeCommFunction(hFile,
В пуре не заменяются снонимами .Он легко позволяет работать и с API (которые сами являются dll) так и с любыми другими библиотеками(dll).ARV писал(а):то, что в вашем бейсике вызовы API-функций заменены синонимами - сути дела не меняет. Даже параметры почти совпадают в них. Если нравится - я совсем ни чего не имею против, просто обращаю ваше внимание, на как бы истинуможет, вы искренне заблуждаетесь, думая что API тут не используется...
Другое дело либа про которую говорит PB_EXPERT она может юзать API .Но работа с ней проще .
И зря ты так про пуре , это не визуал барсик с его извращениями и мусором.
Достаточно екзешник компилированный пуре , прогнать в Олле - чистый асм .
Кстати на пуре будет все также , только проще и меньше размером.ARV писал(а):pirotehnick, почитай на моем сайте статью о работе с портами через API.
Всего то загрузить длл и использовать ее функции .
Последний раз редактировалось dosikus Пт авг 01, 2008 00:41:40, всего редактировалось 1 раз.
А вот это ты зря , если ты не пишешь обращение к API ,это еще не значит что пуре его не использует.PB_EXPERT писал(а):Исходник с комментариями прилагается. Можете сами убедится, ни одной API функции.
ComOpen вызов функции из MVCOM которая в свою очередь юзает API .
Другое дело что это проходит незаметно для тебя.
dosikus, ну так в исходнике нет ни одной API функции, а что в библиотеках твортится я не знаю. Я именно за исходник писал.А вот это ты зря , если ты не пишешь обращение к API ,это еще не значит что пуре его не использует.
ComOpen вызов функции из MVCOM которая в свою очередь юзает API
Я не спорю, MVCOM основана на API, но её использовать намного проще чем API. Это моё личное мение, подкреплённое практикой, можешь со мной не согласится.
Ну в принципе с твоей точки зрения ты прав.
В дебри тебе не зачем лезть.
С другой стороны представь себе ситуацию - ты составил схему в ней
одна только микросхема и ты говоришь -я не использую резисторы и транзисторы и знать их не хочу ,как они работают и зачем они нужны.
Сравнение конечно грубое ....
В дебри тебе не зачем лезть.
С другой стороны представь себе ситуацию - ты составил схему в ней
одна только микросхема и ты говоришь -я не использую резисторы и транзисторы и знать их не хочу ,как они работают и зачем они нужны.
Сравнение конечно грубое ....
Не, так мы скоро до машинных кодов (ассемблера) дойдём!
Итак ясно что все проги под Windows той или иной мере используют API.
Другое дело что в PureBasic есть более 800 встроеных функций, большенство которых по видимому построены на API но ими (встроеными функциями) гораздо проще пользоватся.
Если какой функции нехватает, то можно использовать дополнительную библиотеку функций, т. е. в самом исходнике могут даже отсутствовать вызовы API или их быть очень мало.
Например, у меня есть прога, состоящая почти из 12 тысяч строк и в ней ну максимум 10 вызовов API из исходника.
Естествено что в ней очень мого вызовов различных API функций, но они (вызовы) порождаются встроеными функциями.
Итак ясно что все проги под Windows той или иной мере используют API.
Другое дело что в PureBasic есть более 800 встроеных функций, большенство которых по видимому построены на API но ими (встроеными функциями) гораздо проще пользоватся.
Если какой функции нехватает, то можно использовать дополнительную библиотеку функций, т. е. в самом исходнике могут даже отсутствовать вызовы API или их быть очень мало.
Например, у меня есть прога, состоящая почти из 12 тысяч строк и в ней ну максимум 10 вызовов API из исходника.
Естествено что в ней очень мого вызовов различных API функций, но они (вызовы) порождаются встроеными функциями.
- NiTr0
- Друг Кота
- Сообщения: 3051
- Зарегистрирован: Пт авг 10, 2007 12:49:55
- Откуда: kr.ua
- Контактная информация:
Инициализация порта:
Дальше - чтение-запись АПИ ф-ями работы с файлами:
Описание переменных ф-й - есть в хелпе.
В конце - закрытие файла
Код: Выделить всё
var
hCom:cardinal;
com:ansistring;
procedure TForm1.init;
var
cto: TCommTimeOuts;
dcb: TDCB;
com_name: string;
begin
com_name:=com+#0;
if (hCom<>INVALID_HANDLE_VALUE) then CloseHandle(hCom);
hCom:=CreateFile(@com_name[1],GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE,//0, {exclusive access}
nil, {no security attrs}
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,{not overlapped}
0 {hTemplate}
);
if hCom=INVALID_HANDLE_VALUE then
begin
exit;
end;
GetCommState(hCom,dcb);
dcb.BaudRate:=19200;
dcb.ByteSize:=8;
dcb.Parity:=evenparity{NoParity};
dcb.StopBits:=ONESTOPBIT{};
dcb.Flags:=DTR_CONTROL_DISABLE or RTS_CONTROL_DISABLE;
SetCommState(hCom,dcb);
GetCommTimeOuts(hCom,cto);
with cto do
begin
ReadIntervalTimeout:=1;
ReadTotalTimeoutMultiplier:=1;
ReadTotalTimeoutConstant:=1;
WriteTotalTimeoutMultiplier:=1;
WriteTotalTimeoutConstant:=1;
end;
SetCommTimeOuts(hCom,cto);
PurgeComm(hCom,PURGE_RXCLEAR);
end;
Код: Выделить всё
ReadFile(hCom,data,count,t,nil);
WriteFile(hCom,data,count,t,nil);В конце - закрытие файла
Код: Выделить всё
CloseHandle(hCom);- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18560
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
если устраивают параметры настройки СОМ-порта по умолчанию (как через панель управления настроено), в Delphi можно гораздо проще:
Код: Выделить всё
var F : file of byte;
assign(F,'COM1');
reset(F);
write(F,23); //отправка числа 23 через СОМ1
close(F);если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!


