static SUMMING_TYPE getAverage(AVERAGER * pAverager) { SUMMING_TYPE sum = 0; uint8_t count = 0; if (pAverager) { if (pAverager->iWrite || pAverager->full) { uint8_t n = 0; count = pAverager->full ? pAverager->maxIndex : pAverager->iWrite - 1; for (n = 0; n <= count; n++) { sum += getData(pAverager, n); } } else { sum = 0; } } else { sum = 0; } sum = div_round(sum, count+1); return sum; }
uint16_t POTDIVIDER_GetADCFromResistance(POT_DIVIDER * pDivider, uint32_t resistance) { uint64_t adc = 0UL; if (pDivider) { switch(pDivider->eDividerType) { case FIXED_PULLDOWN: adc = pDivider->maxAdcReading * pDivider->rDivider; adc = div_round(adc, pDivider->rDivider + resistance); break; case FIXED_PULLUP: adc = pDivider->maxAdcReading * (uint64_t)resistance; adc = div_round(adc, pDivider->rDivider + resistance); break; } } return (uint16_t)adc; }
static void show_voltage(void) { uint32_t voltage; adc_init(); voltage = adc_get(AIN_BATTERY); adc_stop(); voltage = div_round(1100l * 1024, voltage); digits[0] = numbers[voltage / 10 / 10 / 10 % 10] | LCD_DOT; digits[1] = numbers[voltage / 10 / 10 % 10]; digits[2] = numbers[voltage / 10 % 10]; digits[3] = numbers[voltage % 10]; if (usb_enabled) digits[3] |= LCD_DOT; }
static uint32_t getOtherResistanceWithFixedPulldown(POT_DIVIDER * pDivider, uint16_t adcReading) { uint32_t resistance = 0UL; if (adcReading == 0) { resistance = POTDIVIDER_GetInfiniteResistance(); } else { // D = U(M/A - 1) = UM/A - U -> avoid precision loss resistance = pDivider->rDivider * pDivider->maxAdcReading; resistance = div_round(resistance, adcReading); resistance -= pDivider->rDivider; } return resistance; }
static uint32_t getOtherResistanceWithFixedPullup(POT_DIVIDER * pDivider, uint16_t adcReading) { uint32_t resistance = pDivider->rDivider * adcReading; resistance = div_round(resistance, (pDivider->maxAdcReading - adcReading)); return resistance; }