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

Вниз

Не могу получить от таймера интервал 20 мс   Найти похожие ветки 

 
artog   (2001-10-04 07:56) [0]

Доброго всем времени суток.
Мне необходимо выводить определенный байт в COM порт
с периодом в 20 милисекунд. Бросаю на форму таймер:

//Вызывается каждые 20 мс
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := false;
SendByte(mybyte); //посылает байт в COM порт
Timer1.Enabled := true;
end;

Байт выводится, но минимальный период между байтами
получается 45 мс при любых установках таймера меньших 45 мс.
(Проверял осциллографом)
Может кто подскажет как решить данную проблему?
Программа тестировалась на 3 различных компьютерах:
от P - 100 до P II - 800.


 
Mbo   (2001-10-04 09:15) [1]

Системный таймер Windows считает с частотой 18 герц (55 мс).
Надо использовать какой- нибудь мультимедийный или поищи
High Resolution Timer (их много, используют обычно такты процессора)


 
AKV   (2001-10-04 09:48) [2]

1. Вроде на торри был компонент-таймер позволяющий бить до 1мс
2. Используя АПИ функции:
- QueryPerformanceCounter (текущее значение high-precision counter)
- QueryPerformanceFrequency (частота high-precision counter)
можно реализовать отдельный thread тогда периодичность счета пойдет на дцать мкс

P.s:Если сам не допрешь могу поискать где то валялся компонент реализованный на: QueryPerformanceCounter и QueryPerformanceFrequency

Це усе.







 
Delphimun   (2001-10-04 11:29) [3]

Можно попробовать вместо таймера написать две процедуры:
procedure tform1.a;
begin
SendByte(mybyte);
b;
end;
procedure tform1.b;
begin
sleep(19);
a;
end;
end.
Хоть и будет небольшая погрешность, но почти точно!


 
Ol   (2001-10-04 11:34) [4]

Я работал с таймером и добивался вызова события таймера и через 10 мс.
Но проблема в том, что выдержать заданный интервал с точностью до мс
ты не сможешь!!!!!


 
Dmitri   (2001-10-04 12:00) [5]

По поводу АПИ QueryPerformanceCounter / QueryPerformanceFrequency:
под NT точность порядка 1 мкс (используется стандартный программируемый таймер PC), но это для замера.

используя асм, померять с 1милисек время выполнения некоторой функции в Delphi:
function GetTicks: Int64; register;
asm
dw 310Fh
end;

и ещё может понадобится:
http://www.prodelphi.de/indexpd.htm
ProDelphi and ProKylix are tools to measure the runtime of programs written in Delphi/Kylix Object Pascal. First successful industrial usage of ProDelphi was in February 1998. Since then ProDelphi has been permanently improved, also customer ideas were integrated. ProKylix is the Kylix version of ProDelphi.
The principle of source instrumenting, the sophisticated measurement correction algorithym and the granularity of 1 CPU-cycle guarantee an outstanding measurement accuracy. Even very small or multiple nested functions are measured precisely...


 
AKV   (2001-10-04 14:15) [6]

Создается Thread
в котором:
1. постоянно замеряется текущее состояние Perfomance Counter
2. сравнивается с состоянием на момент последнего вызова требуемой процедуры,
3. получаем разницу счетчика если превысила требуемый интервал то
- либо из под самого threada делаем наше грязное дело
- либо посылаем собственное сообщение окну WM_HREN_C_MASLOM и обрабатываем его
- либо вызываем требуемую процедуру из threada
4. Фиксируем вызов и сначала

Я примерно таким образом управлял графопостроителем 75 года выпуска подключенным к LPT причем приходилось изменять частоту управления
в пределах от 200 6000 Гц для реализации частотного управления шаговыми
двигателями оного на D3, под W95,W98 + sea of Beer


 
AKV   (2001-10-04 15:14) [7]

Я конечно кррайне сорри но нашел я енто в торри:

http://www.carlosb.com/downloads/thdtimer.zip
Components>Date and Time>Timers
Threaded Timer v.1.2a FWS 6 Kb 26 Jan 2001
By Carlos Barbosa. This component has the same functionality of the default Timer component, but it provides a real resolution of 1 milisecond.
Fully functional
Source: Included


Download: D2 D3 D4 D5


Сам не смотрел


 
artog   (2001-10-05 19:12) [8]

Всем огромное спасибо за помощь!


 
Таймер   (2001-10-06 02:19) [9]

2 Ol
Я тебя, конечно пряздрявляю, но сомневаюсь, что енто ты " добился" "и через 10 мс". Енто NT добился, а не ты.


 
Wizard_Ex   (2001-10-06 12:45) [10]

Под NT системный таймер гораздо точнее.
если 50 мс то 50 мс и будет, а под Win9X эти 50 мс реально могут растянуться на сто, а то и 200 мс, зависит от скорости железа, от загруженности системы


 
Таймер   (2001-10-07 04:02) [11]

Моя не знает про Винтукей. Моя знает про 9х и NT Но и на NT моя может расстянуться на NNN мс. Особливо если некоторые другие захотят Real_Time.


 
Anatoly Podgoretsky   (2001-10-07 13:08) [12]

Это и на RealTime системах не будет, если приоритет низкий, то управление можешь получить немного после.



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

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

Наверх




Память: 0.47 MB
Время: 0.003 c
1-66238
~(;_;)~
2001-12-28 14:48
2002.01.21
Как сделать какой-то файл, скажем – «C: Test.cnf» заблокированным?!


6-66327
Юра
2001-10-29 13:18
2002.01.21
О TIdMappedPortTCP


14-66362
J_S
2001-11-22 21:45
2002.01.21
http://delphi.mastak.com/prikol/prayer.htm


1-66308
Андре
2002-01-03 15:07
2002.01.21
Закрытие формы в onCreate


7-66383
Dmitry V. Averuanov
2001-10-04 11:35
2002.01.21
Не удается передать Tbitmap в качестве параметра...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский