Cкорость LPT

Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Alexc
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Чт фев 15, 2007 21:46:57

Cкорость LPT

Сообщение Alexc »

Приветствую., собрал управляемую от LPT светодиодную матрицу 8Х8, в самом начале работы скорость у LPt почему то маленькая(скорость развертки не достаточная), примерно через полчаса скорость увеличивается и изображение рисуется нормально, с чем это может быть связанно?
Вложения
функциональная.JPG
схема
(170.05 КБ) 959 скачиваний
Аватара пользователя
dx40
Нашел транзистор. Понюхал.
Сообщения: 182
Зарегистрирован: Вт июл 11, 2006 12:39:16
Откуда: Москва
Контактная информация:

Сообщение dx40 »

Как управляешь портом? Из доса через порты ввода-вывода скорость определяется только программой.
Alexc
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Чт фев 15, 2007 21:46:57

Сообщение Alexc »

Управляю прогой которую написал на дельфи с компонентом SmallPort.
Аватара пользователя
Мышонок
Друг Кота
Сообщения: 3792
Зарегистрирован: Чт сен 14, 2006 11:42:09
Откуда: Обитаю на чердаке
Контактная информация:

Сообщение Мышонок »

Работа параллельного порта определяется фактически двумя сигналами: Data Strobe "Данные на линиях готовы" - длительность 5 мкс и Asknowledge "Подтверждение приёма данных" - 10 мкс. Также сигнал Busy "Не могу принять данные" - сигнал приостановить передачу данных. В самом начале всего идёт сигнал Init "инициализация устройства" - (50-100) мкс, по этому сигналу устройство должно выдать сигнал Select "Готов", но обычно он сделан постоянным.

Считайте времена.
Память очень интересная штука: бывает так, что запомнишь одно, а вспомнишь другое...
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

мышонок писал(а):Работа параллельного порта определяется фактически двумя сигналами: Data Strobe "Данные на линиях готовы" - длительность 5 мкс и Asknowledge "Подтверждение приёма данных" - 10 мкс. Также сигнал Busy "Не могу принять данные" - сигнал приостановить передачу данных. В самом начале всего идёт сигнал Init "инициализация устройства" - (50-100) мкс, по этому сигналу устройство должно выдать сигнал Select "Готов", но обычно он сделан постоянным.

Считайте времена.

Это выдержки из спецификации протокола CENTRONICS, однако в предложенной конструкции, скорее всего, протокол не используется, т.к. линии ASK и т.п. просто не использованы. Предполагаю (как обычно, ибо правду почему-то никто сразу не говорит), что STROBE выдается записью в регистр управления порта, т.е. минуя драйвер порта Windows.
Мои эксперименты показывают, что даже на машинах с очень слабым процессором под Windows 98 (из проги на Delphi) можно обеспечить частоту смены уровней на линиях (любых) LPT-порта примерно до 100 кГц, однако период этой частоты нестабилен - ОС вмешивается.
Если же вывод ведется через системный драйвер (т.е. обычными файловыми функциями вывода) - обеспечить какие-то гарантии временных интервалов невозможно в принципе. В этом случае все сигналы могут быть непредсказуемо задержаны ОС. Отчасти это предположение объясняет странное поведение программы: при непрерывной работе только одного-двух активных процессов Windows постепенно "оптимизирует" содержимое системного кэша так, что быстродействие программ повышается (грубо говоря, Windows выкидывает из памяти все то, что в данное время не работает). Проверить это предположение можно просто: спустя 30 минут, когда схема+программа станут работать "быстро", взять и запустить какой-нибудь фильм или музыку на воспроизведение, а потом отключить. Предполагаю, что при этом "быстродействие" устройства снова понизится, а потом, спустя некоторое время, снова возрастет.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Мышонок
Друг Кота
Сообщения: 3792
Зарегистрирован: Чт сен 14, 2006 11:42:09
Откуда: Обитаю на чердаке
Контактная информация:

Сообщение Мышонок »

С ARV не поспоришь. :wink: Отмечу основное: Windows, так же как и MS DOS (в девичестве CP/М) не являются ОС реального времени. Скорость параллельного порта (LPT) также не является строго фиксированной, в отличие от RS-232 (COM). Плюс ещё сама программа управления. В ней просто могут быть плохо организованы циклы и переходы.
Память очень интересная штука: бывает так, что запомнишь одно, а вспомнишь другое...
Alexc
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Чт фев 15, 2007 21:46:57

Сообщение Alexc »

