Exemple #1
0
static inline unsigned vbatt_adjust(struct ads7846 *ts, ssize_t v)
{
    unsigned retval = vaux_adjust(ts, v);

    /* ads7846 has a resistor ladder to scale this signal down */
    if (ts->model == 7846)
        retval *= 4;
    return retval;
}
Exemple #2
0
static inline unsigned vbatt_adjust(struct ak4182 *ts, ssize_t v)
{
#if 0
	unsigned retval = vaux_adjust(ts, v);

	/* ak4182 has a resistor ladder to scale this signal down */
	if (ts->model == 4182)
		retval *= 4;
	return retval;
#endif

	unsigned retval,vbatt[10],average;
	int i,delta;
	unsigned max = 0,min = 100000,sum =0;
	if (ts->model == 4182) {
		for (i=0;i<10;i++) {
			retval = vaux_adjust(ts,v);
			retval *= 4;
			vbatt[i] = retval;
		}
	}
	for (i=0;i<10;i++) {
		max = max > vbatt[i]? max : vbatt[i];
		min = min < vbatt[i]? min : vbatt[i];
		sum += vbatt[i];
	}
	average = (sum -min -max) / 8;
	if (average <3250) delta = (-32)*average/44+2431;
	else if (average>=3250 && average <3487) delta = 36*average/237-425;
	else if (average>=3487 && average <3555) delta = (-24)*average/68+1334;
	else if (average>=3555 && average <3682) delta = 44*average/127-1151;
	else if (average>=3682 && average <3840) delta = (-100)*average/158+2454;
	else if (average>=3840 && average <4058) delta = 44*average/218-751;
	else delta=(-4)*average/108+218;

	delta = delta/2;
	
	if (abs(average - max)<delta && abs(average - min)<delta) {	
		retval = 1000*(average - 139)/959;
		return retval;
	}
	else return 0;
}