Цитата(ivainc1789 @ Oct 26 2007, 21:25)

Код
signed int AdcResult;
. . . . .
for(i=0;i<10;i++)
{
SETBIT(ADCSRA,ADSC);while(CHKBIT(ADCSRA,ADSC));
tmp1 = ADC;
if (CHKBIT(tmp1,9)) tmp1|=0xFC00;
AdcSumma += tmp1;
}
AdcResult = AdcSumma/10;
while(1);
}
Оператор if(CHKBIT(tmp1,9)) tmp1|=0xFC00; здесь использовать нельзя, уберите.
Понятно и ёжику, что для усреднения надо сложить 10 результатов измерений, неважно положительные они или отрицательные, и поделить на 10, а вы вдруг хотите сделать все слагаемые положительными. С какого припрыгу?
Цитата(ivainc1789 @ Oct 26 2007, 21:25)

Смотрел через EEPROM все 10 значений как unsigned int - там большинство результатов 0x3FF, реже 0x000
Ничего не понимаю. Если у вас -7 мВ на входе, то код должен быть равен -3 или 0хFFFD.
Цитата(ivainc1789 @ Oct 26 2007, 21:25)

Вижу необходимость переходить к float. Верно ли?
А что это вам даст? Сначала получите reasonable значения в целых числах.
Вообще, для получения хорошей точности надо бы слабые диффсигналы мерять с Ку=20 или даже Ку=32, потом поделить на 20 или 32, заодно учесть смещение. А смещение, кстати, лучше мерять непосредственно перед измерением диффсигнала.