Есть 6-битный АЦП,опорное напряжения 2.5В. АЦП двухполярний,тоесть 2.5В - 0 значение, -2.5в -(- 32) и 2.5 значение 32. Измеряеться напряжение источника питания. Мне нужно устреднять значение ацп,но не знаю как правильно сделать. datasheet for ADC: http://www.cypress.com/?docID=40538 Среда разработки PSoC Disigner 5.3
// Первый вариант (простое арифметическе среднее). int8_t get_average() { int16_t acc; uint8_t i;
for (acc = 0, i = 0; i < 16; i++) { acc += get_sample(); }
// Если кол-во выборок равно степени 2, то можно заменить на это // (если сдвиг вправо реализован как арифметический). // return (acc + 8) >> 4; return (acc + 8) / 16; }
// Второй вариант (движущееся арифметическе среднее). int8_t get_average(int8_t value) { static uint8_t i = 0; static int16_t acc = 0; static int8_t sample[16] = {0};
// Если кол-во выборок равно степени 2, то можно заменить на это. // i = i + 1 & 15; if (++i >= 16) i = 0;
// Если кол-во выборок равно степени 2, то можно заменить на это // (если сдвиг вправо реализован как арифметический). // return (acc + 8) >> 4; return (acc + 8) / 16; }
xVekx писал(а):Вспомнил что тут на 6 бите минус, поправил код .
в даташите написано что минус - 7 бит: http://www.cypress.com/?docID=40538 Но совсем не ясно в каком коде отрицательное напряжение - прямом,обратном или дополнительном...
CHAR SAR6_cGetSample(void) Description: Performs a conversion, returning a 2’s complement value representing the ratio of the input voltage to the reference voltage, both relative to analog ground. Смотри внимательнее. Скопировал из указанного тобой даташита.