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

Обсуждаем контроллеры компании Atmel.
Ответить
kk042fjv
Грызет канифоль
Сообщения: 261
Зарегистрирован: Ср авг 01, 2012 10:45:42

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

Сообщение kk042fjv »

Здравствуйте!
На канал АЦП поступает сигнал импульсами, подскажите как найти максимальное значение за импульс?
kk042fjv
Грызет канифоль
Сообщения: 261
Зарегистрирован: Ср авг 01, 2012 10:45:42

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

Сообщение kk042fjv »

Можно задать вопрос по другому.
На канал АЦП поступают сигналы импульсами, На LCD выводятся тоже импульсами. Как сделать чтоб данные показывали постоянно,т.е. только обновлялись с последующими импульсами?
Аватара пользователя
bodriy2014
Открыл глаза
Сообщения: 51
Зарегистрирован: Пн янв 04, 2016 17:23:59
Контактная информация:

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

Сообщение bodriy2014 »

Привет!
У себя в коде находил максимальное напряжение так

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

//максимальное значение сигнала
Vmax=0;
for(int y=1;y<255;y++)
     {
       if(Vmax<mass[y])
           {
             Vmax=mass[y];
            }
       }

но у меня данные собранны в массиве 255 значений и из этих значений определял максимальное.
Можно и сразу оцифровывать и сравнивать.
Аватара пользователя
bodriy2014
Открыл глаза
Сообщения: 51
Зарегистрирован: Пн янв 04, 2016 17:23:59
Контактная информация:

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

Сообщение bodriy2014 »

kk042fjv писал(а):.....Как сделать чтоб данные показывали постоянно,т.е. только обновлялись с последующими импульсами?

посмотрите делал любительский осциллографический пробник.
Код специально максимально комментировал, там русского больше чем С!)))
Мне кажется там есть для вас.
http://srukami.inf.ua/pultoscop_v25110.html
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

kk042fjv писал(а):Как сделать чтоб данные показывали постоянно,т.е. только обновлялись с последующими импульсами?
Дак постоянно или синхронно с импульсами ? :)
Вообще, вопрос как то странно звучит. Период отображения, либо по какому то событию, Вы выбираете сами. И на вопрос "Как сделать", ответ один - синхронизироваться с необходимым событием.
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

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

Сообщение pokk »

Можно сделать примерно как писал bodriy2014, только сравнение поставить сразу после преобразования от АЦП

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

       if(Vmax<ADCW){
             Vmax=ADCW;
       }

Тогда не надо городить массивы, единственная проблема это найти начал импульса и по этому событию сбрасывать Vmax в ноль.
Если во время отсутствия импульсов у вас идёт 0, то можно сделать отслеживание перехода из 0 в 1 это и будет событием начала импульса.
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

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

Сообщение 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; //счетчик нулей сбрасываем в любом случае
}
L.O.D
Встал на лапы
Сообщения: 139
Зарегистрирован: Чт фев 11, 2016 18:35:37

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

Сообщение L.O.D »

kk042fjv писал(а):На канал АЦП поступают сигналы импульсами, На LCD выводятся тоже импульсами. Как сделать чтоб данные ... только обновлялись с последующими импульсами?
Если между импульсами чистый ноль, то не показывать на дисплее те результаты, которые равны нулю, а если не ноль, а некие провалы, то пропускать те показания, которые меньше заранее выбранного порога.
- Из овощей я больше всего люблю пельмени... © Соседский Мальчик
Ответить

Вернуться в «AVR»