for what its worth I tried your code cleaned up a bit and slightly changed to suit a 16f1825
and it works perfectly with nice steady results , could you have a noisy pot or power supply ?


Code:
'****************************************************************
'*  Name    : Nacelle_Steady-On_Lights_12F1840_16Mhz_Int.pbp    *
'*  Author  : Ross A. Waddell                                   *
'*  Notice  : Copyright (c) 2016                                *
'*          : All Rights Reserved                               *
'*  Date    : 02/02/2016                                        *
'*  Version : 1.0                                               *
'*  Notes   : Steady-on nacelle engine lights (TOS Enterprise)  *
'*          :                                                   *
'****************************************************************
#CONFIG
             __config        _CONFIG1,    _FOSC_INTOSC & _CP_OFF & _WDTE_ON  &  _PWRTE_ON  &  _MCLRE_ON  & _CLKOUTEN_OFF
              __config      _CONFIG2, _PLLEN_ON & _LVP_OFF            
#ENDCONFIG
 
OSCCON=$70 
DEFINE OSC 32

ANSELA    = %00001000        ; Analog on PORTA.4(AN3) only

ADCON1    = %10100000        ; Right-justified results in 10-bits; Fosc/32 as timer;
                             ; VREF is connected to VDD

TRISA     = %111110	     ' Make all pins input except for RA0 (ser out)
trisc=   %11011111                            '  ccp1

ADCInVal       VAR WORD      ; stores ADCIN result read from trim pot
LEDBrVal       VAR WORD
FadeInPause    CON 25        ; Pause during LED fade in

i              VAR WORD

' ***************************************************************
' Set up PWM on CCP1
' ***************************************************************

CCP1CON = %00001100          ; Use CCP1 in PWM mode

' Set duty cycle registers initially to 0
CCP1CON.4 = 0
CCP1CON.5 = 0
CCPR1L    = 0
 lata.0=1
 pause 2000
' ************************
' CCP1 uses TMR2
' ************************
                       
T2CON   = %00000110         ; Timer2 on with 1:16 prescaler
PR2     = 255               ; For 16Mhz OSC the desired output freq of 976.563Hz
                            ; is achieved with this PR2 value (10-bit resolution
                            ; with 1:16 prescaler)
                            
MaxDuty       VAR WORD      ; According to Darrel:
                            ;   MaxDuty = (PR2 + 1) * 4

MaxDuty = (PR2 + 1) * 4     ; 1024
MinDuty       CON 0         ; Minimum brightness for this application
MaxADCVal     CON 1023      ; 255 for 8-bit; 1023 for 10-bit
compVal       VAR WORD      ; stores last-changed ADC value


CounterA      var BYTE		' Just a BYTE Temporary working variable
DataW         var WORD		' Just a WORD Temporary working variable
RawData       var WORD [16]	' Array holding ADC Result


 serout2 PORTA.0,84, ["ready",13,10 ]



GOSUB DO_ADCIN_Chk
LEDBrVal = ADCInVal
compVal = LEDBrVal

FOR i = 0 to LEDBrVal
    CCP1CON.4 = i.0
    CCP1CON.5 = i.1
    CCPR1L    = i >> 2 
            
    pause FadeInPause

  
NEXT i


Main:
    GOSUB DO_ADCIN_Chk
    PAUSE 100

    IF ADCInVal <> compVal THEN
    
        LEDBrVal = ADCInVal
        compVal = LEDBrVal
        gosub ChngLEDBrightness
    ENDIF
GOTO Main

'*********** Read ADC or USART Rc inputs *******************************
Do_ADCIN_Chk:
'	Stuff 16 Element WORD Array full of ADC values
'	----------------------------------------------
	For CounterA=0 to 15
        ADCON0    = %00001101 ' Select Channe3, Turn-On A/D
	
		Pauseus 50			     ' Wait for channel to setup
        ADCON0.1 = 1			 ' Start conversion
		While ADCON0.1=1:Wend	 ' Wait for conversion
		DataW.HighByte=ADRESH	 ' Read variable from ADC and save
		DataW.LowByte=ADRESL
		RawData(CounterA)=DataW
	Next CounterA

'	Sort ADC Input
'	--------------
	CounterA=0
    GetADCSortLoop:
	If RawData(CounterA+1) < RawData(CounterA) then
		DataW=RawData(CounterA)
		RawData(CounterA)=RawData(CounterA+1)
		RawData(CounterA+1)=DataW
		If CounterA>0 then CounterA=CounterA-2
	endif
	CounterA=CounterA+1
	If CounterA < 15 then goto GetADCSortLoop

'	Quanticise, discarding top and bottom FOUR elements
'	----------------------------------------------------
	DataW=0
	For CounterA=4 to 11
		DataW=DataW+RawData(CounterA)
	Next CounterA
	ADCInVal=DataW>>3			' Divide Result by EIGHT

     serout2 PORTA.0,84, ["adc ",#ADCInVal,13,10 ]

return


'*********** Set duty registers ****************************************
ChngLEDBrightness:
    CCP1CON.4 = LEDBrVal.0
    CCP1CON.5 = LEDBrVal.1
    CCPR1L    = LEDBrVal >> 2
    
RETURN