Views: 821
УСРЕДНЕНИЕ – извечная проблема, кода данные на входе пляшут и надо выделить среднее значение.
Классически такая задача решается когда, в каком то массиве накапливаются данные, а потом находиться среднее из полученных данных. Но наличие массива может быть ограниченно размерам памяти микроконтроллера. поэму я в Инете нашел новый принцип и доработал его для этой задачи.
Суть заключается в чем:
Мы получаем данные, затем берем, например 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 PIC24 – модуль OUTPUT COMPARE – в режиме генератора звуковых сигналовViews: 801 При проектировании простых устройств автоматики, часто необходимо иметь механизм звукового оповещения. Самый верхний уровень, это формирование голосовых сообщений, но об этом, как то по позже… В самом примитивном …
OLED RET012864E/REX012864JViews: 1593 RET012864E/REX012864J ОЛЕД индикатор производитель Raystar-Optronics приобретался в http://www.microchip.ua/ к сожалению никакой информации на сайте поставщика нет. Поэтому решил работу с этой версией индикатора на драйвере SSD1305 предоставить на своем сайте. Так как …
CLUBBEST – reasoning on the visualization of music.Views: 317 ВІД ЗАХОДУ ДО СВІТАНКУ АБО ПОБАЧИТИ МУЗИКУ. Час доби, коли почуття людини загострюються, – це час від заходу до світанку. В цей час людина відкрита для …
MAX7219/21 и 8х8 LED дисплеиViews: 1059 MAX7219, MAX7221 предназначены для вывода информации на 8 разрядов семисегментного индикатора, но на нем легко организовать вывод на светодиодные индикаторы 8х8. продолжение следует…. Это может быть интересно
DIXELL XWEB500D-EVO + RUT900 или как пробить NAT-серверViews: 1155 Когда необходимо под какой нибудь контроллер имеющий вэб сервер в инет, то нужен статический IP, что оказалось проблемой при работе с операторами сотовых сетей, конкретно с оператором сети …
Дифференциальный терморегуляторViews: 4142 Дифференциальный терморегулятор ch-3020 Назначение. Ch-c3020 представляет собой дифференциальный терморегулятор. Основное назначение солнечные системы горячего водоснабжения, а также вентиляционные системы управление притоком свежего воздуха. Контроллер позволяет работать пяти режимах. …
Бегущие огни на WS2812BViews: 5020 В настоящее время большой популярностью стали пользоваться светодиоды со встроенным драйвером WS2812B. Текущий проект предназначен показать возможность использования и управления этими светодиодами. Это и проект и исследование по …
Ссылки на интересные источникиViews: 976 Сбор 3D моделей от André L’Hérault конденсаторы, резисторы, индуктивности dropbox IPC-SM-782 Surface Mount Design and Land Pattern Standard Видео уроки по Altium designer Alexey Sabunin https://www.youtube.com/channel/UCG7N5CqXpyK8nQjr1EmMgng Сергей Булавинов https://www.youtube.com/channel/UCISAMXRnN_Qw9UTjUwZI1Jw Robert Feranec https://www.youtube.com/user/matarofe …
Универсальный терморегулятор ch-c3000Views: 3206 Терморегулятор ch-c3000 предназначен для управления системами регулирования температуры в пределах от – (минус) 55 до + 125 С. Регулятор может использоваться как в системах отопления, так и в …
MTouch® Модуль Емкостной Библиотеки для MPLAB®X Code Configurator (MCC)Views: 1390 Введение MTouch ® Модуль Емкостной Библиотеки для MPLAB ® X Code Configurator (MCC) позволяет быстро и легко генерировать решение кода на Cи для емкостной сенсорной кнопки, датчика приближения и слайдера.