VladimirMal писал(а):можно сделать под любые варианты - диапазон зависит от входных делителей, отображение результата от коэфициента в программе, шаг= мах требуемое значение/1024
Не совсем так. Коэффициент в программе один на ток и напряжение. Поэтому напряжение меряется до 25,60 вольт а ток до 2,560А. Для раздельной настойки нужно ввести две константы.
Если поменять строчки
adc_summ=adc_summ/100;
volt=(adc_summ*Vref/1024);
на
adc_summ=adc_summ*Vref/1024/100;
volt=adc_summ;
То разрешающая способность возрастет. Дискретность будет не 1024 шага, а будет определяться константой Vref.
Есть еще предложения по улучшению программы:
1. Размерность массивов сделать кратной 2 (128 вместо 100): Тогда деление на число элементов массива компилятор заменит сдвигом - быстрее будет выполняться и меньше код.
2. В обработчике прерывания ADC производить только сбор данных в массивы - никаких переключений входов. В этом случае можно будет задейстововать не 100 точек измерения а например 256. По заполнении массива выставлять флаг окончания измерения, который ожидается в основной программе. Если флаг установлен - значения в массив не добавлять. В основной программе в зависимости от режима измерять ток или напряжение и переключать входы АЦП с ожиданием установления измеряемого сигнала. По истечении этого периода ожидания устанавливать счетчик заполнения массива на 0 и начинать набирать статистику по следующему измеряемому параметру. Естественно что перед этим накопленные элементы массива должны быть прсуммированы.
Еще лучшее решение - суммирование прямо в обработчике. 16 разрядов - 10 разрядов = 6 разрядов = 32 измерения с суммированием можно выполнить прямо в unsigned int. Если применить unsigned long, то потребуется несколько больше времени. Зато можно обойтись всего одной переменной в 4 байта для счетчика и организовать наколение до (32-10 = 22) 2 в 22 степени измерений
3. Как я понял в программе применено отображение в один интервал времени только одного сегмента индикаторов из 48. То есть в лобой момент времени горит только один сегмент. Он потребляет примерно (5-3)/100=20мА тока. Если применить включение дополнительного приемника такого же тока в то время когда сегмент выключен, то потребляемый устройством ток стабилизируется. Это уменьшит шумы и возможно приведет к улучшению разрешающей способности. А возможно и наоборот. При выключении шума перестанет действовать механизм увеличения разрешающей способности АЦП в присутствии шума и разрешающая способность упадет. Это предложение является сомнительным и может не принести результатов в виде улучшения разрешающей способности.
4. Имеет смысл увеличить частоту АЦП насколько это возможно. При этом можно будет накапливать больше точек в единицу времени, а следовательно и увеличивать разрешающую способность. Частоту можно увеличивать до тех пор, пока суммарное время обеих обработчиков прерываний не будет занимать процентов 50-80 всего процессорного времени.
