For a little more info on the original average routine, and some more explanations, see http://www.pbpgroup.com/modules/wfse...hp?articleid=7
'****************************************************************
'*  Name    : Average_Hyst.pbp                                  *
'*  Author  : Darrel Taylor                                     *
'*  Date    : 7/19/2005                                         *
'*  Version : 3.0                                               *
'*  Notes   : Modified to use Hysteresis                        *
'*          : Use as an INCLUDE file                            *
'****************************************************************
' This routine will keep a "Running Average" of 10-bit Analog Values 
' Instead of adding a bunch of values together and then dividing by the number 
' of samples, it averages each sample into the final result immediately.
' This eliminates the need for 32 bit math.
' To allow it to "Catch up" to large changes, set the FAspread to an 
' acceptable range.
' Simply place the new number in VALUE and GoSub Average 
' The Average (with Hysterisis) will be returned into the same variable VALUE
'---- [ User Options ] ---------------------------------------------------------
HystLevel   CON  7      ' 7 = .7 of the Least Significant Digit
                        '    Valid HystLevel is from 6 to 13
AvgCount    CON  16     ' = Number of samples to average. For best response 
                        '    times, keep AvgCount as small as you can
FAspread    CON  50     ' = Fast Average threshold +/-
                        '  FAspread should be larger than the worst possible
                        '  noise in the A/D conversion.
'-------------------------------------------------------------------------------
AVGchanged  VAR  BIT    ' 1 indicates that the Average Value has changed
                        ' you have to clear this bit after using it
ADavg       VAR  WORD   ' Stores the current Average
ADhyst      VAR  WORD   ' Stores the current Value for Hysterisis
Value       VAR  WORD   ' Input / Output variable to be averaged
spread      CON  FAspread * 10  ' adjust spread *10 for Hyst.
GOTO OverAverage
' -=-=-=-=-=-=  Average Analog values -=-=-=-=-=-=-=-=-=-=
Average:
    Value = Value * 10                      ' Scale value up for hysterisis
    IF Value = ADavg Then NoChange          ' if they're the same, nothing to do 
    IF ABS (Value - ADavg) > spread OR Value < AvgCount Then FastAvg
    IF ABS (Value - ADavg) < AvgCount Then RealClose
    ADavg = ADavg - (ADavg/AvgCount)         ' Subtract 1 samples worth
    ADavg = ADavg + (Value/AvgCount)         ' Add in the new sample portion 
    GoTo AVGok
  FastAvg:                                   ' Catch up to the changing value
    ADavg = Value                            ' Set Average to the current value
    GoTo AVGok
  RealClose:                                 ' Reduce the sample size when
    ADavg = ADavg - (ADavg/(AvgCount/4))     ' the average and the sample are
    ADavg = ADavg + (Value/(AvgCount/4))     ' "Real Close"
  AVGok:
    IF ABS (ADavg - ADhyst) > HystLevel then ' If it changed > HystLevel +/-
        ADhyst = ((ADavg + 5) / 10) * 10     ' Round ADavg to get new Value
        AVGchanged = 1                       ' Indicate that Average changed
    ENDIF   
  NoChange:
    Value = ADhyst / 10                      ' Scale the result down
Return
OverAverage:
'---------------------------------------------------------------


 Menu
 Menu 
			
			
 
			 
			 
			
Re: 16F690 MCLR as Input
many thanks Henrik to clarify this post.
jackberg1 - 27th October 2025, 20:42that make more sense to me now with further test, when the pin RA3
has nothing connected to it, the input is floating thus
when adding a pulldown it's...