Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2002.09.05;
Скачать: [xml.tar.bz2];

Вниз

Работа с LPT   Найти похожие ветки 

 
Зубарев Антон   (2002-05-10 11:49) [0]

Подключил к lpt АЦП. Читаю данные по адресу 37bh (режим работы EPP) с помощью функции:

function PortReadByte(Addr:Word) : Byte; assembler; register;
asm
MOV DX,AX
IN AL,DX
end;

забиваю массив данными и вывожу на график, т.е. получается простейший осциллограф. Т.к. Win98 многозадачная система, то при подаче на вход АЦП синусоиды на графике отображается синусоида у которой в некоторых местах резко меняется фаза, т.е. когда у данного процесса заканчивается лимит времени, происходит потеря данных. Если кто-то сталкивался с такой проблемой, подскажите как ее решить. Скорость нужна как можно большая. Пробовал менять приоритет процесса , но для своей программы большого приоритета выставить не удалось. Возможно какой либо стандартный драйвер может вызывать процедуру при поступлении на регистр порта "1" или "0" (у АЦП есть выход ""готовность данных"") если кто знает, откликнитесь.


 
Лёша   (2002-05-10 23:09) [1]

Совместим ли АЦП с режимом EPP?


 
Сержи   (2002-05-12 03:20) [2]

В общем случае, для любой ОС, нужно писать драйвер. В конкретном случае W9x, можно обойтись и так. Но лучше всего написать под DOS. Причем в режиме EPP возможны варианты, либо по прерыванию сразу обрабатывать данные, либо через DMA записывать их все, а потом уж обрабатывать.


 
zuavr   (2002-05-13 13:17) [3]

Ответ Леше.

Режим ЕРР пока использую только для того чтобы можно было считывать данные с порта, т.е. к протоколу обмена пока не привязываюсь и по этой же причине низкая скорость, т.к. не отвечаю во время таймаута. Кстати, менял приоритет процесса,
данные стали теряться в меньшем колличестве, но для моего устройства необходимо чтобы вообще не происходило потери данных.

Ответ Сережи (извеняюсь, если не правильно склоняю имя).

С DOSом все намного проще, но прогу нужно писать только под Win 98. Крайний вариант (хотя и самый правильный) это написать
Vxd-ик. Если можно, то по подробней на счет двух вариантов в ркжиме ЕРР.


 
Лёша   (2002-05-13 17:50) [4]

Внешнее устройство либо поддерживает ЕРР на 100%, либо не поддерживает его вовсе.

Если поддерживает:
CreateFile, ReadFile в отдельном потоке. Поток будет висеть на lpt пока не появится байт, потом следующий и т.д. Всю работу на себя возьмёт Windows и аппаратная часть. Имхо, и для ЕСР также, хотя не утверждаю.

Если не поддерживает:
Во всяком случае тебе нужно, чтобы внешнее устройство знало, когда компьютер считал байт. Другими словами, компьютер выставляет регистр о том что байт получен. И далее по логике ждёт сигнал "" готовность данных"". Если этого не будет, внешнее устройство может передавать данные быстрее, чем их будут считывать. И таймоут сдесь проблем не решит. Только за счёт больших тормозов.
Тебе придётся реализовать подобную логику в своём драйвере. На Делфи такой написать нельзя (не видел, во сяком случае). Хотя можно воспользоваться готовыми. Полно таких бесплатных, и к томуже оформленных как компоненты Делфи. Скорость через такой драйвер будет ниже 1000 байт/сек. Это при возможных 2Mb (мегабайт, не мегабит).


 
Rooman   (2002-05-13 18:52) [5]

а зачем вам 8-битный ацп? может проще к звуковухе присобачиться?


 
jonik pegas   (2002-05-14 14:02) [6]

Режим EPP не решит данную проблему-от стандартного он отличается только тем, что аппаратно генерирует стробы чтения записи. Если
через тайм аут (15 мкс вроде) внешнее устройство не ответит то контроллер выдаст ошибку.Но обмен все равно осуществляется программно. Для случаев аппаратного обмена надо использовать режим ECP-Он использует режим DMA и сам следит за квитированием. (См книжку Гука "Аппаратные средства IBM PC"). По идее режим ECP поддерживается Windows на уровне драйверов(т.е ф-ями Readfile,WriteFile) но в этом случае логика внешнеге устройство должно соответствовать логике принтера. Что касается использования прерывания то на LPT есть нога Ack-IRQ5 по моему. Как его использовать в Винде-незнаю копай в направлении TwicPort там что то похожее. Если все таки использовать EPP не принимай данные по одному in out а пересылай сразу блоком rep outsp
В качестве крайней меры попробуй отрубить контроллер прерываний
-asm команда cli/sti.
Но Единственным правильным решением будет изменение логики работы устройства-добавления туда внешней памяти которая заполнятся будет аппаратным счетчиком (до 10Mhz нет проблем) а читатся компутером в удобном для него темпе. Если хочеш подробнее-мылом


 
zuavr   (2002-05-14 15:51) [7]

Ответ Леше.

у этого ацп есть выход ""готовность данных"", "разрешение считывания", "пуск", т.е. к протоколу скорее всего смогу привезаться. Если есть информация о работе с lpt с помощью api-шек CreateFile, ReadFile просьба поделиться.

Ответ Rooman.

Звуковуха не подойдет т.к. мне нужно вводить сигнал с верхней частотой 60000 Гц т.е. при 8 разрядах скорость 480000 бит/с.


Ответ jonik pegas.

Было бы не плохо на счет мыла. Заранее спасибо.


 
Психоз Весенний Невменяемый   (2002-05-15 10:48) [8]

Используй буферизацию (можно реализовать аппаратно).
А вообще, подключай свой АЦП через USB и не теряй напрасно время...
:)


 
DZL   (2002-07-21 23:28) [9]

Под W2000 можно работать с LPT или нет?


 
Слесарь-методист   (2002-07-21 23:56) [10]

Ну здрасъте! На кой чорт он был бы нужен, еsли он бы не rabotaL?
:o)


 
Anatoly Podgoretsky   (2002-07-22 00:19) [11]

DZL (21.07.02 23:28)
Конечно можно и я уверен, что ты видел принтеры подключенные к LPT порту, наверно не для красоты.


 
S_CH   (2002-08-09 10:06) [12]

По описанию лучше читать из 37С (регистр данных , а не адреса
как 37B). А потом скорость намного увеличтся, если сначала копить данные без передышки , отдельным ассемблерным куском
с cli и sti , без выхода в Дельфи..., для Win 95/98 это пройдет.


 
Слесарь Матерящийся   (2002-08-09 10:07) [13]

Тема, стара как Windows... :)



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2002.09.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.013 c
1-14143
Helg
2002-08-23 20:39
2002.09.05
Как сохранить TImageList в файле?


7-14311
Максимка
2002-06-27 06:55
2002.09.05
Как понизить число оборотов CD-ROM а?


6-14203
Олеся
2002-06-25 23:40
2002.09.05
Вопрос мастерам...


3-13951
devol
2002-08-14 11:20
2002.09.05
Проблема с Paradox и TQuery


14-14229
YDV
2002-08-09 07:42
2002.09.05
Доброго времени дня !...Исходники MMTools for DELPHI !!!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский