Блин, парни. Вот вы все такие умные, а из-за срача, который здесь развёлся, хрен потом увидишь суть. Как и обычно впрочем.
Давайте лучше я сформулирую проблему и её решение с позиции любителя ассемблера-самоучки, далёкого от теории, но близкого к практике (то бишь себя).
Иногда так бывает, что для выбранного диапазона измерения и цены деления немного не хватает разрядности АЦП. Немного - это один, максимум 2 бита. Например, есть 10-битный АЦП (любой современный младший PIC), а надо 11- или 12-битный.
Немного нарастить разрядность (без улучшения абсолютной точности) поможет метод оверсэмплинга. Суть заключается в том, что нужно взять несколько измеренных 10-битных значений (для удобства кол-во значений должно быть одной из степеней двойки), вычислить их 10-битное среднее арифметическое, и умножить его на 2 столько раз, сколько бит разрядности надо добавить. Например, берём 8 10-битных отсчётов (буфер не стековый, а кольцевой, т.е., при записи нового значения затирается самое старое из 8-ми существующих), складываем эти 8 10-битных чисел (получается 13-битная сумма), и делим не на 8, а на 4 или 2. При этом получается 11-и или 12-и битное число, которое мы и используем в дальнейшем как результат работы 11-и или 12-и битного АЦП.
Для нормальной работы данного метода нужно, чтобы во входном измеряемом напряжении присутствовал белый шум, в качестве которого может послужить цифровой шум самого процессора, или шум ОУ предварительного масштабирующего усилителя.
Кол-во отсчётов нужно брать чем больше, тем лучше. Ограничение здесь - объём ОЗУ и результирующая скорость измерения.
Результат с метрологической точки зрения спорный, оверсэмплинг не заменяет честного более разрядного АЦП.
Подробнее о методе здесь:
http://www.atmel.com/Images/doc8003.pdfТак? Или что-то не так?