thanks for the reply,
I have modified the include file per your direction and no more errors are displayed.
I loaded the sample program from Darrel site.
I am using PIC18f252, pbp 2.50, longs at 40 Mhz clock.
I have CH-1=12 and CH-2=12 on the LCD.
Thanks, Ambrogio
this is the set up:
DEFINE ADC_BIT 10
DEFINE ADC_CLOCK 2
DEFINE ADC_SAMPLEUS 5
ADCON1=%10001101
ADBITS = 12
Main:
FOR ADchan = 0 to 1 ; Do both AN0 and AN1
GOSUB GetADC ; Get A/D value
IF ADchan = 0 THEN
LCDOUT $FE, $80 ; LCD line 1
ELSE
LCDOUT $FE, $C0 ; LCD line 2
ENDIF
LCDOUT "CH-",DEC1 ADchan," = ",DEC ADvalue," "
NEXT ADchan
GOTO Main:
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
DTadAccum VAR WORD[2] ; local - 32-bit sample accumulator
;---------------------------------------------------------------------------
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 DTadAccum < ADvalue THEN ; if low word overflowed
DTadAccum[1] = DTadAccum[1] + 1 ; increment the high word
ENDIF
DTadCount = DTadCount - 1 ; done with this sample
IF DTadCount > 0 THEN DTadLoop ; loop if not done with ALL samples
' R2 = DTadAccum ; put 32-bit accumulated value in PBP
' R0 = DTadAccum[1] ; registers, prepare for DIV32
' ADvalue = DIV32 DTadDivisor ; get the average value
Tmp VAR LONG
Tmp.word0 = DTadAccum ; put 32-bit accumulated value in PBP
Tmp.word1= DTadAccum[1] ; registers, prepare for DIV32
ADvalue = Tmp/DTadDivisor ; get the average value
ADvalue = ADvalue >> DTadShiftR ; Shift right if < 10-bit
RETURN
OverDTAnalog:




Bookmarks