Здравствуйте!
На канал АЦП поступает сигнал импульсами, подскажите как найти максимальное значение за импульс?
Как высчитать максимальное значение за период с помощью АЦП
Re: Как высчитать максимальное значение за период с помощью
Можно задать вопрос по другому.
На канал АЦП поступают сигналы импульсами, На LCD выводятся тоже импульсами. Как сделать чтоб данные показывали постоянно,т.е. только обновлялись с последующими импульсами?
На канал АЦП поступают сигналы импульсами, На LCD выводятся тоже импульсами. Как сделать чтоб данные показывали постоянно,т.е. только обновлялись с последующими импульсами?
- bodriy2014
- Открыл глаза
- Сообщения: 51
- Зарегистрирован: Пн янв 04, 2016 17:23:59
- Контактная информация:
Re: Как высчитать максимальное значение за период с помощью
Привет!
У себя в коде находил максимальное напряжение так
но у меня данные собранны в массиве 255 значений и из этих значений определял максимальное.
Можно и сразу оцифровывать и сравнивать.
У себя в коде находил максимальное напряжение так
Код: Выделить всё
//максимальное значение сигнала
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: Как высчитать максимальное значение за период с помощью
kk042fjv писал(а):.....Как сделать чтоб данные показывали постоянно,т.е. только обновлялись с последующими импульсами?
посмотрите делал любительский осциллографический пробник.
Код специально максимально комментировал, там русского больше чем С!)))
Мне кажется там есть для вас.
http://srukami.inf.ua/pultoscop_v25110.html
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Как высчитать максимальное значение за период с помощью
Дак постоянно или синхронно с импульсами ?kk042fjv писал(а):Как сделать чтоб данные показывали постоянно,т.е. только обновлялись с последующими импульсами?
Вообще, вопрос как то странно звучит. Период отображения, либо по какому то событию, Вы выбираете сами. И на вопрос "Как сделать", ответ один - синхронизироваться с необходимым событием.
Re: Как высчитать максимальное значение за период с помощью
Можно сделать примерно как писал bodriy2014, только сравнение поставить сразу после преобразования от АЦП
Тогда не надо городить массивы, единственная проблема это найти начал импульса и по этому событию сбрасывать Vmax в ноль.
Если во время отсутствия импульсов у вас идёт 0, то можно сделать отслеживание перехода из 0 в 1 это и будет событием начала импульса.
Код: Выделить всё
if(Vmax<ADCW){
Vmax=ADCW;
} Тогда не надо городить массивы, единственная проблема это найти начал импульса и по этому событию сбрасывать Vmax в ноль.
Если во время отсутствия импульсов у вас идёт 0, то можно сделать отслеживание перехода из 0 в 1 это и будет событием начала импульса.
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: Как высчитать максимальное значение за период с помощью
Как вариант - считать количество "нулевых" импульсов и если их достаточно много считать концом импульса. Самый простой вариант:
Код: Выделить всё
#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: Как высчитать максимальное значение за период с помощью
Если между импульсами чистый ноль, то не показывать на дисплее те результаты, которые равны нулю, а если не ноль, а некие провалы, то пропускать те показания, которые меньше заранее выбранного порога.kk042fjv писал(а):На канал АЦП поступают сигналы импульсами, На LCD выводятся тоже импульсами. Как сделать чтоб данные ... только обновлялись с последующими импульсами?
- Из овощей я больше всего люблю пельмени... © Соседский Мальчик