Еще вариант - вольтметр на микроконтроллере, отсюда
http://chipenable.ru/index.php/programm ... llere.htmlРезультат преобразования АЦП накапливается 8 раз в переменной, усредняется и записывается в программный буфер. В исходнике применяется сдвиг на 3.
Как вычисляется напряжение:
Диапазон входных напряжений АЦП определяется источником опорного напряжения (ИОН). В нашем случае используется внутренний ИОН на 2,56 В. Для расширения диапазона измеряемых напряжений я поставил перед АЦП резистивный делитель. Он рассчитан таким образом, чтобы при напряжении в 30 В на входе делителя напряжение на входе АЦП не превышало 2,56 В.
Uadc = Uin*R14/(R14 + R15) = 30В*82 /(82 + 910) = 2,48 В
Чтобы вычислить напряжение на входе вольтметра нужно результат преобразования АЦП пересчитать в напряжение и домножить на коэффициент
(R14 + R15)/R14 = 992/82
Напряжение на входе АЦП - Uadc вычисляется по формуле:
Uadc = value * 2,56/(2^n – 1),
где n – разрядность АЦП, value – цифровое значение напряжения
Отсюда напряжение на входе вольтметра будет равно:
Uin = (value * 2,56 * 992)/(82 * 1023) = (value * 30,96)/1023
Чтобы не связываться с типом float и при этом иметь возможность вычислять напряжение с точностью до 2-ух знаков после запятой, числитель этой формулы я домножил на 100
Uin = (value * 3096)/1023
еще, там же, способы повышения разрешения АЦП:
http://chipenable.ru/index.php/programm ... ation.htmlhttp://chipenable.ru/index.php/programm ... ation.htmlз.ы. да раньше на ассемблере вольтметры делали без лонгов хватало вордов - влазило в тини13/15.
Например если Vref=5.00В, формула напряжения:
V=(ADC*500)/1024
можно сократить на 4
V=(ADC*125)/256
сложить 125 раз и сдвинуть на 8...