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

Re: Has anyone tried AI with PICBASIC
Yes sure.
CuriousOne - 11th April 2026, 20:35I asked claude, why it and other AI agents make same error with PBP variable definitions and other syntax issues, and as it said, this is because that PBP syntax is very similar to Visual...