Судя по ряду тестов именно это и происходит, в прожке наврят ли, потому как она просто последовательно в цыкле загружает в порт номера светодиодов. в данном случае идеалньеым вариантом было бы туда в схему МК пихнуть типа AT90S2323 или 2313, и побайтно в него загружать номера диодов перед выводом. Спасибоз а помощь осталось только растолковать столь объёмистое(для него это вполне объёмистое :)) ) объяснение учителю в оправдание такого глюка в начале работы моего курсача.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

Можно попробовать задать для программы приоритет повыше, вплоть до RealTime :) При этом сама система может слегка притормаживать, но львиная доля процессорного времени будет выделяться именно программе с наивысшим приоритетом. Так же перед началом критического цикла дать команду системе реорганизовать память, сбросить буфера из памяти на винт и т.п. В WinXP проблемы распределения времени решены лучше, чем в Win9x - стОит запускать программу именно под хрюшей. Наконец, в программе надо отказаться от процедур sleep для организации задержек - именно из-за них задержки и плавают.
100% избавления от проблемы эти меры не дадут, но могут несколько сгладить отрицательные эффекты.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Alexc
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Чт фев 15, 2007 21:46:57

Сообщение Alexc »

От sleep отказался ещё на первой демонстрации курсача, заменил на два пустых цыкла for to, стало не так ярко, но хоть изображение отрисовывается :)
Аватара пользователя
otshelnik86
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Сб мар 01, 2008 01:16:01
Контактная информация:

Сообщение otshelnik86 »

вопрос в тему:
Есть задача. На вход компа посупает тактовая последовательность с длительностью такта 1,33 мкс (750 кГц). За этот период времени процессор должен обработать информацию. Я решил использовать параллельный LPT порт, поскольку информация поступает параллельно (в соответствии с вышеприведенной частотой). Программное обеспечение будет писаться на Assembler'е, поскольку высокая тактовая частота.
Теперь вопросы: сможет ли LPT порт обмениваться информацией с такой скоростью и как лучше сопрячь его с ТТЛ логикой? Сможет ли отработать, например, оптопара? Да и в целом, сможет ли процессор обрабатывать информацию за такой промежуток времени?
В целом поставленная задача очень тяжелая и нужен совет практика, поскольку у меня опыта нет, а делать надо....
Спасибо!
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

мне кажется, что это если возможно, то потребует серьёзнейших усилий, в частности знания ядра Windows, WDM-драйверов и т.п. При этом все равно гарантии того, что сигналы не будут пропущены не будет. Другое дело - написать программу под DOS и запустить ее монопольно, т.е. без загрузки Windows. Но и в этом случае проблем будет хоть отбавляй.

LPT сопрягать никак не надо, его сигналы ТТЛ-совместимы. На такой частоте порт сможет работать (теоретически), однако суметь с этим справиться будет сложно - см.выше. Оптроны можно подключать к линиям порта напрямую (если ток не превысит 10 мА), однако оптроны, работающие на такой частоте - редкость, еще поискать придется.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
dx40
Нашел транзистор. Понюхал.
Сообщения: 182
Зарегистрирован: Вт июл 11, 2006 12:39:16
Откуда: Москва
Контактная информация:

Сообщение dx40 »

Я бы не стал использовать лпт-порт, не для того он предназначен. И ассемблер бы не стал, не дает он сильного выигрыша в производительности. Я бы поставил ARM+ по USB заливал бы поток в комп - а уж дальше обрабатывал бы чем угодно. Вместо арма можно попытаться заюзать FT245.
А что за обработка? Может воткнуть ПЛИС мелкую (а то и не очень) и не связываться с компом?
Аватара пользователя
dx40
Нашел транзистор. Понюхал.
Сообщения: 182
Зарегистрирован: Вт июл 11, 2006 12:39:16
Откуда: Москва
Контактная информация:

Сообщение dx40 »

ЗЫЖ На счет оптопар. Есть оптопары предназначенные для высокоскоростной передачи данных - например H11L1, а есть предназначенные для других целей, например PC817.
Аватара пользователя
otshelnik86
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Сб мар 01, 2008 01:16:01
Контактная информация:

Сообщение otshelnik86 »

Тогда такой вопросик.
А с помощью чего лучше всего сопрягать? Мне еще надо с ТТЛ-логики 12 вольт подать сигналы на вход порта и при этом предусмотреть схемы защиты как компа, так и схемы, с которой подаются сигналы.
Аватара пользователя
dx40
Нашел транзистор. Понюхал.
Сообщения: 182
Зарегистрирован: Вт июл 11, 2006 12:39:16
Откуда: Москва
Контактная информация:

