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

C++

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

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

02.07.2015, 15:19. Просмотров 634. Ответов 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++;            //Счетчик изменения состояний импульса
         }
 
   }
То в таком случае, получаем кол-во отчетов в секунду, но при этом программа подвисает, при попадании в данный цикл. Плюс идет привязка к системному счетчику, что может выйти боком в будущем.

Подскажите, как можно более правильно посчитать кол-во импульсов за секунду ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rius
1909 / 1295 / 298
Регистрация: 25.05.2015
Сообщений: 4,454
Записей в блоге: 5
Завершенные тесты: 4
02.07.2015, 15:56     Количество импульсов в секунду #2
Это на ПК, в микроконтроллере или где? Какова максимальная частота импульсов?
На ПК не RTOS работает, стабильный подсчёт невозможен.
magirus
Супер-модератор
Эксперт по компьютерным сетямЭксперт Windows
26136 / 14450 / 801
Регистрация: 15.09.2009
Сообщений: 62,089
Записей в блоге: 64
02.07.2015, 17:34     Количество импульсов в секунду #3
Цитата Сообщение от DenProx Посмотреть сообщение
На цифровой вход некоторого оборудования
там свои есть функциональные блоки
DenProx
Техник
309 / 167 / 5
Регистрация: 09.10.2009
Сообщений: 3,039
03.07.2015, 08:33  [ТС]     Количество импульсов в секунду #4
немного конкретики добавлю)) Оборудование это от фирмы L-Card: Е14-440. В тех поддержке сказали, что в самом приборе нет функции такой, необходимо решать задачу на программном уровне. В старой версии программы, которую я переделываю, так и было сделано, как в примере выше, с использованием GetTickCount.

Добавлено через 2 минуты
Если есть примеры решения подобных задач для других устройств, буду признателен. Может что-то подойдет под мою задачу.
SatanaXIII
Супер-модератор
Эксперт С++
5578 / 2612 / 239
Регистрация: 01.11.2011
Сообщений: 6,422
Завершенные тесты: 1
03.07.2015, 09:08     Количество импульсов в секунду #5
Цитата Сообщение от DenProx Посмотреть сообщение
импульсов за секунду
Цитата Сообщение от DenProx Посмотреть сообщение
так и было сделано
А о каких цифрах идет речь вообще? Приблизительно.
DenProx
Техник
309 / 167 / 5
Регистрация: 09.10.2009
Сообщений: 3,039
03.07.2015, 09:14  [ТС]     Количество импульсов в секунду #6
SatanaXIII, Примерно, от 1 до 10 импульсов в сек. В зависимости от того, сколько Гц на генераторе выставим.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.07.2015, 12:38     Количество импульсов в секунду
Еще ссылки по теме:

Генерация случайного числа каждую секунду C++
C++ Builder Прибавить к полученному времени 1 секунду
C++ Отнимите секунду от времени 0.0.0! Не понимаю алгоритм
Как засечь ровно одну секунду? C++
При компиляции - cmd на секунду Visual C++

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

Или воспользуйтесь поиском по форуму:
AlexVRud
440 / 150 / 38
Регистрация: 04.07.2014
Сообщений: 425
07.07.2015, 12:38     Количество импульсов в секунду #7
DenProx, DenProx, похоже на то, что ты бьёшь из пушки по воробьям. Если задача сводится только к замеру частоты цифрового сигнала, то тут справиться замечательно Arduino, где на микроконтроллере есть возможность обрабатывать прерывания при смене уровня входного цифрового сигнала. В твоей же ситуации ты можешь запросить поток заданной частоты с АЦП и запоминать в отдельный FIFO только номера тактов при которых произошёл, например, переход с 0 на 1. И по этим данным уже вычислять частоту, используя несколько тактов, для усреднения результата.
Yandex
Объявления
07.07.2015, 12:38     Количество импульсов в секунду
Ответ Создать тему
Опции темы

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