|
|
  |
Проблема с LPT |
|
|
|
Oct 28 2007, 23:35
|
Группа: Новичок
Сообщений: 5
Регистрация: 28-10-07
Пользователь №: 31 831

|
У меня возникла следующая проблема: К компу подключен девайс, который получает данные и пишет их в порт в режиме EPP (причем, данные пишутся в двухбайтном виде и данных в каждый момент времени 7 штук, то есть устройство принимает данные от 7 датчиков и пишет все данные в порт). Я программно (Delphi) хочу их читать из порта и обрабатывать. Проблема возникает, куда эти данные записывает девайс.
|
|
|
|
|
Oct 29 2007, 12:46
|

Дима
    
Группа: Свой
Сообщений: 1 683
Регистрация: 15-12-04
Из: Санкт-Петербург
Пользователь №: 1 486

|
Параллельный порт в режиме EPP - пассивное устройство, сам никуда не пишет, из него читает компьютер. В двухбайтовом виде - не бывает, только по одному, там 8-разрядная шина данных. Читаете Вашей программой байт данных по адресу <базовый адрес LPT>+4, и всё. Лучше почитайте что-нибудь про параллельный порт, куча вопросов сразу отпадёт. Например, у меня, любимого: http://www.dsioffe.narod.ru/stuff/stuff.htm#parportИ поищите по форуму, уже не раз обсуждался программный доступ к параллельному порту.
--------------------
|
|
|
|
|
Oct 29 2007, 18:57
|
Группа: Новичок
Сообщений: 5
Регистрация: 28-10-07
Пользователь №: 31 831

|
Спасибо! В том то и дело, что я уже много чего прочитал и с регистрами разобрался. Моя программа читает данные из <Базовый адрес LPT1>+4, но там данные не меняются.
|
|
|
|
|
Oct 29 2007, 20:42
|
Частый гость
 
Группа: Свой
Сообщений: 118
Регистрация: 1-10-07
Пользователь №: 30 988

|
Обычно нужно включить в BIOS setup режим EPP, для чтения данных из порта в программе разрешить "двунаправленность" в регистре управления, 5-й бит. Естественно, необходимо, чтобы ваше внешнее железо правильно реализовывало протокол обмена EPP. Он сильно отличается от SPP, а Ваши слова, что внешнее устройство что-то пишет в порт вызывают сомнения в понимании, как это работает. Из тонкостей можно упомянуть, что EPP режим хотя и работает по сигналу готовности от внешнего устройства, но имеет таймаут около 10-15 мкс, и, если готовности нет, то чтение все равно завершается с некорректными данными. Еще упомяну, что имеет значение качество кабеля, но это чаще приводит к искажениям данных, а не к полной неработоспособности.
|
|
|
|
|
Oct 29 2007, 21:32
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(PSP @ Oct 30 2007, 01:42)  Из тонкостей можно упомянуть, что EPP режим хотя и работает по сигналу готовности от внешнего устройства, но имеет таймаут около 10-15 мкс, и, если готовности нет, то чтение все равно завершается с некорректными данными. А еще до кучи, есть две реализации EPP: EPP1.7 и EPP1.9. В чем их отличие за давностью лет уже не помню. Помню лишь, что было много "секса" при попытке работать на разных материнках через LPT в режиме EPP с PCF8584.
|
|
|
|
|
Oct 29 2007, 21:53
|
Группа: Новичок
Сообщений: 5
Регистрация: 28-10-07
Пользователь №: 31 831

|
Цитата Естественно, необходимо, чтобы ваше внешнее железо правильно реализовывало протокол обмена EPP. Он сильно отличается от SPP, а Ваши слова, что внешнее устройство что-то пишет в порт вызывают сомнения в понимании, как это работает. Устройство делал не я. У меня есть паспорт к нему, но там не сказано, каким образом устройство общается с компом, кроме режима EPP. Цитата Из тонкостей можно упомянуть, что EPP режим хотя и работает по сигналу готовности от внешнего устройства, но имеет таймаут около 10-15 мкс, и, если готовности нет, то чтение все равно завершается с некорректными данными. Еще упомяну, что имеет значение качество кабеля, но это чаще приводит к искажениям данных, а не к полной неработоспособности. Есть программа, написанная на Pascal и работающая только в ДОСе (в эмуляции не канает). Я её хочу переделать под виндовоз, но кода исходной проги у меня нет. Поэтому я и пытаюсь сам разобраться.
|
|
|
|
|
Oct 29 2007, 23:05
|
Частый гость
 
Группа: Свой
Сообщений: 118
Регистрация: 1-10-07
Пользователь №: 30 988

|
Цитата Есть программа, написанная на Pascal и работающая только в ДОСе (в эмуляции не канает). Я её хочу переделать под виндовоз, но кода исходной проги у меня нет. Поэтому я и пытаюсь сам разобраться. А может быть Вы пытаетесь напрямую обращаться к портам вводы/вывода в Win2000/XP? Без специальных средств открывающих прямой доступ это невозможно.
|
|
|
|
|
Oct 29 2007, 23:58
|
Группа: Новичок
Сообщений: 5
Регистрация: 28-10-07
Пользователь №: 31 831

|
Цитата(PSP @ Oct 30 2007, 03:05)  А может быть Вы пытаетесь напрямую обращаться к портам вводы/вывода в Win2000/XP? Без специальных средств открывающих прямой доступ это невозможно. В том то и дело, что я работаю через драйвер LPTWDMIO.
|
|
|
|
|
Oct 30 2007, 23:15
|
Группа: Новичок
Сообщений: 5
Регистрация: 28-10-07
Пользователь №: 31 831

|
Цитата(DSIoffe @ Oct 30 2007, 14:59)  Для начала я бы глянул осциллографом на линию nDataStrobe при непрерывном чтении из Вашего EPP. Если там период намного больше 1 мкс, то протокол EPP просто не работает, и прочитанные данные ничего не значат. А потом уже можно идти дальше. а где мона найти осциллограф???
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|