Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
DenProx
Техник
310 / 168 / 5
Регистрация: 09.10.2009
Сообщений: 3,048
#1

Количество импульсов в секунду - C++

02.07.2015, 15:19. Просмотров 747. Ответов 6
Метки нет (Все метки)

Доброго времени суток! Помогите, кто чем может ))

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

Если делать цикл в отдельном потоке, вида:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CountDI = 0;
 
ULONG StartTime = GetTickCount();
   for(int i=0; GetTickCount()-StartTime < 1000; i++)  // кол-во отчетов за 1 сек.
   {
        !pModule->TTL_IN(&TtlIn);   // Запрос состояния
        Form1->DI1 = TtlIn;         // Записываем ответ
 
        if (Form1->DI1!=DI_save){    // Если состояние изменилось
         DI_save = Form1->DI1;        //Запишем последнее состояние
         CountDI++;            //Счетчик изменения состояний импульса
         }
 
   }
То в таком случае, получаем кол-во отчетов в секунду, но при этом программа подвисает, при попадании в данный цикл. Плюс идет привязка к системному счетчику, что может выйти боком в будущем.

Подскажите, как можно более правильно посчитать кол-во импульсов за секунду ?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2015, 15:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Количество импульсов в секунду (C++):

Количество операций в секунду - C++ Builder
Надо подсчитать колличество операций сложения в течении секунды.Как это правильно записать? void __fastcall TForm1::Button1Click(TObject...

Определенная последовательность импульсов на ком порт - C++ Builder
Есть кнопки void __fastcall TForm1::Button1Click(TObject *Sender) { } При ее нажатии нужно сделать так, что на ком порту...

Прибавить к полученному времени 1 секунду - C++ Builder
Всех приветствую. Столкнулся с бедой вроде просто, а даже гугл не ищет. В общем не могу прибавить к извлечённому времени 1 секунду. Код: ...

Как выполнять операцию каждую секунду? - C++ Builder
Мне нужно, что б мое консольное приложение запускалось и за все время работы выполняло бы одну операцию каждую секунду.

Вывод инфо 44100 раз за одну секунду - C++ Builder
в RichEdit1 получить пошаговый вывод дискретизации за одну секунду 44100 отщётов. Примерно так. 1 10101111 2 01101110 3...

Как обеспечить вызов некоторой функции четко 50 раз в секунду? - C++ Builder
Доброе утро! Стоит задача хитрая задачка вызова некоторой функции четко 50 раз в секунду, т.е. с частотой 50 Гц. Стандартные таймеры...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Rius
Эксперт .NET
2572 / 1768 / 402
Регистрация: 25.05.2015
Сообщений: 5,877
Записей в блоге: 8
Завершенные тесты: 4
02.07.2015, 15:56 #2
Это на ПК, в микроконтроллере или где? Какова максимальная частота импульсов?
На ПК не RTOS работает, стабильный подсчёт невозможен.
0
magirus
Супер-модератор
Эксперт по компьютерным сетямЭксперт Windows
26616 / 14930 / 857
Регистрация: 15.09.2009
Сообщений: 64,861
Записей в блоге: 70
02.07.2015, 17:34 #3
Цитата Сообщение от DenProx Посмотреть сообщение
На цифровой вход некоторого оборудования
там свои есть функциональные блоки
0
DenProx
Техник
310 / 168 / 5
Регистрация: 09.10.2009
Сообщений: 3,048
03.07.2015, 08:33  [ТС] #4
немного конкретики добавлю)) Оборудование это от фирмы L-Card: Е14-440. В тех поддержке сказали, что в самом приборе нет функции такой, необходимо решать задачу на программном уровне. В старой версии программы, которую я переделываю, так и было сделано, как в примере выше, с использованием GetTickCount.

Добавлено через 2 минуты
Если есть примеры решения подобных задач для других устройств, буду признателен. Может что-то подойдет под мою задачу.
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,529
Завершенные тесты: 1
03.07.2015, 09:08 #5
Цитата Сообщение от DenProx Посмотреть сообщение
импульсов за секунду
Цитата Сообщение от DenProx Посмотреть сообщение
так и было сделано
А о каких цифрах идет речь вообще? Приблизительно.
0
DenProx
Техник
310 / 168 / 5
Регистрация: 09.10.2009
Сообщений: 3,048
03.07.2015, 09:14  [ТС] #6
SatanaXIII, Примерно, от 1 до 10 импульсов в сек. В зависимости от того, сколько Гц на генераторе выставим.
0
AlexVRud
442 / 152 / 38
Регистрация: 04.07.2014
Сообщений: 431
07.07.2015, 12:38 #7
DenProx, DenProx, похоже на то, что ты бьёшь из пушки по воробьям. Если задача сводится только к замеру частоты цифрового сигнала, то тут справиться замечательно Arduino, где на микроконтроллере есть возможность обрабатывать прерывания при смене уровня входного цифрового сигнала. В твоей же ситуации ты можешь запросить поток заданной частоты с АЦП и запоминать в отдельный FIFO только номера тактов при которых произошёл, например, переход с 0 на 1. И по этим данным уже вычислять частоту, используя несколько тактов, для усреднения результата.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.07.2015, 12:38
Привет! Вот еще темы с ответами:

Последовательное изменение цвета Canvas -> Pen -> Color каждую секунду - C++ Builder
Здравствуйте! Есть таймер TForm1::Timer_primerTimer(TObject *Sender), который получает некое значение каждую секунду и обрабатывает...

При компиляции - cmd на секунду - Visual C++
При запуске отладки программы на секунду открывает cmd и тут же закрывает. Не появляется ни форма, ничего. Ошибок никаких нет. Программа...

Работа с таймерами в MFC: выполнение раз в секунду - Visual C++
Как реализовать таймер в таком формате, чтобы всё что записано в методе OnPaint(), выполнялось раз в секунду. Т.е. допустим осуществить...

Сколько раз в секунду можно перерисовывать окно? - C++ WinAPI
Окно ввода(точнее статик), с какой максимальной частотой можно изменять его?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.07.2015, 12:38
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru