Вкл/Выкл в зависимости от частоты

alexpr9677
Offline
Зарегистрирован: 22.10.2017

Подскажите как управлять реле разной частотой на входе пина - 2Гц Вкл, 0,5Гц Выкл

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

В правом верхнем углу есть поиск. Набираете там "частотомер". Тут много их народ делал. Ну, а когда частоту измерите, то так и управляйте: одна частота - включить, другая - выключить.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

alexpr9677 пишет:

Подскажите как управлять реле разной частотой на входе пина - 2Гц Вкл, 0,5Гц Выкл

иначе ?

что делать при частоте, допустим, 2.1 Гц ?

или предпологается >=2 Гц - Вкл, <= 0.5 - Выкл ? 

alexpr9677
Offline
Зарегистрирован: 22.10.2017

Имеется ввиду >=2 Гц - Вкл, <= 0.5 - Выкл

Novice User
Offline
Зарегистрирован: 25.09.2017

что сложного-не понятно...

делаете как частотомер,интервал измерения 2 сек,если пришел 1 импульс реле выкл,если 4-включаем

можно измерять период-заводите таймер например на тики 1000 гц,по первому фронту разрешаете работу таймера,по второму запрещаете,если натикало 2000 то выкл реле,а если 500=вкл

еще не понятно "<=0,5 выкл"-а если 0 гц то что?

 

alexpr9677
Offline
Зарегистрирован: 22.10.2017

Спасибо за подсказку, но в моем случае "Чайник", пока сложновато в некоторых моментах... Пример бы больше помог...))))

Novice User
Offline
Зарегистрирован: 25.09.2017
Mihalich
Offline
Зарегистрирован: 23.10.2017

ЕвгенийП пишет:

В правом верхнем углу есть поиск. Набираете там "частотомер". Тут много их народ делал. Ну, а когда частоту измерите, то так и управляйте: одна частота - включить, другая - выключить.

Добрый всем вечер!

есть задача, нужно в зависимости от частоты (10-150Гц) менять скважность ШИМ. 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

alexpr9677, > 2 Герц светодиод загорается. Меньше -гаснет

void setup(){
pinMode (8,INPUT); // вход сигнала (only для atmega328)
pinMode(13,OUTPUT); // светодиод

TCCR1A = 0; TCNT1 = 0; 
TIMSK1 = (1<<ICIE1);//создавать прерывание от сигнала на пине ICP1
TCCR1B = (1<<ICNC1)|(1<<ICES1)|(1<<WGM12)|(1<<CS10)|(1<<CS12);//div1024, mode4 CTC
}

ISR (TIMER1_CAPT_vect) { //прерывание захвата сигнала на входе ICP1
ICR1 > 8000? PORTB&=~(1<<5) : PORTB|=1<<5 ;
TCNT1 = 0;
}


void loop(){}

 

OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

Mihalich пишет:
в зависимости от частоты (10-150Гц) менять скважность ШИМ.

Как выше уже сказали - сперва измерьте частоту.
Потом можно воспользоваться ф-ей map()

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

dimax пишет:

alexpr9677, > 2 Герц светодиод загорается. Меньше -гаснет

void setup(){
pinMode (8,INPUT); // вход сигнала (only для atmega328)
pinMode(13,OUTPUT); // светодиод

TCCR1A = 0; TCNT1 = 0; 
TIMSK1 = (1<<ICIE1);//создавать прерывание от сигнала на пине ICP1
TCCR1B = (1<<ICNC1)|(1<<ICES1)|(1<<WGM12)|(1<<CS10)|(1<<CS12);//div1024, mode4 CTC
}

ISR (TIMER1_CAPT_vect) { //прерывание захвата сигнала на входе ICP1
ICR1 > 8000? PORTB&=~(1<<5) : PORTB|=1<<5 ;
TCNT1 = 0;
}


void loop(){}

 

Вы человеку дали "гранату" только что, а если он "подредактировать" что то соберется, чека на вылет ?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

xDriver, ну он же просил пример, вот и "напросился" :-)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

dimax пишет:

xDriver, ну он же просил пример, вот и "напросился" :-)

Как-нибудь, будет не лень, очередному студенту напишу пример на брейнфаке - нехай сдаёт.

Mihalich
Offline
Зарегистрирован: 23.10.2017

Измерить пробовал функцией milis, все получается, но ШИМ отказывается работать

alexpr9677
Offline
Зарегистрирован: 22.10.2017

Спасибо за пример! Опробую когда доберусь, а на счет "Гранаты", есть какой то подвох?

bwn
Offline
Зарегистрирован: 25.08.2014

alexpr9677 пишет:

Спасибо за пример! Опробую когда доберусь, а на счет "Гранаты", есть какой то подвох?

А вы ее с состоянии модифицировать?))))