Сообщение dx40 »

Защиты от чего? Ставь опторазвязку, она обеспечит защиту порта.
H11L1 к стандартной TTL логике можно подключить межу питанием и выходом, через резистор 470-1000 Ом.
А откуда взялось 12В?
Аватара пользователя
otshelnik86
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Сб мар 01, 2008 01:16:01
Контактная информация:

Сообщение otshelnik86 »

dx40 писал(а):Я бы не стал использовать лпт-порт, не для того он предназначен. И ассемблер бы не стал, не дает он сильного выигрыша в производительности. Я бы поставил ARM+ по USB заливал бы поток в комп - а уж дальше обрабатывал бы чем угодно. Вместо арма можно попытаться заюзать FT245.
А что за обработка? Может воткнуть ПЛИС мелкую (а то и не очень) и не связываться с компом?


(пока писал ответ, не видел пришедшие сообщения)

Задача довольно сложная. Надо компом заменить старую аппаратуру (тренажер), которая сопрягается с другой аппаратурой. Делается это в рамках курсового проекта. Аппаратура старая и по сути, в ней реализован процессор. Процессор обрабатывает информацию параллельно и выдает ее обратно. Т.о. необходимо обеспечить параметры входных и выходных сигналов устройства. Система чисто цифровая, но работает параллельно. Как я уже говорил, тактовая частота примерно 750 кГц (такт 1,33 мкс), но, в процессе работы может уменьшатся в 2 раза в зависимости от режима работы (поступает с внешнего устройства). Моя задача расписать алгоритмы работы программы и составить схему сопряжения компа с другим устройством.
На комп должно поступать 8 сигналов параллельно, с него выходить 5, поэтому решено было использовать параллельный порт.
Частота высокая, поэтому, наверное, стоит использовать ассемблер, как самый быстрый.

ПЛИС был как вариант, но тогда по сути на нем надо будет реализовать целый процессор, здоровый кусок ОЗУ и т.д и т.п. + т.к. тренажер, то надо будет непрерывно менять прогу. Короче, работы в таком случае на целое КБ :)) .

Один из поступающих сигналов имеет напряжение "1" 12 вольт.
Всем огромное спасибо за оказанное внимание и ответы.
Аватара пользователя
otshelnik86
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Сб мар 01, 2008 01:16:01
Контактная информация:

Сообщение otshelnik86 »

dx40 писал(а):Защиты от чего? Ставь опторазвязку, она обеспечит защиту порта.
H11L1 к стандартной TTL логике можно подключить межу питанием и выходом, через резистор 470-1000 Ом.


:)) Забыл сказать. Время нарастания и спада импульсов составляет 80 нс. Т.о. предложенная оптопара, к сожалению, не подойдет, у нее время спада составляет 2 мкс, что сравнимо с длительностью тактовых импульсов :))
Аватара пользователя
otshelnik86
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Сб мар 01, 2008 01:16:01
Контактная информация:

Сообщение otshelnik86 »

Кстати, не подскажите какие-нибудь сайты с даташитами. Спасибо.
Аватара пользователя
dx40
Нашел транзистор. Понюхал.
Сообщения: 182
Зарегистрирован: Вт июл 11, 2006 12:39:16
Откуда: Москва
Контактная информация:

Сообщение dx40 »

Хммммм......
ЛПТ порт это хорошо, но только когда 5 на вход, 12 на выход. Тогда порт работает в режиме spp, легко и непринужденно программируется. А вот как обеспечить 8 вход 5 выход я представляю с трудом. Нужно использовать режим ECP но он не так прост как SPP. И я не уверен что это получится сделать.

Если нет желания разбираться с ПЛИС, ЮСБ, и прочими я бы воспользовался этим
http://www.ipc2u.ru/catalog/I/IP/10595.html
написал бы программу под дос, на паскале в dpmi.
Аватара пользователя
dx40
Нашел транзистор. Понюхал.
Сообщения: 182
Зарегистрирован: Вт июл 11, 2006 12:39:16
Откуда: Москва
Контактная информация:

Сообщение dx40 »

http://www.datasheet4u.com/ неплохой.
Почему не подойдет? Вполне. Скорость до мегагерца, фронты по 100нс, Самолично смотрел на осцилле на 500кГц - все идеально.
Ответить

Вернуться в «Интеграция с ПК»