Всем желаю здравствовать.
Ломаю голову уже неделю над следующей проблемой:
Передача и прием данных посредством LPT порта.
Для выхода испольщую пины данных. С этим никаких проблем.
Устанавливаются, снимаются.
Для входа использую пины состояния. Но тут проблема - прочесть их могу, а изменить нет. То есть проверяю порт - везде единицы. Замыкаю 10 пин на землю, проверяю повторно - тоже единица.
Использовал разные драйверы (WinIo, ZlPortIo, LptWdmIo), везде все тоже самое.
Кто-нибудь сталкивался с такой проблемой?
Если считываешь регистр состояния порта, а не регистр данных порта, то уровень должен читаться.
Если уровни на вывод управляются, драйвера в норме.
Конечно, не знаю твои задумки, но лучше собрать небольшую схему, с парой буферных регистров, порт
вкючить в режим ЕЕР, и будет у тебя спокойно 8 линий на ввод и 8 на вывод (а еще пару микросхем- и вообще- сколько хочешь линий). Тогда и твои "замыкаю пин на массу" не страшны, а то LPT порт довольно хрупкий. А если достаточно 3 линии ввода и 2 вывода (расширить тоже не трудно), лучше использовать прекрасно защищенный СОМ порт, линии DCD, DSR, CTS, DTR, RTS спокойно работают с уровнями.
Читаю регистр состояния (378h+1). Читается то он на ура, но я его изменить не могу. Видел примеры в интернете, делал также. Через 500 омник замыкал на землю. Дело в том, что на ноге все равно единица сохраняется.
Для схемы нужно только 2 выхода с компа и один вход. COM использовать затруднительно, так как в устройстве оба кома заняты. Предполагается что порт в основном на выход работает, на вход приходит сигнал от датчика вторжения. LPT меня полностью устраивает.
Могу успокоить сразу - резюк 500 Ом можно не ставить, у меня без него ничего не дымится Бум думать...
А, вот. Будь внимателен, некоторые пины инвертированы, например Busy. Подаешь землю - считывается 1. Без проблем все работает, предлагаю прогу для гирлянд (посмотри по этой ветке).
Должен читаться. Пожалуй 510 ом многовато будет, если внутренний резистор порта, который 1 подтягивает, около 1ком. Тогда ноль на линии не получится. В принципе чисто входные линии можно и без сопротивлений на массу брать, если аккуратно.
Всем спасибо. Нашел.
Начал переключать режимы работы паралельного порта в биосе.
Также перебирал земли (18-25)
На 22 выводе в Normal режиме заработало. Причем на 23-25 работать не хотел.
Еще раз всем спасибо за помощь.
Всем спасибо. Нашел. Начал переключать режимы работы паралельного порта в биосе. Также перебирал земли (18-25) На 22 выводе в Normal режиме заработало. Причем на 23-25 работать не хотел. Еще раз всем спасибо за помощь.
Блин а я про биос не подумал Примите еще к сведению, что через пины D0-D7 тоже можно считывать данные - достаточно поставить на пин лог. 1 - и спокойно коннектить пин к земле. Сигнал на нем автоматически отрубается. При вычитании установившегося числа из бывшего получаем 2 в X степени, где х - D0-D7.
ЗЫ Опять наверно меня не поймут
А вот за это отдельное спасибо. Даже не знал, что понижение уровня на выходе отразится на регистре данных. Изящно. Это в каком режиме работы порта (SPP, EPP,ECP)?
Если это кому ещё интересно, столкнулся сам с проблемой чтения из порта. Решил её следующим образом:
Есть у LPT порта в о всех режимах, кроме SPP, дополнительный регистр управления со смещением 402h т.е. если адрес порта 378h то адрес регистра 77Ah. Там кроме всякой фигни 3 старших регистра управляют режимом работы. Пишем туда число 34h. Теперь можно управлять направлением работы регистра DATA битом 5 регистра CONTROL (он не выведен на разъём и управляется программно) 0-вывод 1-ввод.
Подробнее В.Кулаков "Программирование на аппаратном уровне"
или М.Гук "Аппаратные средства ПК" но у Кулакова понятнее.
Потом возвращаем всё на место записью числа 14h в доп.регистр.
И вообще с LPT можно те ещё чудеса творить.
Там в регистре состояния, данные по некоторым линиям можно только читать. Не все работают на запись, кроме того многое зависит от режима работы порта ECP, EPP, SPP
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения