http://www.eetasia.com/ARTICLES/2004...URCES=DOWNLOAD
Before you start reading the touchscreen coordinates, you need to know if the screen has been touched. By having 5V at Y+ and 0V at X- you monitor if the screen was touched. The setup is as follows
And the code is
Code:
START:
'################ START READING AVERAGE PRESSURE VALUE ################
TRISA = 001001 ' Set Y+ (portA.2, AN2) and X- (portA.1, AN1) as outputs
' and Y- (portA.3, AN3) and X+ (portA.0, AN0) as inputs
low PORTA.1 ' Set X- = 0V
high PORTA.2 ' Set Y+ = 5V
ADCON0 = 000001 ' Bits(5-2): 0000=AN0. Start sampling at X+
pauseus 10
ADCON0.1 = 1 ' Stops or continues sampling depending on ADCON2 bits(5-3),
' then begins conversion
GOSUB CONVERSION_ROUTINE ' Obtain value for A/D conversion resolution
PRESSURE_XP = RESOLUTION ' Obtain PRESSURE_XP from X+ sampling, X- = 0V, and Y+ = 5V
ADCON0 = 001101 ' Bits(5-2): 0011=AN3. Start sampling at Y-
pauseus 10
ADCON0.1 = 1 ' Stops or continues sampling depending on ADCON2 bits(5-3),
' then begins conversion
GOSUB CONVERSION_ROUTINE ' Obtain value for A/D conversion resolution
PRESSURE_YM = RESOLUTION ' Obtain PRESSURE_YM from Y- sampling, X- = 0V, and Y+ = 5V
IF (PRESSURE_XP > 24) AND (PRESSURE_YM < 1000) THEN ' THE TOUCHSCREEN HAVE BEEN TOUCHED
GOSUB READ_COORDINATES
gosub CONVERT_TO_PIXELS
ENDIF
LCDOUT $FE, 1 ' Clear LCD
LCDOUT $FE,2,"X=",DEC5 X_VALUE,", Y=",DEC5 Y_VALUE ' DISPLAYS A/D CONVERSION VALUES
LCDOUT $FE,$C0,"P1=",DEC4 PRESSURE_XP,", P2=",DEC4 PRESSURE_YM
GOTO START
Code:
IF (PRESSURE_XP > 24) AND (PRESSURE_YM < 1000) THEN ' THE TOUCHSCREEN HAVE BEEN TOUCHED
And the code is
Code:
'****************************************************************
'* READ X AND Y VALUES SUBROUTINE *
'****************************************************************
READ_COORDINATES:
' PORTA.0 (AN0) -> X+
' PORTA.1 (AN1) -> X-
' PORTA.2 (AN2) -> Y+
' PORTA.3 (AN3) -> Y-
'################ READ AVERAGE X-VALUE ################
TRISA = 000011 ' Set X+ (portA.0, AN0) and X- (portA.1, AN1) as inputs
' and Y+ (portA.2, AN2) and Y- (portA.3, AN3) as outputs
low PORTA.3 ' Set Y- = 0V
high PORTA.2 ' Set Y+ = 5V
ADCON0 = 000001 ' Bits(5-2): 0000=AN0. Start sampling at X+
pauseus 10
ADCON0.1 = 1 ' Stops or continues sampling depending on ADCON2 bits(5-3),
' then begins conversion
GOSUB CONVERSION_ROUTINE ' Obtain value for A/D conversion resolution
X_VALUE = RESOLUTION ' Obtain X_VALUE from X+ sampling, Y- = 0V, and Y+ = 5V
ADCON0 = 000101 ' Bits(5-2): 0001=AN1. Start sampling at X-
pauseus 10
ADCON0.1 = 1 ' Stops or continues sampling depending on ADCON2 bits(5-3),
' then begins conversion
GOSUB CONVERSION_ROUTINE ' Obtain value for A/D conversion resolution
X_VALUE = (X_VALUE + RESOLUTION) ' Obtain X_VALUE from X- sampling, Y- = 0V, and Y+ = 5V
'################ READ AVERAGE Y-VALUE ################
TRISA = 001100 ' Set X+ (portA.0, AN0) and X- (portA.1, AN1) as outputs
' and Y+ (portA.2, AN2) and Y- (portA.3, AN3) as inputs
low PORTA.1 ' Set X- = 0V
high PORTA.0 ' Set X+ = 5V
ADCON0 = 001001 ' Bits(5-2): 0010=AN2. Start sampling at Y+
pauseus 10
ADCON0.1 = 1 ' Stops or continues sampling depending on ADCON2 bits(5-3),
' then begins conversion
GOSUB CONVERSION_ROUTINE ' Obtain value for A/D conversion resolution
Y_VALUE = RESOLUTION ' Obtain Y_VALUE from Y+ sampling, X- = 0V, and X+ = 5V
ADCON0 = 001101 ' Bits(5-2): 0011=AN3. Start sampling at Y-
pauseus 10
ADCON0.1 = 1 ' Stops or continues sampling depending on ADCON2 bits(5-3),
' then begins conversion
GOSUB CONVERSION_ROUTINE ' Obtain value for A/D conversion resolution
Y_VALUE = (Y_VALUE + RESOLUTION) ' Obtain Y_VALUE from Y- sampling, X- = 0V, and X+ = 5V
RETURN
'****************************************************************
'* CONVERSION SUBROUTINE *
'****************************************************************
CONVERSION_ROUTINE:
REPEAT ' Wait until conversion is finished. When finished ADCON0.1 will be =0
PAUSEUS 10
CONV_STATUS = ADCON0.1
UNTIL CONV_STATUS = 0
RESOLUTION.BYTE0 = ADRESL : RESOLUTION.BYTE1 = ADRESH ' READ A/D CONVERSION VALUE
RETURN
Code:
'****************************************************************
'* CONVERT_TO_PIXELS ROUTINE *
'****************************************************************
CONVERT_TO_PIXELS:
'Ax, Bx, Ay, and By should be found experimentally
X_VALUE = Ax * X_VALUE + Bx
Y_VALUE = Ay * Y_VALUE + By
RETURN


Menu

16F690 MCLR as Input
Hello everyone,
jackberg1 Today, 15:36a very basic question,
I have a 16F690 with the RA3 MCLR configured as input, and the RA3 pin
is connected to a 4k7 resistor pulldown and a switch tied to the VDD and it's...