1nd1g0, мне кажется, что под "реальным временем" имеется в виду отображение на форме некой цифири, показывающей время, прошедшее с предыдущего импульса, и обновляющейся чаще, чем приходят эти импульсы (напр., если между импульсами проходит около секунды, то на форме показывается число прошедших миллисекунд, изменяющееся каждые 100 мсек - быстрее всё равно не углядишь)
Этот топик читают: Гость
|
Ответов: 5446
Рейтинг: 323
|
|||
| карма: 1 |
|
|
Ответов: 12
Рейтинг: 1
|
|||
|
Реальное время, т.е. как прошел сигнал, сразу запустился секундомер и перед глазами "бегут циферки", потом опять пришел сигнал и по этому сигналу уже таймер должен остановиться. Точность должна быть до миллисекунд.
Мне кажется, если использовать таймер, то точность будет страдать из-за пары или тройки итераций. Леонид, сигнал с порта будет больше 20 миллисекунд 100%. |
|||
| карма: 0 |
|
|
Ответов: 3889
Рейтинг: 362
|
|||
|
bro, Вот, я Вам на скорую руку написал код, получающий значение текущего системного таймера (в InlineCode):
Думаю, точнее вы уже не найдёте. |
|||
| карма: 1 |
|
|
Ответов: 5446
Рейтинг: 323
|
|||
|
[offtop]
Однако, угадал... [/offtop] |
|||
| карма: 1 |
|
|
Ответов: 3889
Рейтинг: 362
|
|||
|
bro, схему чтобы "бежали циферки" делаете отдельно на таймере, благо считать с нуля, шаг известен и точность совершенно не важна, а финальный результат показываете по TimeCounter (он основан на том же таймере, что и мой IC выше, точность до единиц мсек).
|
|||
| карма: 1 |
|
|
Ответов: 8976
Рейтинг: 825
|
|||
|
1nd1g0, однако не угадал! Сколько раз говорить, что системный таймер имеет шаг 1/64 сек! Напишите IC на тики
------------ Дoбавленo в 22.58: используя QueryPerformanceCounter, QueryPerformanceFrequency |
|||
| карма: 19 |
|
|
Ответов: 12
Рейтинг: 1
|
|||
|
1nd1g0, а каким образом работает приведенный код выше? Я запустил и посмотрел. Начинает считать с 369xxxxx и опять вроде секунды считаются.
А каким образом можно сделать через TimeCounter? Хорошо, пусть даже без дисплея. Схема должна работать так: я нажимаю кнопку ожидание сигнала и после поступления сигнала должен запускаться таймер и считать. Может сделать это через условия? Т.е. 1ка с кнопки = 1ке с lpt или это не так? |
|||
| карма: 0 |
|
|
Ответов: 3889
Рейтинг: 362
|
|||
|
Леонид писал(а): системный таймер имеет шаг 1/64 секПардон, но я использую так называемый "мультимидийный" таймер и тесты говорят о погрешности в единицы миллисекунд (а не в 15): code_24819.txt ------------ Дoбавленo в 23.11: bro, с нижней точки того InlineCode в любой момент времени можно получить значение текущего мультимидийного таймера, сейчас ещё более точную версию по заказу Леонида попробую изобразить. ------------ Дoбавленo в 23.14: bro писал(а): А каким образом можно сделать через TimeCounter? Опрашиваете в вечном цикле порт, при появлении нужного бита запускаете счётчик первой точкой, остановите - второй. Проблема только - очень часто опрашивать порт. |
|||
| карма: 1 |
| ||
| файлы: 1 | code_24819.txt [989B] [142] |
|
Ответов: 8976
Рейтинг: 825
|
|||
|
bro, работая с LPT портом надо иметь ввиду, что время от времени Windows имеет обыкновение опрашивать порт,
------------ Дoбавленo в 23.18: прерывая работу других программ на 20--40 мсек и Вы можете пропустить Ваш сигнал. Умный Galkov научил: ------------ Дoбавленo в 23.18: перед запуском Windows воткнуть свой разъём с заземлённой ногой "Ошибка" (насколько помню №15), ------------ Дoбавленo в 23.18: при запуске Windows десяток раз обратится к порту, получит Ошибку и вычеркнит его из своего оборудования и более обращатся к нему не будет. ------------ Дoбавленo в 23.21: 1nd1g0, в Вашей схеме выставте интервал 1 мсек и запишите сотню полученных значений и посмотрите на них не торопясь и анализируя |
|||
| карма: 19 |
|
|
Ответов: 3889
Рейтинг: 362
|
|||
|
Леонид, не подменяйте понятия, получив результаты, отстоящие друг от друга на 15-30 мсек вы лишь докажете ограничение срабатывания события таймера в системе. Это никак не связано с точностью timeGetTime, который я использовал (и про который говорил).
Однако, исключительно интереса ради я таки сделал вариант IC, выдающий данные с точностью до микросекунд. Чтобы было Это к заказу вида Леонид писал(а): Напишите IC на тики
------------ Дoбавленo в 22.58: используя QueryPerformanceCounter, QueryPerformanceFrequency |
|||
| карма: 1 |
|
|
Ответов: 8976
Рейтинг: 825
|
|||
|
1nd1g0, ну здравствуйте, Вы же в Вашей схемке поставили MMTimer, который выдаёт 1000 событий в секунду при уставке 1 мсек. И получаем из Вашего IC 1000 значений в секунду, но 15--16 подряд одинаковых
------------ Дoбавленo в 23.48: 1nd1g0, ну здравствуйте, Вы же в Вашей схемке поставили MMTimer, который выдаёт 1000 событий в секунду ------------ Дoбавленo в 23.50: 1nd1g0, совсем другое дело (просто я не переношу неточностей ------------ Дoбавленo в 23.51: -- про заказ вида.... |
|||
| карма: 19 |
|
|
Ответов: 3889
Рейтинг: 362
|
|||
|
Леонид писал(а): 5--16 подряд одинаковыхУ разных систем - разная точность таймеров, выше я давал схему, где нарочно опрашиваю timeGetTime с разрывом в 2-3 мсек и значения не совпадают (на моей системе). А про MMTimer, я просто не сразу понял, что Вы про него (я "мультимедийным" назвал timeGetTime, mea culpa), вы же в той же фразе просили перейти на тики, что недвусмысленно намекало, что речь о точности timeGetTime, а он относительно точен (на разных системах может очень сильно варьироваться). Тики, кстати, работают не на всех системах, хотя сейчас это уже трудно встретить. |
|||
| карма: 1 |
|
|
Ответов: 8976
Рейтинг: 825
|
|||
|
1nd1g0, (кстати о формате integer -- int64 в этом формате не отображается
|
|||
| карма: 19 |
|
|
Ответов: 12
Рейтинг: 1
|
|||
|
1nd1g0 писал(а): Опрашиваете в вечном цикле портКак я писал выше мне нужно, чтобы только в определенный момент программа считывала сигнал с порта. Т.е. я нажал кнопку "Ожидание сигнала" и программа ждет его. А после получения сигнала начинает запускаться секундомер. Реально ли это сделать через условия? 1nd1g0 писал(а): code_24819.txtПишет просто 1... 1nd1g0 писал(а): код Здесь пишет 2009, 2010 и так постоянно... Разве не реально дописать SecondsCounter, чтобы он отображал миллисекунды? А то тут, как я понял, заморочек куча... |
|||
| карма: 0 |
|
|
Ответов: 3889
Рейтинг: 362
|
|||
|
bro, это не готовые схемы, решающие Вашу задачу, это лишь тесты разных способов вычисления прошедшего с момента запуска ПК времени. Как я уже писал Выше, они вычисляют точность таймеров. Например, там где "пишет просто 1" - показательный пример того, что точность до единиц миллисекунд. А последний компонент выдаёт микросекунды, прошедшие с момента запуска. Вернее, теоретически должен был выдавать, но размерность integer слишком мала и старшая часть обрезается, уж простите)
|
|||
| карма: 1 |
|



Поиск
Друзья
Администрация