Оперирование частотой, как событием

Chicaragua

✩✩✩✩✩✩✩
29 Апр 2020
1
0
Всем привет. Может кто подскажет куда нужно копать. Необходимо зажигать диод при появлении высокочастотного сигнала на вход ардуино и тушить его после пропадания. Сигнал 5В, 1 кГц. По изготовлению частотомеров статей куча, но это немного не то что нужно. Спасибо
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,201
1,287
Москва
если к сигналу 5 вольт и 1кгц подключить резистор 220 вольт и светодиод, то при наличии сигнала светодиод будет моргать с частотой 1000 раз в секунду, что глазу не видно. Тогда будет казаться , что светодиод горит , но , скорее всего, немного тусклее.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,201
1,287
Москва
Тоже думал, что конденсатор поможет сгладить колебания для четкого определения начала и конца колебаний, но что бы мне рассчитать емкость мне потребуется день рыться в инете. не элеХтрик я
 

PiratFox

★★★★★✩✩
13 Фев 2020
1,723
481
Тоже думал, что конденсатор поможет сгладить колебания для четкого определения начала и конца колебаний, но что бы мне рассчитать емкость мне потребуется день рыться в инете. не элеХтрик я
Да ладно, ничё сложного. Постоянная времени RC цепи: t = RC, где R - омы, С - фарады. Отсюда и плясать с применением нужных коэффициентов сглаживания.;)
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,201
1,287
Москва
Во всем нужна практика. Т.е. логикой я это понимаю, даже формулу помню, но вот что бы быть уверенным на 100 этого нет. Надо раскошелиться после карантина и купить осциллограф, что бы глазами видеть то, что понимает мозг
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,201
1,287
Москва
Все надо щупать! Бывает еще оптический обман зрения! (к электричеству не относиться )
Ну так ... для проверки. Ток надо подавать в р-не 10 мА
Тогда при 5 В надо резистор не менее 500 Ом.
1кгц = 0.001 сек
тогда
0.001=500*С, отсюда С=2 микрофарада.
Как то так ?
 
Изменено:

PiratFox

★★★★★✩✩
13 Фев 2020
1,723
481
Ток надо подавать в р-не 10 мА
Тогда при 5 В надо резистор не менее 500 Ом.
Не совсем так. Ежели по учебникам, то вот: R = (Uпит - Uпадения) / I. Прямое падение на светодиоде где-то - от 1.8 до 2.8 вольта, в зависимости от цвета.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,201
1,287
Москва
Это понятно, но я исключил вообще из этой цепи светодиод, что бы просто читать значение с пина ардуино. А уже управлять светодиодом можно с любого другого пина.

Хотя мне непонятно зачем тут ардуина нужна вообще
 

kostyamat

★★★★★★✩
29 Окт 2019
1,095
629
Хотя мне непонятно зачем тут ардуина нужна вообще
То есть, вы совершенно уверены, что источник сигнала размахом в 5в обязательно обладает нагрузочной способностью БП? Уже и резистор посчитали, и ардуино выбросили. :) А если выходное сопротивление источника в несколько десятков килло-ом, тогда что?

По теме: 1 кГц можно и по прерыванию посчитать, если чё.
1) подключаем прерывание, к примеру по RISING
2) в обработчике прерывания инкрементируем переменную на единицу.
3) в loop каждые скажем 100 мс проверяем сколько насчитали, если переменная увеличилась на 100 за 100мс, значит имеет на входе 1кГц.
Запрещаем прерывания, включаем светодиод, если не насчитали 100, а что-то другое - выключаем светодиод, обнуляем переменную, снова возводим таймер, разрешаем прерывание, и все по новой

Что-то типа такого. (в реальности не проверял, нет такого генератора, но компилируется успешно )
C++:
const byte ledPin = 13;
const byte interruptPin = 2;
volatile bool state = false;
volatile byte count = 0;

unsigned long timer = 0;

void counter() {
  count += 1;
  if (!state) {
    state = true;
    timer = millis();
  }
}

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(interruptPin, INPUT);
  attachInterrupt(digitalPinToInterrupt(interruptPin), counter, RISING);
}



void loop() {
  if (state and (millis() - timer == 100)) {
    detachInterrupt(digitalPinToInterrupt(interruptPin));
    if (count >= 99 and count <= 101) {  // один отсчет за одну миллисекунду, учитываем возможную девиацию частоты от 990 до 1010 кГц, можно подставить свое
      digitalWrite(ledPin, HIGH);
    } else digitalWrite(ledPin, LOW);
    count = 0;
    state = false;
    attachInterrupt(digitalPinToInterrupt(interruptPin), counter, RISING);
  }

}
 
Изменено:

Старик Похабыч

★★★★★★★
14 Авг 2019
4,201
1,287
Москва
Так задача не стоит в подсчете частоты, из условия либо сигнал есть в виде 5 вольт с частотой 1кГц либо его нет. И при наличии надо зажигать светодиод. все.