Наладить выборку на максимально возможной частоте, желательно 4кГц
и выше. Экспоненциальным средним вычесть постоянку. Переменку
возводить в квадрат и складывать в такой же фильтр
экспоненциального среднего. Выборку, фильтрацию и возведение в
квадрат делать прямо в прерывании АЦП. Вывод результата делать из main() по остаточному принципу - насколько хватит оставшихся тактов. Брать квадратный корень из фильтра суммы квадратов. Можно считать флоатом, чтобы не париться. На пару раз в секунду и даже чаще должно хватить.
Для красоты, синхронизировать суммирование и выдачу результата с частотой тока. Например, ~4 раза в секунду. Тогда сумму квадратов не фильтровать, а накапливать, допустим, в течение 12 периодов и после каждого вывода раз в 12 периодов - сбрасывать.
P.S. У меня на 24МГц или около того, три фазы тока и напряжения крутилось. Но недоделал - не решил проблему с аналоговой частью (шунты были без трансформаторов) и бросил. Напряжение до сих пор может показывать и показывает хорошо.