Cкорость LPT
Cкорость LPT
Приветствую., собрал управляемую от LPT светодиодную матрицу 8Х8, в самом начале работы скорость у LPt почему то маленькая(скорость развертки не достаточная), примерно через полчаса скорость увеличивается и изображение рисуется нормально, с чем это может быть связанно?
- Вложения
-
- функциональная.JPG
- схема
- (170.05 КБ) 959 скачиваний
- Мышонок
- Друг Кота
- Сообщения: 3792
- Зарегистрирован: Чт сен 14, 2006 11:42:09
- Откуда: Обитаю на чердаке
- Контактная информация:
Работа параллельного порта определяется фактически двумя сигналами: Data Strobe "Данные на линиях готовы" - длительность 5 мкс и Asknowledge "Подтверждение приёма данных" - 10 мкс. Также сигнал Busy "Не могу принять данные" - сигнал приостановить передачу данных. В самом начале всего идёт сигнал Init "инициализация устройства" - (50-100) мкс, по этому сигналу устройство должно выдать сигнал Select "Готов", но обычно он сделан постоянным.
Считайте времена.
Считайте времена.
Память очень интересная штука: бывает так, что запомнишь одно, а вспомнишь другое...
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
мышонок писал(а):Работа параллельного порта определяется фактически двумя сигналами: 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 не поспоришь.
Отмечу основное: Windows, так же как и MS DOS (в девичестве CP/М) не являются ОС реального времени. Скорость параллельного порта (LPT) также не является строго фиксированной, в отличие от RS-232 (COM). Плюс ещё сама программа управления. В ней просто могут быть плохо организованы циклы и переходы.
Память очень интересная штука: бывает так, что запомнишь одно, а вспомнишь другое...
Судя по ряду тестов именно это и происходит, в прожке наврят ли, потому как она просто последовательно в цыкле загружает в порт номера светодиодов. в данном случае идеалньеым вариантом было бы туда в схему МК пихнуть типа AT90S2323 или 2313, и побайтно в него загружать номера диодов перед выводом. Спасибоз а помощь осталось только растолковать столь объёмистое(для него это вполне объёмистое
) объяснение учителю в оправдание такого глюка в начале работы моего курсача.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Можно попробовать задать для программы приоритет повыше, вплоть до RealTime :) При этом сама система может слегка притормаживать, но львиная доля процессорного времени будет выделяться именно программе с наивысшим приоритетом. Так же перед началом критического цикла дать команду системе реорганизовать память, сбросить буфера из памяти на винт и т.п. В WinXP проблемы распределения времени решены лучше, чем в Win9x - стОит запускать программу именно под хрюшей. Наконец, в программе надо отказаться от процедур sleep для организации задержек - именно из-за них задержки и плавают.
100% избавления от проблемы эти меры не дадут, но могут несколько сгладить отрицательные эффекты.
100% избавления от проблемы эти меры не дадут, но могут несколько сгладить отрицательные эффекты.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- otshelnik86
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Сб мар 01, 2008 01:16:01
- Контактная информация:
вопрос в тему:
Есть задача. На вход компа посупает тактовая последовательность с длительностью такта 1,33 мкс (750 кГц). За этот период времени процессор должен обработать информацию. Я решил использовать параллельный LPT порт, поскольку информация поступает параллельно (в соответствии с вышеприведенной частотой). Программное обеспечение будет писаться на Assembler'е, поскольку высокая тактовая частота.
Теперь вопросы: сможет ли LPT порт обмениваться информацией с такой скоростью и как лучше сопрячь его с ТТЛ логикой? Сможет ли отработать, например, оптопара? Да и в целом, сможет ли процессор обрабатывать информацию за такой промежуток времени?
В целом поставленная задача очень тяжелая и нужен совет практика, поскольку у меня опыта нет, а делать надо....
Спасибо!
Есть задача. На вход компа посупает тактовая последовательность с длительностью такта 1,33 мкс (750 кГц). За этот период времени процессор должен обработать информацию. Я решил использовать параллельный LPT порт, поскольку информация поступает параллельно (в соответствии с вышеприведенной частотой). Программное обеспечение будет писаться на Assembler'е, поскольку высокая тактовая частота.
Теперь вопросы: сможет ли LPT порт обмениваться информацией с такой скоростью и как лучше сопрячь его с ТТЛ логикой? Сможет ли отработать, например, оптопара? Да и в целом, сможет ли процессор обрабатывать информацию за такой промежуток времени?
В целом поставленная задача очень тяжелая и нужен совет практика, поскольку у меня опыта нет, а делать надо....
Спасибо!
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
мне кажется, что это если возможно, то потребует серьёзнейших усилий, в частности знания ядра Windows, WDM-драйверов и т.п. При этом все равно гарантии того, что сигналы не будут пропущены не будет. Другое дело - написать программу под DOS и запустить ее монопольно, т.е. без загрузки Windows. Но и в этом случае проблем будет хоть отбавляй.
LPT сопрягать никак не надо, его сигналы ТТЛ-совместимы. На такой частоте порт сможет работать (теоретически), однако суметь с этим справиться будет сложно - см.выше. Оптроны можно подключать к линиям порта напрямую (если ток не превысит 10 мА), однако оптроны, работающие на такой частоте - редкость, еще поискать придется.
LPT сопрягать никак не надо, его сигналы ТТЛ-совместимы. На такой частоте порт сможет работать (теоретически), однако суметь с этим справиться будет сложно - см.выше. Оптроны можно подключать к линиям порта напрямую (если ток не превысит 10 мА), однако оптроны, работающие на такой частоте - редкость, еще поискать придется.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- dx40
- Нашел транзистор. Понюхал.
- Сообщения: 182
- Зарегистрирован: Вт июл 11, 2006 12:39:16
- Откуда: Москва
- Контактная информация:
Я бы не стал использовать лпт-порт, не для того он предназначен. И ассемблер бы не стал, не дает он сильного выигрыша в производительности. Я бы поставил ARM+ по USB заливал бы поток в комп - а уж дальше обрабатывал бы чем угодно. Вместо арма можно попытаться заюзать FT245.
А что за обработка? Может воткнуть ПЛИС мелкую (а то и не очень) и не связываться с компом?
А что за обработка? Может воткнуть ПЛИС мелкую (а то и не очень) и не связываться с компом?
- otshelnik86
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Сб мар 01, 2008 01:16:01
- Контактная информация:
- otshelnik86
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Сб мар 01, 2008 01:16:01
- Контактная информация:
dx40 писал(а):Я бы не стал использовать лпт-порт, не для того он предназначен. И ассемблер бы не стал, не дает он сильного выигрыша в производительности. Я бы поставил ARM+ по USB заливал бы поток в комп - а уж дальше обрабатывал бы чем угодно. Вместо арма можно попытаться заюзать FT245.
А что за обработка? Может воткнуть ПЛИС мелкую (а то и не очень) и не связываться с компом?
(пока писал ответ, не видел пришедшие сообщения)
Задача довольно сложная. Надо компом заменить старую аппаратуру (тренажер), которая сопрягается с другой аппаратурой. Делается это в рамках курсового проекта. Аппаратура старая и по сути, в ней реализован процессор. Процессор обрабатывает информацию параллельно и выдает ее обратно. Т.о. необходимо обеспечить параметры входных и выходных сигналов устройства. Система чисто цифровая, но работает параллельно. Как я уже говорил, тактовая частота примерно 750 кГц (такт 1,33 мкс), но, в процессе работы может уменьшатся в 2 раза в зависимости от режима работы (поступает с внешнего устройства). Моя задача расписать алгоритмы работы программы и составить схему сопряжения компа с другим устройством.
На комп должно поступать 8 сигналов параллельно, с него выходить 5, поэтому решено было использовать параллельный порт.
Частота высокая, поэтому, наверное, стоит использовать ассемблер, как самый быстрый.
ПЛИС был как вариант, но тогда по сути на нем надо будет реализовать целый процессор, здоровый кусок ОЗУ и т.д и т.п. + т.к. тренажер, то надо будет непрерывно менять прогу. Короче, работы в таком случае на целое КБ
Один из поступающих сигналов имеет напряжение "1" 12 вольт.
Всем огромное спасибо за оказанное внимание и ответы.
- otshelnik86
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Сб мар 01, 2008 01:16:01
- Контактная информация:
dx40 писал(а):Защиты от чего? Ставь опторазвязку, она обеспечит защиту порта.
H11L1 к стандартной TTL логике можно подключить межу питанием и выходом, через резистор 470-1000 Ом.
- otshelnik86
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Сб мар 01, 2008 01:16:01
- Контактная информация:
- dx40
- Нашел транзистор. Понюхал.
- Сообщения: 182
- Зарегистрирован: Вт июл 11, 2006 12:39:16
- Откуда: Москва
- Контактная информация:
Хммммм......
ЛПТ порт это хорошо, но только когда 5 на вход, 12 на выход. Тогда порт работает в режиме spp, легко и непринужденно программируется. А вот как обеспечить 8 вход 5 выход я представляю с трудом. Нужно использовать режим ECP но он не так прост как SPP. И я не уверен что это получится сделать.
Если нет желания разбираться с ПЛИС, ЮСБ, и прочими я бы воспользовался этим
http://www.ipc2u.ru/catalog/I/IP/10595.html
написал бы программу под дос, на паскале в dpmi.
ЛПТ порт это хорошо, но только когда 5 на вход, 12 на выход. Тогда порт работает в режиме spp, легко и непринужденно программируется. А вот как обеспечить 8 вход 5 выход я представляю с трудом. Нужно использовать режим ECP но он не так прост как SPP. И я не уверен что это получится сделать.
Если нет желания разбираться с ПЛИС, ЮСБ, и прочими я бы воспользовался этим
http://www.ipc2u.ru/catalog/I/IP/10595.html
написал бы программу под дос, на паскале в dpmi.
- dx40
- Нашел транзистор. Понюхал.
- Сообщения: 182
- Зарегистрирован: Вт июл 11, 2006 12:39:16
- Откуда: Москва
- Контактная информация:
http://www.datasheet4u.com/ неплохой.
Почему не подойдет? Вполне. Скорость до мегагерца, фронты по 100нс, Самолично смотрел на осцилле на 500кГц - все идеально.
Почему не подойдет? Вполне. Скорость до мегагерца, фронты по 100нс, Самолично смотрел на осцилле на 500кГц - все идеально.