Вверх ↑
Этот топик читают: Гость
Ответов: 2057
Рейтинг: 28
#1: 2006-06-24 22:18:36 ЛС | профиль | цитата
Таймер на основе аппаратного таймера компьютера.
Автор tsdimа.
карма: 1

0
файлы: 1timerhr.rar [1.6KB] [462]
vip
#1.1контекстная реклама от партнеров
Ответов: 5227
Рейтинг: 588
#2: 2008-10-10 19:13:01 ЛС | профиль | цитата
необходимость есть конечно но точность удручающая вот схема которую использовал для проверки

code_10239.txt

а вот результат

------------ Дoбавленo:

да и в такой фигня какая то


#sha
Add(MainForm,13345305,105,63)
{
Left=20
Top=105
Width=140
}
Add(TimerHR,15372041,168,133)
{
Interval=1
AutoStop=1000
Point(onStop)
link(onTimer,7666267:doNext,[])
link(onStop,13612102:doEvent1,[(216,146)(216,188)])
}
Add(Counter,7666267,294,133)
{
Max=10000
}
Add(DoData,7641127,294,182)
{
link(onEventData,7192638:doAdd,[])
link(Data,7666267:Count,[])
}
Add(Timer,3872553,105,133)
{
Interval=3000
link(onTimer,15372041:doTimer,[])
}
Add(Hub,13612102,231,182)
{
link(onEvent1,7641127:doData,[])
link(onEvent2,7666267:doReset,[(279,195)(279,153)])
}
Add(ListBox,7192638,357,182)
{
Left=10
Top=10
Width=105
Height=220
AddType=1
}

------------ Дoбавленo:

вот попытка сделать таймер на штатных компонентах, обжорству процессора можно только позавидовать


#sha
Add(MainForm,13345305,140,182)
{
Left=20
Top=105
Width=382
Height=144
link(onCreate,6952573:doStart,[])
}
Add(Repeat,3928759,245,196)
{
Op1=Integer(1)
Op2=Integer(2)
Check=1
link(onRepeat,8182911:doEvent1,[])
}
Add(TimeCounter,5698299,420,196)
{
Precision=1
link(onStop,10293752:doValue,[])
}
Add(IndexToChanel,763531,357,203)
{
Point(Index)
link(onEvent1,5698299:doStop,[])
link(onEvent2,5698299:doStart,[(405,216)(405,202)])
link(Index,4620755:Count,[])
}
Add(Hub,8182911,301,196)
{
link(onEvent1,4620755:doNext,[(345,202)(345,132)])
link(onEvent2,763531:doEvent,[])
}
Add(Counter,4620755,357,126)
{
Default=100
Point(doMax)
}
Add(TrackBar,14746205,245,147)
{
Left=10
Top=10
Width=155
Max=200
Min=1
TickCount=10
Position=100
link(onPosition,4620755:doMax,[])
}
Add(Label,6451841,469,252)
{
Left=200
Top=15
link(Text,10293752:Value,[])
}
Add(Thread,6952573,196,196)
{
Delay=0
FastStop=0
link(onExec,3928759:doRepeat,[])
}
Add(Memory,10293752,469,203)
{
}
Add(Timer,13024115,420,252)
{
link(onTimer,6451841:doText,[])
}

карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
файлы: 2code_10239.txt [718B] [472], timer.png [3.8KB] [754]
Ответов: 2125
Рейтинг: 159
#3: 2008-10-10 22:42:57 ЛС | профиль | цитата
Там ошибка в комментарии к свойству, Interval задаётся в микросекундах!
Неудивительно, что винды не смогли соблюдать интервал в 1 микросекунду
карма: 1

0
Ответов: 2057
Рейтинг: 28
#4: 2008-10-10 23:25:07 ЛС | профиль | цитата
tsdima писал(а):
Там ошибка в комментарии к свойству, Interval задаётся в микросекундах!

Подправил и перезолил.
карма: 1

0
Ответов: 5227
Рейтинг: 588
#5: 2008-10-11 07:35:37 ЛС | профиль | цитата
tsdima, я в курсе что в микросекундах, они то мне и нужны, более менее приближённые результаты можно получить от 20 микросекунд.

винда, мать её, неслушает ни фига!
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 8888
Рейтинг: 823
#6: 2008-10-11 08:50:43 ЛС | профиль | цитата
andrestudio, посмотреть элемент Спать не судьба? вот что там есть:
var sp,cnt:int64;
..
..
QueryPerformanceCounter(sp); //Кол. тиков от момента включения компьютера
QueryPerformanceFrequency(cnt); //Частота процессора
Ну хоть наносекунды можно мерять
карма: 19

