Вот захотел поработать с COM портом. Первым делом я решил протестить линии RTS и DTR, т.е. отобразить сигнал на светодиодах. Схему и прочий материал я брал здесь http://www.pcports.ru/articles/com_1.php Написал программу, спаял схему. Всё вроде бы хорошо, порт открывается, ошибок в программе нету. Подключил схему,…ни чего не происходит, т.е. светодиоды так и оставались гореть. Интересно, а они вообще должны гореть, после подачи питания на схему?
Ещё меня насторожила сама схема, т.е. её правильность . Во-первых не понятно с полярностью конденсаторов, похоже её перепутали, во-вторых нумерация выводов тоже кажется не правильной. По другим источникам RTS- 7, DTR-4.
И вообще как можно проверить сигнал на этих линиях без использования MAX232?. Тестером померить не получилось.
Помогите, пожалуйста, разобраться с этой проблемой.
На том сайте если не ошибаюсь проги на Си, и работа с портом ведётся посредством API функций?
Лично я не очень API люблю (запутано там слишком) поэтому пишу проги на PureBasic
С его помощью можно написать прогу без API.
Например, с помощью библиотеки MVCOM можно легко с портом работать не используя API.
Скажем, для управления линией DTR существует функция ComSetDTR( Handle , Status )
где Handle идентификатор порта, Status - необходимый логический уровень на выходе (возможные значения 0,1).
Я же сказал, что с прогой всё в порядке, проблема скорее всего в схеме.
Ещё я использовал прогу, специально предназначеннную для тестов COM портов.
Всё равно ни чего не работает
PB_EXPERT писал(а):Например, с помощью библиотеки MVCOM можно легко с портом работать не используя API.
Скажем, для управления линией DTR существует функция ComSetDTR( Handle , Status )
где Handle идентификатор порта, Status - необходимый логический уровень на выходе (возможные значения 0,1).
я с вас балдею - API-шную функцию переименовали - вы и рады, что с API не работаете.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
я с вас балдею - API-шную функцию переименовали - вы и рады, что с API не работаете
Я имел в виду не только работу с портом используя API, но и вообще работу с API при написании программы.
что с прогой всё в порядке, проблема скорее всего в схеме
Возможно, чтобы быть полностью в этом увереным проверте порт с помощью моей проги, написаной на PureBasic.
Она позволяет изменять логические уровни на выводе DTR (4 контакт) порта. Исходник с комментариями прилагается. Можете сами убедится, ни одной API функции.
PB_EXPERT писал(а):Исходник с комментариями прилагается. Можете сами убедится, ни одной API функции.
то, что в вашем бейсике вызовы API-функций заменены синонимами - сути дела не меняет. Даже параметры почти совпадают в них. Если нравится - я совсем ни чего не имею против, просто обращаю ваше внимание, на как бы истину может, вы искренне заблуждаетесь, думая что API тут не используется...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
то, что в вашем бейсике вызовы API-функций заменены синонимами - сути дела не меняет
Да нет, как раз меняет!
Это упрощает написание программы. Согласитесь, что проще использовать одну встроеную функцию чем несколько API, это экономит не только вреня но и нервы.
Например, работа встроеных функций достаточно хорошо описана в справке PureBasic, а вот полное описание API-функций на русском мне так и не удалось найти.
может, вы искренне заблуждаетесь, думая что API тут не используется...
Естествено встроеные функции переводятся в API при компиляции, только так можно объяснить небольшёй размер EXEшника. Главное приемущество встроеных функций это простота написания программ.
pirotehnick писал(а):Я же сказал, что с прогой всё в порядке, проблема скорее всего в схеме.
Ещё я использовал прогу, специально предназначеннную для тестов COM портов.
Всё равно ни чего не работает
Схема верная, даташитам соответствует. Правда сомнение вызывают номиналы конденсаторов 10 мкФ. В даташитах они 0.1мкФ и только для одного типа 1.0 мкФ.
Возможно это не важно, но лучше выполнять требования разработчика чипа.
.
О программе: При использовании MSComm может не получиться установки какого-либо сигнала USART отдельно от других. Они там как-то завязаны между собой. Один установите - другой сбросится!
Была у меня такая проблема, когда я пытался сделать ICSP протокол для JDM программатора.
Только когда сделал обращение к COM через API функции - всё прошло!
Но это так, на всякий случай. Поскольку схема готовая, то надо полагать автор её тестировал и проблем не должно быть.
Народ, извиняюсь за тупизну.
Причина неполадки оказалась самой неожиданной, т.е. причины было две:
- ПЕРВАЯ - неисправный шнур... , каковы шансы, что шнур купленный в фирменном магазине и запечатанный в заводскую упаковку окажется неисправным!!!??? Более половины пинов в нём неисправны. Чтож... будет для меня уроком, как говорится "доверяй, но проверяй"
sevastianov писал(а): надо полагать автор её тестировал и проблем не должно быть.
что-то сильно сомневаюсь,...как надо было умудриться, что бы собрать и сфоткать неправильную схему (расположение RTS и DTR), заверяя что она работает.... не хорошо...
Если программе от сюда http://www.pcports.ru/articles/com_1.php
добавить пару кнпок, и прописать в обрабтке их нажатия следующий код: EscapeCommFunction(hFile, 7); - для включения, EscapeCommFunction(hFile, ; - для выключения, то можно дополнительно управлять выводом №3 (TXD).
ARV писал(а):то, что в вашем бейсике вызовы API-функций заменены синонимами - сути дела не меняет. Даже параметры почти совпадают в них. Если нравится - я совсем ни чего не имею против, просто обращаю ваше внимание, на как бы истину может, вы искренне заблуждаетесь, думая что API тут не используется...
В пуре не заменяются снонимами .Он легко позволяет работать и с API (которые сами являются dll) так и с любыми другими библиотеками(dll).
Другое дело либа про которую говорит PB_EXPERT она может юзать API .Но работа с ней проще .
И зря ты так про пуре , это не визуал барсик с его извращениями и мусором.
Достаточно екзешник компилированный пуре , прогнать в Олле - чистый асм .
ARV писал(а):pirotehnick, почитай на моем сайте статью о работе с портами через API.
Кстати на пуре будет все также , только проще и меньше размером.
Всего то загрузить длл и использовать ее функции .
Последний раз редактировалось dosikus Пт авг 01, 2008 00:41:40, всего редактировалось 1 раз.
PB_EXPERT писал(а):Исходник с комментариями прилагается. Можете сами убедится, ни одной API функции.
А вот это ты зря , если ты не пишешь обращение к API ,это еще не значит что пуре его не использует. ComOpen вызов функции из MVCOM которая в свою очередь юзает API .
Другое дело что это проходит незаметно для тебя.
А вот это ты зря , если ты не пишешь обращение к API ,это еще не значит что пуре его не использует.
ComOpen вызов функции из MVCOM которая в свою очередь юзает API
dosikus, ну так в исходнике нет ни одной API функции, а что в библиотеках твортится я не знаю. Я именно за исходник писал.
Я не спорю, MVCOM основана на API, но её использовать намного проще чем API. Это моё личное мение, подкреплённое практикой, можешь со мной не согласится.
Ну в принципе с твоей точки зрения ты прав.
В дебри тебе не зачем лезть.
С другой стороны представь себе ситуацию - ты составил схему в ней
одна только микросхема и ты говоришь -я не использую резисторы и транзисторы и знать их не хочу ,как они работают и зачем они нужны.
Сравнение конечно грубое ....
Не, так мы скоро до машинных кодов (ассемблера) дойдём!
Итак ясно что все проги под Windows той или иной мере используют API.
Другое дело что в PureBasic есть более 800 встроеных функций, большенство которых по видимому построены на API но ими (встроеными функциями) гораздо проще пользоватся.
Если какой функции нехватает, то можно использовать дополнительную библиотеку функций, т. е. в самом исходнике могут даже отсутствовать вызовы API или их быть очень мало.
Например, у меня есть прога, состоящая почти из 12 тысяч строк и в ней ну максимум 10 вызовов API из исходника.
Естествено что в ней очень мого вызовов различных API функций, но они (вызовы) порождаются встроеными функциями.
Ребята всем огромный респект, то что вы делаете ето супер, у меня тут возникла проблемка, может ктонибудь поможет, надо написать програмку на Дельфи 7 чтоб по нажатии кнопки уходил код в ком порт, помогите кто чем может )) в дельфи не разбираюсь.
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;
Дальше - чтение-запись АПИ ф-ями работы с файлами: