C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Чтение/запись LPT порт
WulF
Отправлено: 04.04.2004, 15:49


Ученик-кочегар

Группа: Участник
Сообщений: 3



Народ, помогите плз. Уже мозги киснут. Спаял железяку для того чтоб увидеть что на LPT творится. Т.е. 8 светодиодов на выходе и 5 кнопок на вход. Написал прогу с помощью компонента VCX. Все вроде хорошо, все прекрасно. Все что поросишь идет на выход, также и на вход. Потом компилю релиз и несу на другую тачку, а прога там не работает — требует зарегирить компонент в системе.

В качестве платформы использую Win2k (т.е. никакого ассемблера)

Потом пытался все это переписать под CreateFile, вроде судя по докам все правильно, но на выходе все равно ничего нет.

Может я напутал что-то?
HANDLE hLPT=CreateFile("\\\\.\\LPT1",GENERIC_WRITE,0,NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_RANDOM_ACCESS , NULL);

if (hLPT!=INVALID_HANDLE_VALUE){
Memo1->Lines->Add(" Ok Open LPT1");
char buffer;
buffer=10;
DWORD dw;
OVERLAPPED ov;
WriteFile(hLPT,buffer,sizeof(buffer),&dw,&ov);
CloseHandle(hLPT);}

else Memo1->Lines->Add("Error Open");}

Ошибок вроде не выдает, типа все нормально, а светодиоды все равно не мигают.
Насколько я понимаю проблему, то LPT просто берет это все в свой буфер и наружу не выводит. Подскажите плиз в чем траблы, или как ему команду подать на вывод буфера?
Asher
Отправлено: 04.04.2004, 16:53


Мастер участка

Группа: Модератор
Сообщений: 550



Привет.
а \\\\.\\ перед LPT1 убрать не пробовал?
WulF
Отправлено: 04.04.2004, 18:35


Ученик-кочегар

Группа: Участник
Сообщений: 3



Пробовал. Соединение с портом происходит нормально и запись в него тоже, просто данные из него не выходят.
klumba
Отправлено: 06.04.2004, 05:34


Не зарегистрирован







Попробуй в биосе сделать LPT как EPP.
Я связывался с портом через библиотеку dlportio, идет с прогой DlPortIO, с ней же идет пример на С. Общается прямо с регистрами (0x378 — для LPT1). Библиотеку просто добавил в проект и все работает.
У меня другой вопрос почему при передачи по порту выдает 3.2 вольта а при приеме 3.9 и какой ток тама. (может это только у меня)
WulF
Отправлено: 07.04.2004, 16:49


Ученик-кочегар

Группа: Участник
Сообщений: 3



Выходной ток на LPT не должен превышать 20мкА, а выходное характеристики соответсвуют ТТЛ уровням. Вообще лучше возьми полистай Гука "Аппаратные интерфейсы ПК". Также определен стандарт на приемники/передатчики для LPT — IEEE1284.
У меня напряжение при вводе/выводе тоже прыгает, но какой-то глобальной проблемы для меня пока не составляет. А с режимами порта в БИОСе я игрался, все равно не помогает.
Asher
Отправлено: 07.04.2004, 18:13


Мастер участка

Группа: Модератор
Сообщений: 550



Привет.
Для начала попробуй упростить:
CreateFile( "LPT1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL );
и т.к. ты открывал не overlapped, то &ov тебе не нужен.
WriteFile(hLPT, &buffer,sizeof(buffer),&dw,NULL);
В предыдущей строке самое главное это &buffer, а не buffer!!!
А ток все-таки 20мА (У Гука опечатка. Там на странице выше все данные приведены для тока 14мА)

Вернуться в Работа с внешними устройствами