Tried hard to solve this problem, using a timer ... but without succes
.
Any advice will be very appreciated !
Code:
@ __config _XT_OSC & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _BODEN_ON
DEFINE OSC 4
CMCON = 7
TRISIO = %00001011
INTCON = 0
IOC = 0
GPIO = 0
ANSEL = %00110001
ADCON0.7 = 1
nr var word
adca var word
adcb var word
ADCValue var WORD ' Final ADC Result
CounterA var BYTE ' Just a BYTE Temporary working variable
DataW var WORD ' Just a WORD Temporary working variable
RawData var word [10] ' Array holding ADC Result
TIP_press VAR BIT
j VAR word
GPIO.2 = 0
GIE VAR INTCON.7
GPIE VAR INTCON.3
GPIF VAR INTCON.0
Timer1 var word EXT :@Timer1 = TMR1L
TMR1ON VAR T1CON.0
TMR1IF VAR PIR1.0
LONGPRESS VAR BIT
T1CON = %00110100
T1COUNT VAR BYTE
GIE =0
GPIE=0
IOC.0 = 1
ok var bit
;============================================================================
Main:
ok=0
tip_press=0
TIMER1 =3037
T1COUNT=0
LONGPRESS=0
nr=1
ADCON0 = %10000001
Pauseus 50
ADCON0.1 = 1
While ADCON0.1=1:Wend
DataW.HighByte=ADRESH
DataW.LowByte=ADRESL
if dataw < 631 then
TMR1ON=1
pause 1
WHILE dataw < 631
T1COUNT=T1COUNT + 1
CALL CHECK
WEND
IF LONGPRESS = 1 THEN
TIP_press = 1
ELSE
TIP_press = 0
ENDIF
T1COUNT = 0
pause 1
call achizitie
endif
gosub efectuez
gpif = 0
GOTO MAIN
achizitie:
for nr = 1 to 2
For CounterA=0 to 9
ADCON0 = %10000001
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
CounterA=0
Gosub Getsort
next nr
return
CHECK:
IF TMR1IF then
TMR1IF = 0
Timer1 = 3037
T1Count = T1Count + 1
if T1Count = 2 then
TMR1ON = 0
T1Count = 0
LongPress = 1
endif
ENDIF
RETURN
;============================================================================
GetSort:
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<10 then goto GetSort
DataW=0
For CounterA=4 to 7
DataW=DataW+RawData(CounterA)
Next CounterA
ADCValue=DataW>>2
if nr = 1 then
adca = adcvalue
else
adcb = adcvalue
endif
if adcb=adca then ok = 1
Return
;============================================================================
efectuez:
if ok=1 then
IF adcb > 300 AND adcb < 350 THEN
if tip_press = 1 then
gpio.2 = 1 : pause 2000 : gpio.2 = 0
else
gpio.2 = 1 : pause 500 : gpio.2 = 0
endif
endif
endif
Return
;============================================================================
Bookmarks