Счётчик импульсов

Ulok
Ulok аватар
Offline
Зарегистрирован: 06.01.2021

Здравствуйте. Пытался найти скетч для подсчёта прямоугольных импульсов и вывода их на монитор порта arduino. Помогите пожалуйста, я понятия не имею как их считать :(

b707
Offline
Зарегистрирован: 26.05.2017

зависит от частоты импульсов

например изучите эту тему http://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/chtenie-shim-5-kgts

Ulok
Ulok аватар
Offline
Зарегистрирован: 06.01.2021
uint16_t volatile LL,HL;
int FRQ,DUTY;
void log1(){
    LL=TCNT1;
    TCNT1=0;
    attachInterrupt(0,log0,FALLING);
}
 
void log0(){
    HL=TCNT1;
    TCNT1=0;
    attachInterrupt(0,log1,RISING);
}
 
void setup(){
Serial.begin(9600);
attachInterrupt(0,log1,RISING);
TCCR1A=0;TCCR1B=0;TCNT1=0;
TCCR1B =(1<<CS00)|(1<<CS01);//тик таймера 4мкс
}
 
void loop(){
int _HL,_LL;
cli();
_HL=HL;
_LL=LL;
sei();
FRQ=250000/(_HL+_LL);
DUTY=(_HL*100)/(_HL+_LL);
Serial.println(FRQ);
Serial.println(DUTY);
delay(1000);
}
 
Кажется это то, что мне нужно, спасибо большое. Только объясните пожалуйста принцип работы, мне не очень понятно что происходит в коде. Я понял, что верхнее число на выводе это частота, нижнее это скважность. Но я не понимаю что такое _HL,_LL и что за абракадабра с таймером сверху
DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

$100 за лекции, которые ты пропустил. 

Ulok
Ulok аватар
Offline
Зарегистрирован: 06.01.2021

У меня не было никаких лекций 

b707
Offline
Зарегистрирован: 26.05.2017

Ulok пишет:

 я не понимаю что такое _HL,_LL и что за абракадабра с таймером сверху

_HL - длительность высокого уровня на входе, _LL - соответственно низкого

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Какой то код подозрительно знакомый

Kakmyc
Offline
Зарегистрирован: 15.01.2018

ТС , то что ты нашел , это не про это.
Оно количество не считает.
Только скважность/коофициент заполнения и частоту

Kakmyc
Offline
Зарегистрирован: 15.01.2018

А импульсы считать как то так:

volatile uint32_t nImpulse=0;

void INT_ISR(){
nImpulse++;
}

void setup(){
attachInterrupt(0,INT_ISR,RISING);
Serial.begin(9600);
}

void loop(){
Serial.print(nImpulse);
delay(500);
}

 

Ulok
Ulok аватар
Offline
Зарегистрирован: 06.01.2021

Спасибо большое :)

b707
Offline
Зарегистрирован: 26.05.2017

Kakmyc пишет:
ТС , то что ты нашел , это не про это. Оно количество не считает. Только скважность/коофициент заполнения и частоту

ТС не обязательно получать полностью готовое решение, можно и самому подумать. Из этого кода сделать счетчик импульсов - раз плюнуть.