Grautier.com - Projekte

Geht nicht gibt es nicht !!!

Benutzer-Werkzeuge

Webseiten-Werkzeuge


elektronik:sensoren:touch

Touchscreen am PIC16F87X

Beschreibung

Hi, in einigen Foren geistert das Gerücht rum das ein Touchscreen nicht direkt an einen PIC zu betreiben ist, also möchte ich dieses hiermit Widerlegen es geht komplett ohne Bauteile so wie es in vielen AVR Projekten schon gemacht wird.

Alternativ geht es auch mit einer extra Schaltung die ich auch getestet habe: http://www.stefan-buchgeher.info/elektronik/touchpanel/touchpanel.html

Dazu sollte man sich mal anschauen wie so ein Touchscreen Funktioniert grob gesehen ist es ein Spannungsteiler mit veränderbaren Widerständen.

Anleitung

Dazu möchte ich erstmal zwei Bilder zeigen einmal wie der Touchscreen aufgebaut ist und dann das Ersatzschaltbild:

Die Verbindung zwischen den beiden Folien zeigt den Druckpunkt beim berühren, im Ersatzschaltbild ist das der Mittelpunkt, will man z.b. die X-Achse messen legt man Y+ auf VDD, X- auf GND und Y+ auf GND gemessen wird an Y-.

Hier die beiden Möglichkeiten zum Messen:
X-Achse: X+ und Y-=GND, Y+=VDD und X- wird zum Messen benutzt.
Y-Achse: Y+ und X-=GND, X+=VDD und Y- wird zum Messen benutzt.

Software

Hier ein kleines Beispiel

	#define YM	PORTA, 1	; Touch y- ADC
	#define YP	PORTA, 2	; Touch y+ PWR
	#define XP	PORTA, 5	; Touch x+ PWR
	#define XM	PORTA, 3	; Touch x- ADC
 
	cblock	0x70			; Variabeln ab 0x70 setzen.
	xlow	              			; Touch X Pos.
	xhigh				;
	ylow			        	; Touch Y Pos.
	yhigh				;
        exec
portreg	; PORTA				; Alle ADC-Eingänge auf Eingang
	banksel	TRISA			; Zu Bank von TRISA umschalten
	movlw	B'00001011'		; PortA I/O setzen (1=In, 0=Out) (Reinfolge RB7,RB6...)
	movwf	TRISA			; PortA I/O setzen
	banksel	ADCON1			; Zur Bank von ADCON1 umschalten
	movlw	B'10010100'		; Alle Analog VDD=VREF, Right jutyfy, fosc/8, AN0,1,3=AN, AN2,4-7=Dig.
	movwf	ADCON1			; Move w to ADCON1
	banksel	ADCON0			; zu Bank von TRISA umschalten
	movlw	B'01000001'		; Enable ADC
	movwf	ADCON0			; Move w to ADCON0
adc_read
	movlw	D'30'			; Wait Acquisition Time 
	movwf	count
adc_read_loop
	decfsz	count,F
	goto	adc_read_loop
	bsf	ADCON0,GO		; Setze ADCON0,GO, Int A/D Conversation
adc_read_loop_1				; Wen ADC bereit 
	btfsc	ADCON0,GO		; Ist ADCON0,GO = 0 dann ubergehe den nesten Befehl
	goto	adc_read_loop_1		; Warte bis ADC fertig
	return
touch_read
	; Y
	bcf    	YP
	bsf            XP
	bcf    	ADCON0,5		; ADC Auswehlen
	bcf    	ADCON0,4
	bsf    	ADCON0,3
	call   	adc_read		; Read ADC AD1 Daten
	banksel	ADRESL
	movf 	ADRESL,w
	movwf	ylow
	banksel	ADRESH
	movf 	ADRESH,w
	movwf	yhigh
	bcf    	YP
	bcf    	XP
	; X
	bcf    	XP
	bsf    	YP
	bcf    	ADCON0,5	         ; ADC Auswehlen
	bsf    	ADCON0,4
	bsf    	ADCON0,3
	call   	 adc_read		 ; Read ADC AD3 Daten
	banksel	ADRESL
	movf 	ADRESL,w
	movwf	xlow
	banksel	ADRESH
	movf 	ADRESH,w
	movwf	xhigh
	bcf    	YP
	bcf    	XP
	return

sandfrog 2016/09/22 16:19

Diskussion

Geben Sie Ihren Kommentar ein. Wiki-Syntax ist zugelassen:
Y V H M᠎ R
 
elektronik/sensoren/touch.txt · Zuletzt geändert: 02/12/2016 15:17 (Externe Bearbeitung)