0
Ответов: 5227
Рейтинг: 588
#7: 2008-10-11 11:21:07 ЛС | профиль | цитата
Леонид, мне нужны стробы в микросекундах а не задержка. Да и вот такая схема просто вырубается без всяких и баста

code_10254.txt
------------ Дoбавленo:

хотя если зделать задержку больше то работает с глюками


#sha
Add(MainForm,575589,133,168)
{
Left=20
Top=105
}
Add(Sleep,12112062,280,217)
{
Delay=10000
link(onSleep,888246:doEvent1,[])
}
Add(Hub,15481309,231,217)
{
InCount=2
OutCount=1
link(onEvent1,12112062:doSleepMks,[])
}
Add(Button,10897721,133,217)
{
Left=30
Top=25
link(onClick,8093387:doStart,[])
}
Add(Thread,8093387,182,217)
{
Delay=0
FastStop=0
BusyEvent=1
link(onExec,15481309:doEvent1,[])
}
Add(Counter,1707620,385,217)
{
Max=10000
link(onNext,13407222:doText,[])
}
Add(Hub,888246,329,217)
{
link(onEvent1,1707620:doNext,[])
link(onEvent2,15481309:doEvent2,[(373,230)(373,200)(220,200)(220,230)])
}
Add(Label,13407222,434,217)
{
Left=125
Top=25
}

карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
файлы: 1code_10254.txt [787B] [446]
Ответов: 8888
Рейтинг: 823
#8: 2008-10-11 11:38:24 ЛС | профиль | цитата
andrestudio, в схемах кольцо вокруг элемента Sleep, она и должна вылетать.
Стробы в микросекундах тоже чреваты наложением следующего строба на недовыполненную ветку программы и вылетанием
А вот измерить эти наносекунды можно через IC или нестандартный компонент с помощью вышеназванных функций можно.
карма: 19

0
Ответов: 5227
Рейтинг: 588
#9: 2008-10-11 11:58:13 ЛС | профиль | цитата
Леонид, всем известо что в программировании я даун , мне нужны стробы стабильные хотябы с 10 микросекунд, но для винды скорей всего это не реально (хотя есть драйвера которые работают в windows в real time ), может у Вас есть ещё соображения по этому поводу
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 8888
Рейтинг: 823
#10: 2008-10-11 12:42:09 ЛС | профиль | цитата
andrestudio, да, для Windows это невозможно, хорошо мне пояснил Galkov, а я проверял, Фома неверующий, через два порта - сигнал подавал с СОМ, а принимал через LTP, записывал и потом смотрел - задержки были и по 20 и по 40 миллисек и больше, уже и не помню, давно было
В real time только через буфер, с задержкой на размер буфера, звук, видео.
карма: 19

0
Ответов: 5227
Рейтинг: 588
#11: 2008-10-11 17:54:55 ЛС | профиль | цитата
мдя, иллюзии проветрились, всё ухожу в монастырь, поведаем далайламе про HiAsm
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 2125
Рейтинг: 159
#12: 2008-10-13 22:51:26 ЛС | профиль | цитата
andrestudio писал(а):
более менее приближённые результаты можно получить от 20 микросекунд

Вообще-то, более менее точные результаты можно получить лишь от 1000 микросекунд
Этот компонент создавался несколько с другой целью: он должен вырабатывать некое определённое количество событий в еденицу времени, причём это количество должно было как можно более точно соблюдаться, и чем больше промежуток времени - тем точнее. Например, нужно соблюдать 1.23456789 событий за 10 миллисекунд, тогда в течении 100 миллисекунд будет 12 событий, в секунду 123, за 100 секунд - 12345 событий.
Один товарищ никак не мог без такого точного таймера (в котором частота задавалась бы не целым числом) организовать плавное движение картинки под определённым углом
------------ Дoбавленo:

andrestudio писал(а):
стробы в микросекундах

Не секрет, что винда - это не real time OS. Твой процесс она запросто может остановить на пару сотен миллисекунд, сколько стробов ты потеряешь за это время?
------------ Дoбавленo:

Тут надо использовать какие-то приблуды, самая простая из которых - звуковая карта...
------------ Дoбавленo:

andrestudio писал(а):
стабильные хотябы с 10 микросекунд

Мда, 100КГц даже не всякая звуковуха потянет...
карма: 1

0
Ответов: 5227
Рейтинг: 588
#13: 2008-10-15 05:24:54 ЛС | профиль | цитата
tsdima, я осознал что это не реально сделать в WINDOWS, делать нечего, буду делать апаратно.
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
13
Сообщение
...
Прикрепленные файлы
(файлы не залиты)