I don't have link, but I have saved include file
Code:
'http://www.darreltaylor.com/DT_Analog/
'****************************************************************
'* Name : DT_Analog.pbp *
'* Author : Darrel Taylor *
'* Notice : Copyright (c) 2009 *
'* Date : 5/23/2009 *
'* Version : 1.0 *
'* Notes : Up to 16 bit A/D with a 10-bit A/D converter *
'* : http://en.wikipedia.org/wiki/Oversampling *
'****************************************************************
GOTO OverDTAnalog
ADchan VAR BYTE ; global - A/D channel to use
ADbits VAR BYTE ; global - # of bits in result
ADvalue VAR WORD ; global - the final A/D value
ADmax VAR WORD ; global - Max A/D value at this resolution
;--------------------
DTadCount VAR WORD ; local - sample count
DTadDivisor VAR WORD ; local - averaging divisor
DTadShiftR VAR BYTE ; local - bits to shift for UnderSampling
#IF __LONG__
DTadAccum VAR LONG ; local - 32-bit sample accumulator
#ELSE
DTadAccum VAR WORD[2] ; local - 32-bit sample accumulator
#ENDIF
;---------------------------------------------------------------------------
GetADC:
IF (ADbits >= 10) THEN
DTadShiftR = 0 ; 10 11 12 13 14 15 16
LOOKUP2 ADbits-10,[ 1, 4,16,64,256,1024,4096],DTadCount
LOOKUP ADbits-10,[ 1, 2, 4, 8, 16, 32, 64],DTadDivisor
ELSE
DTadCount = 1
DTadDivisor = 1
DTadShiftR = 10 - ADbits
ENDIF
LOOKUP2 ADbits,[0,1,3,7,15,31,63,127,255,511,1023, _
2046,4092,8184,16368,32736,65472],ADmax
DTadAccum = 0 : DTadAccum[1] = 0 ; clear the accumulator
DTadLoop:
ADCIN ADchan, ADvalue ; get 10-bit sample
DTadAccum = DTadAccum + ADvalue ; add it to the accumulator
#IF not __LONG__
IF DTadAccum < ADvalue THEN ; if low word overflowed
DTadAccum[1] = DTadAccum[1] + 1 ; increment the high word
ENDIF
#ENDIF
DTadCount = DTadCount - 1 ; done with this sample
IF DTadCount > 0 THEN DTadLoop ; loop if not done with ALL samples
#IF __LONG__
ADvalue = DTadAccum / DTadDivisor
#ELSE
R2 = DTadAccum ; put 32-bit accumulated value in PBP
R0 = DTadAccum[1] ; registers, prepare for DIV32
ADvalue = DIV32 DTadDivisor ; get the average value
#ENDIF
ADvalue = ADvalue >> DTadShiftR ; Shift right if < 10-bit
RETURN
OverDTAnalog:
EDIT:
Here is saved page
http://web.archive.org/web/201201210...com/DT_Analog/
Bookmarks