Обработка прерываний

Skaf
Offline
Зарегистрирован: 20.12.2015

Возникли проблемы с обработкой внешних прерываний.

Висит щелевой оптодатчик в качестве счетчика. Его выход подключен к 2 пину Arduino Mega 2560.

Необходимо посчитать сколько было импульсов от этого счетчика.

Делаю простейший скетч




void userFunc(void){
   digitalWrite(40, HIGH);
   digitalWrite(40, LOW);
}

void setup() {
  pinMode(40, OUTPUT);

  attachInterrupt(digitalPinToInterrupt(2), userFunc, RISING);
}

void loop() {
  // put your main code here, to run repeatedly:
  while(1){}
}

 

Настраиваю внешнее прерывание на второй пин по переднему фронту.

И делаю отладочную ножку 40. Когда вызывается обработчик прерывания на 40 ножке создается импульс.

 

Теперь беру осциллограф, один канаг вешаю на 2 ножку ардуины (выход от датчика), а второй канал на отладочную ножку 40. И вижу, что обработчик прерывания вызывается далекоо не каждый раз при положительном фронте импульса.

Кто знает в чем дело? Как с этим бороться? Необходимо добиться работы, при которой ни один импульс не будет потерян.

Осциллограмму прилагаю 

 

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

На мой взгля у Вас нет никакой задержки между 

digitalWrite(40, HIGH);
 digitalWrite(40, LOW);

поэтому высокий очень редко появляется, если ставить задержку китично тогда поставить 2 прерывания, один на подъем другой на спад.