Views: 784
УСРЕДНЕНИЕ – извечная проблема, кода данные на входе пляшут и надо выделить среднее значение.
Классически такая задача решается когда, в каком то массиве накапливаются данные, а потом находиться среднее из полученных данных. Но наличие массива может быть ограниченно размерам памяти микроконтроллера. поэму я в Инете нашел новый принцип и доработал его для этой задачи.
Суть заключается в чем:
Мы получаем данные, затем берем, например 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 вполне приемлемо для многих проектов, где необходимо сгладить, усреднить, какие то данные например, с АЦП или с емкостного сенсора.
Это может быть интересно
- Контроллер управления светодиодным освещением с дистанционным управлениемViews: 2017 Все активнее светодиоды входят в нашу жизнь. Всё эффективнее становится светодиодное освещение. Всё ниже опускаются цены. Всё больше появляется возможностей получения сочных цветов, простоты в управлении. Всё чаще …
- Самый простой диммер для светодиодного освещенияViews: 3035 Светодиоды все больше входят в нашу жизнь как источники освещения и как само собой разумеющееся, это вопрос регулировки яркости. Существует множество схемных решений, но в нашем варианте мы …
- NS108-5050-16bit от NewstarViews: 599 Кто уже использует в своих проектах адресуемые светодиоды хорошо знакомы с такими как WS2812 и им подобные. Эти светодиоды для управления используют однопроводную шину. Из-за этого пропускная способность …
- Проект с использованием MCC часть 02Views: 2295 Когда мы запустили конфигуратор, самое главное понять, что с этим делать и как проверить, то что мы делаем работает или нет. Для начала настроим регистры конфигурации микроконтроллера и настроем …
- Стабилизатор тока для светодиодов SN3350Views: 2601 SN3350 ближайший аналог ZXLD1350 Как собрать готовый вариант, читайте во второй части – http://catcatcat.d-lan.dp.ua/stabilizator-toka-na-sn3350-chast-2/ 40V драйвер светодиодов с внутренним ключом SN3350 – импульсный понижающий преобразователь, разработанный для того, чтобы эффективно управлять одним или …
- Altium Designer – создание рисунков на печатной платеViews: 3286 Для создание рисунков на печатной платы в Altium Designer можно использовать возможность использовать в Altium Designer сторонних скриптов. Мне возможность эта очень понравилась и я решил её расшарить …
- Светодиоды со встроенным драйвером WS2812BViews: 931 Производитель http://www.world-semi.com Краткое описание продукции фирмы Каталог продукции” catcatcat_ws_19 catcatcat_ws_15 catcatcat_ws_11 catcatcat_ws_07 catcatcat_ws_03 catcatcat_ws_18 catcatcat_ws_14 catcatcat_ws_10 catcatcat_ws_06 catcatcat_ws_02 catcatcat_ws_05 catcatcat_ws_09 catcatcat_ws_13 catcatcat_ws_17 catcatcat_ws_16 catcatcat_ws_12 catcatcat_ws_08 catcatcat_ws_04 catcatcat_ws_01 This jQuery …
- Бегущие огни (ch-bo-36)Views: 2438 Проект на PIC-микроконтроллере PIC16F648A. Количество каналов 36. Для индикации используется подключение по матрице 6х6. Расположение светодиодов в одну линию. Все эффекты написаны для возможности увеличения количества светодиодов. Рекомендуется …
- Дисплей KD035C-3A подключение и управлениеViews: 711 Дисплей KD035C-3A производиться компанией SHENZHEN STARTEK ELECTRONIC TECHNOLOGY CO.,LTD Характеристики Параметр Спецификация Единицы измерения Размер дисплея 70.08(H)*52.56(V) (3.5inch) mm Тип дисплея TFT active matrix Цветовая гамма 65K/262K colors Разрешение …
- Проект с использованием MCC часть 15Views: 1531 EUSART – Универсальный асинхронный приёмопередатчик (УАПП, англ. Universal Asynchronous Receiver-Transmitter, UART) — узел вычислительных устройств, предназначенный для организации связи с другими цифровыми устройствами. … читать на вики. Внесем изменения в нашу схему, …