Страница: 1 |
Подскажите пожалуйста, можно ли в Visual Basice в элементе управления timer установить свойство interval < 1 мс? Пишу программу в которой используеться 2 пина LPT порта. На них с очень высокой частотой необходимо подавать двоичный сигнал. С помощью цикла не предлагать (нужно строго регулировать частоту).
Если только попробовать API таймер (SetTimer, KillTimer), да и то не уверен я что такая частота будет, и вообще в NT все таймеры врут, так что надо бы как нибудь это все дело отслеживать... а что если использовать цикл, но вот такой: Но пауза опять-таки меньше миллисекнды не получиться! Интересный вопрос. Возможно здесь только через АСМ получиться. А неужели надо столь быстро, но при этом нельзя вообще без паузы? На самый крайняк могу посоветовать ввести переменную pause. И это решит все проблемы. *...шорох по рядам - "во дурак!"...* Нет надо ещё код написать. 8))))))))))))))))) Опытным путём определяешь нужное значение для твоего проца: ================== .......твой код.......... minipause ================== public sub minipause() for i=1 to pause:k=1:next i ' очень маленькая пауза. end sub Замер времени такой паузы производишь в цикле: t1=timer for t=1 to 50 minipause next i t2=timer realpausetime=(t2-t1)/50 Тогда можно и одну миллионную выждать, имхо. Однако, чтоб енто всё канало на других компах, придётся и pause определять опытным путём: realpausetime=100:pause=100 do while realpausetime>needpause ' *твоя вычисленная пауза* pause=pause-1 t1=timer for t=1 to 50 minipause next i t2=timer realpausetime=(t2-t1)/50 loop хотя конечно совсем точно не получится, поэтому ты, наверное, и писал в теме "цикла не предлагать"? 8) Но ведь надо как-то выходить из положения. Ха! Представляю себе, если этот код нужен, чтобы подавать частоту, к примеру, на аппарат исскуственной жизни. Тогда, пожалуй, с нагревом проца, шансы больного на выживание могут сильно уменьшится. 8) Хотя такого рода частоты генерируются не через компы (точнее не через микропроцессоры), т.к. слишком мала точность, точнее стабильность точности. К примеру, скорость (частота) вращения асинхронных двигателей регулируется через частоту вращения магнитного поля статора, которая, ест-но, связана с частотой питающего напряжения. Вот его как раз-таки и генерируют такими генераторами, созданными на основе тиристорных преобразователей (в данном случае почему-то называемых инверторами). Просто я сам тоже подумывал такую феню замутить (всмысле через комп), но теперь думаю, что если уж и возлагать на комп функцию управления такими процессами, так только в области регулирования настроек ТПшника (все настройки, как правило, осуществляются постоянными малыми напряжениями, которые не столь чувствительны к грубостям персональных компов). P.S. всё это в порядке бреда. Сам не испытывал и вам не советую... 8)))))))) Огромное спасибо за помощь. Даже не надеялся, что кто-то ответит на такой бредовый вопрос. Хотел бы немного уточнить его (извините за первоначально неправильную формулировку) Есть 2 компьютера. Необходимо передавать через 2 информационных пина (например 2 и 3) LPT информацию со скоростью 19600 кбит/с. Информация береться из ранее созданного (с помощью фунции Rnd) dat файла состоящего из 1 и 0. Хотел использовать для записи в порт и опроса порта функцию таймера. Но выяснилось, что минимальный интервал таймера 1мс, а это 1 кбит/с с одного пина, 2 кбит/с с 2-х. Маловато. Может есть какие то еще способы заменить таймер в данных условиях. В принципе идея цикла с задержкой (задержка тоже должна гибко регулироваться) мне нравиться, но не возникнет ли рассинхронизация? Т.о. дело не в точности измерения частоты, а в синхронизации циклов на приемной и передающей стороне.Скорее всего буду использовать еще пин №6 для синхронизации. Не знаю получиться ли организовать это все програмно. Буду очень признателен за любые советы и идеи по поводу решения данной проблемы, так как собственные познания в программировании не позволяют еще решать такие задачи, очень надеюсь на Вашу дальнейшую помощь. Извини, но в работе с портами я ещё ничего не пробовал. А как ты посылаешь и принимаешь данные? А для увеличения скорости передачи могу посоветовать использовать все пины, что есть и лишь один для синхронизации. По ходу действительно довольно бредово синхронизировать пытаясь обеспечить одну и ту же частоту на двух компах. И вообще я удивлён, что приходящие данные не выстраиваются в очередь. Т.е. вопрос сводиться к способу работы с портом. P.S. отвечай лучше на мыло - тема уже ушла в офф... Страница: 1 |
Вопрос: Работа с таймером (помогите пожалуйста)
Добавлено: 18.05.04 00:21
Автор вопроса: skavolini
Ответы
Всего ответов: 5
Номер ответа: 1
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #1
Добавлено: 18.05.04 01:24
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
'---------------------------------------
'-------- Code -------------------+
'---------------------------------------
Sleep(1&)
loop
Номер ответа: 2
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #2
Добавлено: 18.05.04 02:59
Номер ответа: 3
Автор ответа:
skavolini
Вопросов: 1
Ответов: 1
Профиль | | #3
Добавлено: 18.05.04 19:49
Номер ответа: 4
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #4
Добавлено: 18.05.04 21:40
Номер ответа: 5
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #5
Добавлено: 22.05.04 00:59
Благодаря многозадачности Windows, из циклов ничего хорошего не получится. Если нужна столь строгая синхронизация, следует писать драйвер для реального режима и использовать для тайминга счетчик тактов RDTSC