Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Работа с таймером (помогите пожалуйста) Добавлено: 18.05.04 00:21  

Автор вопроса:  skavolini

Подскажите пожалуйста, можно ли в Visual Basice в элементе

управления timer установить свойство interval < 1 мс?

Пишу программу в которой используеться 2 пина LPT порта.

На них с очень высокой частотой необходимо подавать двоичный

сигнал.

С помощью цикла не предлагать (нужно строго регулировать

частоту).

Ответить

  Ответы Всего ответов: 5  

Номер ответа: 1
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #1
Добавлено: 18.05.04 01:24

Если только попробовать API таймер (SetTimer, KillTimer), да и то не уверен я что такая частота будет, и вообще в NT все таймеры врут, так что надо бы как нибудь это все дело отслеживать... а что если использовать цикл, но вот такой:

Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)

 

do
'---------------------------------------
'-------- Code -------------------+
'---------------------------------------
Sleep(1&)
loop

Ответить

Номер ответа: 2
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #2
Добавлено: 18.05.04 02:59

Но пауза опять-таки меньше миллисекнды не получиться!

Интересный вопрос. Возможно здесь только через АСМ получиться.

А неужели надо столь быстро, но при этом нельзя вообще без паузы?

На самый крайняк могу посоветовать ввести переменную 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))))))))

Ответить

Номер ответа: 3
Автор ответа:
 skavolini



Вопросов: 1
Ответов: 1
 Профиль | | #3 Добавлено: 18.05.04 19:49

Огромное спасибо за помощь. Даже не надеялся, что кто-то ответит на

такой бредовый вопрос.

Хотел бы немного уточнить его (извините за первоначально неправильную

формулировку)

Есть 2 компьютера. Необходимо передавать через 2 информационных

пина (например 2 и 3) LPT информацию со скоростью 19600 кбит/с.

Информация береться из ранее созданного (с помощью фунции Rnd)

dat файла состоящего из 1 и 0. Хотел использовать для записи в порт

и опроса порта функцию таймера. Но выяснилось, что минимальный

интервал таймера 1мс, а это 1 кбит/с с одного пина, 2 кбит/с с 2-х.

Маловато. Может есть какие то еще способы заменить таймер в данных

условиях. В принципе идея цикла с задержкой (задержка тоже должна

гибко регулироваться) мне нравиться, но не возникнет ли

рассинхронизация? Т.о. дело не в точности измерения частоты,

а в синхронизации циклов на приемной и передающей стороне.Скорее всего

буду использовать еще пин №6 для синхронизации. Не знаю получиться

ли организовать это все програмно. Буду очень признателен

за любые советы и идеи по поводу решения данной проблемы, так как

собственные познания в программировании не позволяют еще решать

такие задачи, очень надеюсь на Вашу дальнейшую помощь.

Ответить

Номер ответа: 4
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #4
Добавлено: 18.05.04 21:40

Извини, но в работе с портами я ещё ничего не пробовал. А как ты посылаешь и принимаешь данные?

А для увеличения скорости передачи могу посоветовать использовать все пины, что есть и лишь один для синхронизации.

По ходу действительно довольно бредово синхронизировать пытаясь обеспечить одну и ту же частоту на двух компах. И вообще я удивлён, что приходящие данные не выстраиваются в очередь.

Т.е. вопрос сводиться к способу работы с портом.

P.S. отвечай лучше на мыло - тема уже ушла в офф...

neco777@rambler.ru

Ответить

Номер ответа: 5
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #5
Добавлено: 22.05.04 00:59
Благодаря многозадачности Windows, из циклов ничего хорошего не получится. Если нужна столь строгая синхронизация, следует писать драйвер для реального режима и использовать для тайминга счетчик тактов RDTSC

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам