закончил вот шестифазный вольтметр среднеквадратичных значений переменного (сетевого) напряжения 6*(0...275)VAC. Месяц переделывал софт, как всегда наиболее оптимальным (и наиболее надёжным) оказалось самое простое решение. Задач стояло на сомом деле несколько. Нужно было мерить напряжения, отслеживать последовательность чередования фаз на каждом из двух вводов и совпадение фаз у двух вводов. Сеть с глухозаземленной нейтралью. Сначала бодался с отслеживанием нуля, начала полупериода, и т.д. Всё вроде бы получилось, но работало весьма неустойчиво (Mega128). То и дело были какие-либо сбои, помехи и т.д. После месяца тыков программа была переписана заново с нуля за пол часа по новой идеологии :) АЦП работает в режиме циклических вычислений с прерыванием по окончанию вычисления. Первым делом вычисляется количество вызовов прерывания АЦП за полный период сети. А потом тупо делаются "фотоснимки" на каждой из шести фаз на это количество срабатываний АЦП. в моем случае, к примеру, за период сети происходит 192 измерения. т.е. в каком бы месте синусоиды мы не начали бы измерения, закончим мы их в той же точке, а значит для среднеквадратичного усреднения нужные данные будут получены как раз в нужном объёме. Дальше все просто, по табличке суммируем квадраты значений, делим в конце на количество ненулевых, берем корень. Гарантировано отсутствие сбоев и т.д., так как нет ветвлений. Для отслеживания чередования фаз, запоминаем время появления максимального значения на каждой из фаз, потом находим разности, по этим разностям легко определить верная ли последовательность или нет. Гуру DSP возможно меня засмеют :) но данный алгоритм при 96 измерениях на полупериод показал точность не хуже 0,36% что для моей задачки выше крыше. И работать может начиная от Меги8... В общем пардон за нескромность, но я счастлив :)