@Phoenix32

Как подсчитать импульсы за промежуток времени?

Здравствуйте. Интересует такой вопрос. Хочу сделать цифровой тахометр, считать период импульсов не хочу. Хочу попробовать посчитать количество импульсов за какой-то промежуток времени, например 100 миллисекунд. Как это можно реализовать?
  • Вопрос задан
  • 10000 просмотров
Пригласить эксперта
Ответы на вопрос 2
gbg
@gbg Куратор тега Arduino
Любые ответы на любые вопросы
В атмеге не менее двух таймеров. Первый таймер настраиваете на работу от внешнего тактового источника с делителем 1:1, второй таймер настраиваете на работу от тактового генератора контроллера с подходящим вам делителем (на мегагерце подойдет, например, 1:64) и активируете ему прерывание по переполнению.

В обработчике этого прерывания смотрите значение, которое насчитал первый таймер.
Ответ написан
Наброски топорного нехорошего варианта, про точность и работоспособность промолчу
(они сильно зависят от частоты измерений и продолжительности измерения, так же считаем, что на вход не летят какие-то помехи):
int time_stop; //время прекращения измерений
int time;//для текущего времени
int count;//счетчик
int t1,t2;//для определения того, что прошел импульс
//t1 - текущее, t2 - предыдущее состояния

count=0;//обнуляем всё
t1=0; t2=0;
time=millis();//считываем текущее время
time_stop=time+100; //через сколько прекратить замер в данном случае +100мс

while(time<=time_stop)//пока время меньше времени останова
{
t1=digitalRead(PINx);//читаем какой-то пин
if(t1!=t2)//если t1 и t2 не равны
  {
  if(t1>t2)count++;//если t1>t2 (т.е. передний фронт), то увеличим счетчик
  t2=t1; //предыдущее состояние = текущему
  }
time=millis();//обновляем текущее время
}


В count под конец должны получить что-то очень близкое к количеству импульсов.

Из минусов - цикл жрет время, не давая в этот момент делать что-либо еще.
Если только посчитать, потом вывести на дисплей, то пойдет может быть.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы