Страница 1 из 1

Как высчитать максимальное значение за период с помощью АЦП

Добавлено: Вт апр 05, 2016 10:57:53
kk042fjv
Здравствуйте!
На канал АЦП поступает сигнал импульсами, подскажите как найти максимальное значение за импульс?

Re: Как высчитать максимальное значение за период с помощью

Добавлено: Вт апр 05, 2016 11:05:08
kk042fjv
Можно задать вопрос по другому.
На канал АЦП поступают сигналы импульсами, На LCD выводятся тоже импульсами. Как сделать чтоб данные показывали постоянно,т.е. только обновлялись с последующими импульсами?

Re: Как высчитать максимальное значение за период с помощью

Добавлено: Вт апр 05, 2016 11:20:17
bodriy2014
Привет!
У себя в коде находил максимальное напряжение так

Код: Выделить всё

//максимальное значение сигнала
Vmax=0; 
for(int y=1;y<255;y++)
     {
       if(Vmax<mass[y])
           {
             Vmax=mass[y];
            } 
       }
но у меня данные собранны в массиве 255 значений и из этих значений определял максимальное.
Можно и сразу оцифровывать и сравнивать.

Re: Как высчитать максимальное значение за период с помощью

Добавлено: Вт апр 05, 2016 11:22:58
bodriy2014
kk042fjv писал(а):.....Как сделать чтоб данные показывали постоянно,т.е. только обновлялись с последующими импульсами?
посмотрите делал любительский осциллографический пробник.
Код специально максимально комментировал, там русского больше чем С!)))
Мне кажется там есть для вас.
http://srukami.inf.ua/pultoscop_v25110.html

Re: Как высчитать максимальное значение за период с помощью

Добавлено: Вт апр 05, 2016 19:13:24
Аlex
kk042fjv писал(а):Как сделать чтоб данные показывали постоянно,т.е. только обновлялись с последующими импульсами?
Дак постоянно или синхронно с импульсами ? :)
Вообще, вопрос как то странно звучит. Период отображения, либо по какому то событию, Вы выбираете сами. И на вопрос "Как сделать", ответ один - синхронизироваться с необходимым событием.

Re: Как высчитать максимальное значение за период с помощью

Добавлено: Ср апр 06, 2016 02:58:09
pokk
Можно сделать примерно как писал bodriy2014, только сравнение поставить сразу после преобразования от АЦП

Код: Выделить всё

       if(Vmax<ADCW){
             Vmax=ADCW;
       } 
Тогда не надо городить массивы, единственная проблема это найти начал импульса и по этому событию сбрасывать Vmax в ноль.
Если во время отсутствия импульсов у вас идёт 0, то можно сделать отслеживание перехода из 0 в 1 это и будет событием начала импульса.

Re: Как высчитать максимальное значение за период с помощью

Добавлено: Ср апр 06, 2016 08:21:41
COKPOWEHEU
Как вариант - считать количество "нулевых" импульсов и если их достаточно много считать концом импульса. Самый простой вариант:

Код: Выделить всё

#define ADC_ZERO 10 //нижний порог сигнала. Не сравнивать же строго с нулем
#define NUMZEROS 100 //количество нулевых отсчетов, соответствующих паузе между импульсами

uint16_t adc = ADC; //я бы лучше все-таки перед использованием значения АЦП сохранил его в отдельной переменной
uint16_t adc_max;
static uint8_t zerocount=0; //счетчик нулевых отсчетов АЦП

if( adc_max < adc )adc_max = adc;
if( adc < ADC_ZERO ){ //если очередной отсчет равен нулю (с учетом помех и прочей неидеальности аналогового сигнала) увеличиваем счетчик
  if( zerocount < 255 )zerocount++; //условие поставлено чтобы он не переполнился
}else{ //если очередной отсчет не равен нулю
  if( zerocount > NUMZEROS ){ //если нулей набралось достаточно - сбрасываем adc_max, то есть начинается новый импульс
    adc_max = 0;
  }
  zerocount = 0; //счетчик нулей сбрасываем в любом случае
}

Re: Как высчитать максимальное значение за период с помощью

Добавлено: Ср апр 06, 2016 10:28:55
L.O.D
kk042fjv писал(а):На канал АЦП поступают сигналы импульсами, На LCD выводятся тоже импульсами. Как сделать чтоб данные ... только обновлялись с последующими импульсами?
Если между импульсами чистый ноль, то не показывать на дисплее те результаты, которые равны нулю, а если не ноль, а некие провалы, то пропускать те показания, которые меньше заранее выбранного порога.