using the fvr gets slightly better result [mine is a 3.3v system]

Code:
mean 255
readings 
0000,0000,0000,0000,0000,0000,0000,0000,0000,0000  3600  0000,0000,0000,0000,0000,0000,0000,0000,0000,0000
outliers 0000
mean 255
readings 
0000,0000,0000,0000,0000,0000,0000,0000,0000,0000  3600  0000,0000,0000,0000,0000,0000,0000,0000,0000,0000
outliers 0000
mean 255
readings 
0000,0000,0000,0000,0000,0000,0000,0000,0000,0000  3600  0000,0000,0000,0000,0000,0000,0000,0000,0000,0000
outliers 0000
mean 255
readings 
0000,0000,0000,0000,0000,0000,0000,0000,0000,0000  3600  0000,0000,0000,0000,0000,0000,0000,0000,0000,0000
outliers 0000
mean 255
readings 
0000,0000,0000,0000,0000,0000,0000,0000,0000,0000  3600  0000,0000,0000,0000,0000,0000,0000,0000,0000,0000
outliers 0000
mean 255




Code:
#CONFIG    __config _CONFIG1, _FEXTOSC_OFF & _RSTOSC_HFINT32 & _CLKOUTEN_OFF & _CSWEN_ON & _FCMEN_ON
    __config _CONFIG2, _MCLRE_ON & _PWRTE_OFF & _LPBOREN_OFF & _BOREN_ON & _BORV_LO & _ZCD_OFF & _PPS1WAY_OFF & _STVREN_ON & _DEBUG_OFF
    __config _CONFIG3, _WDTCPS_WDTCPS_11 & _WDTE_ON & _WDTCWS_WDTCWS_7 & _WDTCCS_LFINTOSC
    __config _CONFIG4, _WRT_OFF & _SCANE_available & _LVP_ON
    __config _CONFIG5, _CP_OFF & _CPD_OFF
#ENDCONFIG


    DEFINE OSC 32
    
    DEFINE DEBUG_REG PORTD
    DEFINE DEBUG_BIT 2      ;  if not used for pwr  
    DEFINE DEBUG_BAUD 9600
    DEFINE DEBUG_MODE 0 
    
    DEFINE ADC_BITS 10                 ' 10-bit Analog to digital
    DEFINE ADC_SAMPLEUS 50 ' Set sampling time in uS
    
    ANSELA = % 00000001                      ' Pin A0 = ADC
    TRISA = % 11101111                       ' Pin A4 = LED
    TRISD = % 11111011                       ' DEBUG 
    LATD.2 = 1                              ' DEBUG 
    clear
    LED VAR LATA.4
    i var byte
    j var word
    bucket              var WORD
    ADCinput            var WORD
    mean                var WORD
    buckets             var word[21] 
    outlier             var WORD                       
    LED = 1                                  'Proof of Life 
    PAUSE 2000  
    DEBUG 13,10,"READY",13,10 
    FVRCON = % 10000010;2.048v
    ADCON0 = % 10000100
    ADREF  = % 00000011,fvr
    ADCLK  = 16; faster clk
    LED=0


Mainloop:
    mean = 0
    for i = 0 to 9
    ADCIN 0, ADCinput
    mean = mean + ADCinput
    next
    mean = mean/40 
    DEBUG "mean ",DEC mean,13,10
    for j = 0 to 3599
    ADCIN 0, ADCinput
    ADCinput=ADCinput>>2
    bucket = mean-ADCinput
    i = bucket + 10
    
    if i>20 then  
      outlier =  outlier + 1
    else
      buckets[i]=buckets[i] + 1
    endif
    'DEBUG 13,10,"mean ",DEC mean," i ",dec i," read ",dec ADCinput,13,10
    
    PAUSE 5
    next
    DEBUG "readings " ,13,10
    DEBUG  dec4 buckets[0],",", dec4 buckets[1],","  , dec4 buckets[2],",", dec4 buckets[3],"," , dec4 buckets[4],","
    DEBUG  dec4 buckets[5],",", dec4 buckets[6],","  , dec4 buckets[7],",", dec4 buckets[8],"," , dec4 buckets[9],"  "
    DEBUG  dec4 buckets[10],"  "
    DEBUG  dec4 buckets[11],",", dec4 buckets[12],","  , dec4 buckets[13],",", dec4 buckets[14],"," , dec4 buckets[15],","
    DEBUG  dec4 buckets[16],",", dec4 buckets[17],","  , dec4 buckets[18],",", dec4 buckets[19],"," , dec4 buckets[20],13,10
    DEBUG  "outliers ",dec4 outlier 
    DEBUG  13,10
    for i = 0 to 20
      buckets[i] = 0
    next
    outlier = 0
      
    GOTO Mainloop
end