Views: 825
УСРЕДНЕНИЕ – извечная проблема, кода данные на входе пляшут и надо выделить среднее значение.
Классически такая задача решается когда, в каком то массиве накапливаются данные, а потом находиться среднее из полученных данных. Но наличие массива может быть ограниченно размерам памяти микроконтроллера. поэму я в Инете нашел новый принцип и доработал его для этой задачи.
Суть заключается в чем:
Мы получаем данные, затем берем, например 1,5 часть. Из переменной СРЕДНЕЕ мы также вычитаем из нее её 1,5 часть, а затем прибавляем к СРЕДНЕЕ 1,5 измеренного из нового параметра. получается маленький компактный код, который можно применить на 8 битных контроллерах даже где нет операции аппаратного деления, для этого можно использовать функции сдвига.
в СИ он будет выглядеть такт:
//======================================================================================
// subroutine: среднее число
// входные данные staroe - старое значение переменой,
// novoe - новое измеряемое значение
// старое значение уменьшается на коэффициент INTEG
// а затем увеличивается на величину нового/INTEG
signed int averageg (signed int staroe, signed int novoe)
{
if(staroe<=INTEG && staroe>0)
{
staroe=staroe-1;
}
else staroe=staroe-staroe/INTEG;
staroe=staroe-(staroe/INTEG);
staroe=staroe+(novoe/INTEG);
return staroe;
}//
ну не забудь добавить константу (чаще всего константы достаточно)
#define INTEG 10 // глубина интеграции
Вариант вычисление среднего для микроконтроллеров с малым объемов памяти например PIC10.
void averaging (void)
{
/*уменьшаем базовому уровень на 2^avdepth*/
avtemp=average; //
divide(); //
average-=avtemp; //
/*получаем часть от freq 2^avdepth* и добавляем его к базовому уровню*/
avtemp=freq; // текущая частота
divide(); //
average+=avtemp; //
}
/*деление 2^n*/
void divide (void)
{
char a;
for(a=0;a<avdepth;a++)
{
avtemp>>=1;
}
}
где average – средняя величина которая вычисляется от переменной freq. степень усреднения зависит от константы avdepth
чем больше avdepth – тем медленнее будет расти average от изменения freq. Но не стоит её выбирать очень большой в пределе от 2 до 5 вполне приемлемо для многих проектов, где необходимо сгладить, усреднить, какие то данные например, с АЦП или с емкостного сенсора.
Это может быть интересно
Проект с использованием MCC часть 05Views: 2228 Эту часть назовем так как избавься от delay, там где а это реально не надо. Для это нам потребуется научиться использовать прерывания и работать с таймерами. Что такое …
WiFi ESP8266 – AT команды связанные с функцией TCP/IP (v.1.6.1)Views: 5428 AT команды связанные с функцией TCP/IP В этом разделе описаны команды которые позволяют устанавливать соединения между серверами и клиентами в сети. Приведено описание команд и примеры их выполнения. …
Real-time music visualization technologyViews: 369 Music visualization technology in real time (RTMV-technology). Я не музикант і я не маю спеціальної музичної освіти, я інженер розробник вбудованих систем. Але моє хобі розроблення технології візуалізації …
PIC18F25K42 – v. A001 – выявленные баги.Views: 832 Модуль I2C Не работает при использовании в стандартной конфигурации MCC. Требует особой нестандартной конфигурации и управления для нормальной работы. Обойти Обход проблемы возможен библиотека см статью. Модуль ADC2 На …
Kitchen timer with contactless gesture controlViews: 817 Кухонний таймер з безконтактним керуванням жестами дозволяє встановити необхідний період часу для приготування страв, не торкаючись пристрою. Дуже зручно під час приготування їжі, коли руки забрудниться. Усі …
Analog-to-Digital Converter with Computation Technical BriefViews: 1508 Аналого-цифровой преобразователь с вычислительным модулем. ВВЕДЕНИЕ Аналого-цифровой преобразователь (ADC) с вычислительным модулем (ADC2) в 8-разрядном микроконтроллере Microchip имеет встроенные вычислительные функции, которые обеспечивают функции пост-обработки, такие как передискретизация, …
Arduino LCD + STONE STVI056WT-01 + Strain gaugeViews: 682 Author li grey email: greyli1987@outlook.com The strain assessment instrument is used to assess the degree of corresponding muscle strain by obtaining the muscle surface action potential through silver …
Проект с использованием MCC часть 14Views: 1098 С выводом данных на дисплей мы справились (но могу сразу сказать библиотеку графики к этой статьи пришлось доработать, поэтому в этом проекте она обновлена). У нас на текущем …
MPLAB® Harmony – или как это просто! Часть 1.Views: 3885 Часть первая – Установка Гармонии. Музыкальная тема к статье, слушаем: В начале запуска нового проекта и выбора микроконтроллера стоит задача правильно его сконфигурировать, прежде чем перейти к реализации …
I2C MODULE – PIC18F25K42 Device ID Revision = A001Views: 1206 I2C MODULE Обход ошибок в версии I2C MODULE – PIC18F25K42 Device ID Revision = A001 В Серии K42 применен совершенно новый модуль шины I2C, который позволяет поддерживать все …