Прерывания и millis()

Neit
Offline
Зарегистрирован: 17.09.2014

Привет! Помогите советом - пишу программу на Arduino, используя скетч из этой статьи. Там используется прерывание для отслеживания времени открытия симистора.
Вот так выглядит функция обработки прерывания:

void zero_crosss_int()  // function to be fired at the zero crossing to dim the light
{
  // Firing angle calculation : 1 full 50Hz wave =1/50=20ms
  // Every zerocrossing thus: (50Hz)-> 10ms (1/2 Cycle) For 60Hz => 8.33ms
  // 10ms=10000us
  // (10000us - 10us) / 128 = 75 (Approx) For 60Hz =>65
  int dimtime = (75*dimming); // For 60Hz =>65
  delayMicroseconds(dimtime); // Off cycle
  digitalWrite(AC_LOAD, HIGH);   // triac firing
  delayMicroseconds(10); // triac On propogation delay (for 60Hz use 8.33)
  digitalWrite(AC_LOAD, LOW); // triac Off
}

 

Как видно, там используется delayMicroseconds() и на время его действия останавливается отсчет функции millis(), который очень важен в остальной части моей программы.
Пробовал заменить delayMicroseconds() циклами с micros(), но в функциях прерывания они не работают. Может есть какой способ?

maksim
Offline
Зарегистрирован: 12.02.2012
Neit
Offline
Зарегистрирован: 17.09.2014

Благодарю! Вроде то что надо.