Может будет кому интересно...ради интереса посмотрел. ужаснулся. без обид.
ЗЫ у меня MEGA2560hed1n, 17 Февр. 16, 17:02
по сути. АЦП запускаем по тикам от TIMER2 . зачем? если немного покурить шит на применяемый контроллер , то можно увидеть что один из режимов работы АЦП - Free Running mode. это означает режим непрерывного преобразования.
как это работает :
- приходит по INT0 zero-cross, запускаем АЦП в режиме Free Running mode с разрешёнными прерываниями от АЦП ( бит ADIE ) . грянуло прерывание от АЦП- как только мы считаем из него данные он атоматом запустится на следующее преобразование. в течение двух полупериодов складываем квадраты значений в один котёл одновременно инкрементируя счётчик прерываний (позже он потребуется для подсчёта среднеквадратичного).
-приходит второй INT0 zero-cross - мы его игнорируем ( а АЦП продолжает колбасить) .
- по третьему INT0 zero-cross останавливаем АЦП . достаём из котла сумму квадратов, делим на произведение счётчика прерываний (количества отсчётов АЦП ) и масштабирующего коэффициента из полученного извлекаем кв корень.
для более точных измерений нужно пропустить через АЦП несколько перидов сетевого напряжения (тока).
в аттаче книга на русском по атмелам, читайте и не забывате - плавучка это зло