Цитата(Kovrov @ Mar 25 2006, 08:04)

алгоритм отличный - только накладен в вычислениях!
или есть способы?
Да нет проблем. N выбирается как степень двойки, в результате k*1/N превращается в k>>log2N

Вообще-то это обычный RC фильтр. Правильнее делать (чтобы результат переменной был такой-же, как и входной результат):
Y=Y-((Y-X)>>n), где Y - ваша переменная, X - результат преобразования, n - логарифм (2) N. Реализуется очень просто и быстро. Соответственно, чем больше n, тем ниже частота среза.
Да, и еще, сдвиг надо делать обязательно АРИФМЕТИЧЕСКИЙ (т.е. ASR ROR ROR ROR ...), чтобы сохранялся знак разности.
По поводу регулятора. А попробовать сл. метод:
Прерывание TOVxxx (таймера, на котором шим сделан)
Если уровень на входе обратной связи меньше порога то OCRx++ иначе OCRx--
Конец прерывания.
++ или -- возможно надо местами поменять в зависимости от полярности сигнала обратной связи.
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин