Bei Banggood gibt es unter der Bestellnummer SKU023939 ein Austausch-Touchpad für den Nintendo DS für momentan 1.89€ . Dieses besteht aus einem widerstandssensitivem Touchscreen in der nutzbaren Größe ~ 6.5cm x 5cm. Angeschlossen wird das Pad über einen Folienstecker; beziehbar aus div. Quellen im Internet, ich habe einfach Kupfereinzellitzen angelötet und auf einen Pfostenstecker geführt.
(Quelle: http://www.microbuilder.eu/Tutorials/LPC2148/ADC/NDSTouchScreen.aspx)
Kombiniert man diesen Touchscreen mit einem (grafischen) LCD oder im einfachsten Fall einem hinterlegten Papier mit aufgemalten Schaltflächen, hat man auf einfache und effiziente Weise eine sehr flexible Eingabemöglichkeit :-)
Zum Auslesen muss an zwei Pins ein Spannung angelegt und über einen weitern Pin gemessen werden. Damit kann man auf einfache Art die x und y-Position auslesen. Etwas kniffliger ist dabei nur, dass die Auswahl der Pins dynamisch (also für x- und y-Bestimmung) geändert werden muss:
Ob an Y2 oder Y2 gemessen wird ist egal, wichtig ist nur den zweiten Pin nicht zu beschalten, sprich hochohmig zu machen.
Die zu erwartenden Widerstände liegen - je nach Position - bei ca 500-1.3k Ohm, gemessen an den ADC Anschlüssen gegenüber der VCC/GND Versorgung. Wird nichts gedrückt, floated der entsprechende ADC-Pin
Ein einfaches Anwendungsbeispiel (lese und gebe Position aus) in Verbindung mit meinem ATMega8 Modul und einem LCD kann als
Bascom-Code hier entnommen werden:$Regfile="m8def.dat"
$Crystal=8000000$hwstack=40$swstack=16$framesize=32' ------------------------------- Initialisierungen' LCD Config Lcdpin = Pin , Db4 = Portd.7 , Db5 = Portd.6 , Db6 = Portd.5 , Db7 = Portd.4 , E = Portb.1 , Rs = Portb.0 Config Lcd = 16 * 2 initlcd Cls Cursor Off' ADC Config Adc = Single , Prescaler = Auto , Reference = avcc Start Adc' Pins LCDLight alias portb.2:config LCDLight = output:set lcdlight' ------------------------------- Variablendeklaration dim pos(2) as word' ------------------------------- Programmbeginn ' X1 Y2 X2 Y1 ' C.2 C.3 D.3 D.2 ' 12 11 14 13 'measure X: VCC ADC GND -- 'measure Y: ADC VCC -- GND ' ' PC2/3 per PullDown Widerstand (10k) auf GND ziehen, damit stabiles Ergebnis und Erkennung von "Nicht gedrückt" erfoglt lcd "Touchscreen" lowerline lcd version() wait 1 cls do ' bei den Deklarationen der Ein/Ausgänge erst auf Eingang setzten, ' da sonst "Kurschluss" vorkommen kann ' lese X Position ddrc.3=0:ddrd.2=0 'Y2 und Y1 auf Eingang portc.3=1:portd.2=0 'Y2 pull-up und und Y1 in tristate ddrc.2=1:ddrd.3=1 'X1 und X2 auf Ausgang portc.2=1:portd.3=0' X1=1, X2=0 pos(1)=getadc(3) ' lese ADC Wert ' lese Y Position ddrc.2=0:ddrd.3=0 'X1 und X2 auf Eingang portc.2=1:portd.3=0' X1 pull-up und X2 in tristate ddrc.3=1:ddrd.2=1 'Y2 und Y1 auf Ausgang portc.3=1:portd.2=0 'Y2=1 und Y1=0 pos(2)=getadc(2) ' lese ADC Wert 'Ausgabe upperline lcd "X: "; if pos(1)<30 or pos(1)>1000 then lcd " " else lcd pos(1);" " end if lowerline lcd "Y: "; if pos(2)<30 or pos(2)>1000 then lcd " " else lcd pos(2);" " end if waitms 100 loopDiese Version berücksicht natürlich auch den Zustand, dass nichts gedrückt ist; durch den intern geschalten PullUp an den ADC Eingängen stabilisiert wird der Lesepin stabilisiert. Damit wird bei "nichts gedrückt" je nach Beschaltung min. oder max Spannung gelesen und in diesem Codeschnipsel ausgeblendet.
Dies ist schön in diesem kleinen Video zu sehen:
Nützliche Hilfe zur Programmierung der GPIO Pins gab auch die Seite 422 aus Günter Schmitt's "Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie" ISBN 978-3-486-58988-7, ein Foto der Seite ist auch unten zu finden
Dieses Beispiel zeigt die Funktion mit 16 Schaltflächen. Die "Buttons" sind auf Papier gedruckt und von hinten an den Screen geklebt.
Software (Touchscreen 0.3) und Druckvorlage sind im Downloadbereich zu finden