Прерывания и millis()
- Войдите на сайт для отправки комментариев
Ср, 17/09/2014 - 19:05
Привет! Помогите советом - пишу программу на 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(), но в функциях прерывания они не работают. Может есть какой способ?
http://arduino.ru/forum/programmirovanie/mnogokanalnyi-dimmer-na-220v#co...
Благодарю! Вроде то что надо.