Das für eine Nintendo-Spielkonsole erhältliche Modell "NDS Touchscreen" passt maßlich ganz gut auf den sichtbaren Displayausschnitt im Ping Pong Gehäuse. Hier soll das Prinzip gezeigt werden, um die Auswertung des Touchscreens durchführen zu können. Durch Druck auf den Touchscreen oberhalb einer LED kann diese eingeschaltet und somit ein Muster auf das LED-Display gezeichnet werden.
Es wird ein zusätzlicher Taster (1-poliger Schließer) benötigt, der zwischen PortD.3 (also Lötpad D3) und GND angeschlossen wird. Der benötigte Pullup-Widerstand wird im Controller intern hinzugeschaltet.
Außerdem natürlich noch der NDS Touchscreen (Bezugsquelle siehe [2]). Es handelt es sich um ein resistives Touchpanel mit 4 Anschlüssen, die in Form eines Folienleiterkabels herausgeführt sind. Zur Kontaktierung kann man vorsichtig Fädeldrähte anlöten, wobei darauf zu ahcten ist, dass keine zu große Hitzeeinwirkung entsteht und die Lötzeit möglichst kurz sein sollte. Im Bild ist die Pinbelegung zu sehen, der Touchscreen liegt dabei auf dem Rücken bei Sicht auf die Kontaktflächen des Folienleiterkabels.
Die Verdrahtung zwischen dem Touchscreen und der Ping Pong Platine wird folgendermaßen durchgeführt:
X1 - C4
Y1 - C5
X2 - B6
Y2 - B7
Optional kann Pin TxD0 (Lötpad D1) des Atmega8 auf der Ping Pong Platine über einen geeigneten Pegelwandler mit einer RS232-Schnittstelle des PCs verbunden werden. Hierüber können dann bei gedrücktem Touch die momentanen x- und y-Koordinaten mit einem Terminalprogramm angezeigt werden. Es kann entweder eine Standardschaltung mit einem MAX232 verwendet werden oder am besten ein über USB angeschlossener virtueller COM-Port.
Man kann beispielsweise ein geeignetes Handydatenkabel verwenden, z.B. das Modell "KQ-U8A" für das Handy "Siemens C55". Vorteil: meistens ist gleichzeitig noch die 5V Spannungsversorgung des USB-Ports mit herausgeführt, über die man dann die Ping Pong Platine direkt versorgen kann.
2. Touchscreen Auswertung
Beim verwendeten Touchscreen handelt es sich um ein analoges resistives Touchpanel mit 4 Anschlüssen. Es sind 2 übereinandergelegte Folien vorhanden, wobei eine wie ein Widerstand in x-Richtung und die andere wie ein Widerstand in y-Richtung wirkt.
Wenn auf den Touchscreen gedrückt wird, erfolgt eine Verbindung am Berührungspunkt zwischen den beiden Folien.
In der Skizze ist dies veranschaulicht, diese stammt aus einer Application Note von Atmel [2].
Die Auswertung geschieht folgendermaßen:
Zuerst wird in x-Richtung über die Mikrocontroller-Pins an X1 und X2 eine Spannung angelegt, d.h. an X1 wird High-Pegel und an X2 Low-Pegel angelegt. Die Mikrocontroller-Pins an Y1 und Y2 werden hochohmig als Eingänge geschaltet. Nun kann an einem der beiden y-Pins die Messspannung, die am Spannungsteiler in x-Richtung anliegt, erfasst werden. Bei gedrücktem Touchscreen ist der Abgriff des x-Spannungsteilers mit den y-Pins verbunden.
Als nächstes wird in y-Richtung über die Mikrocontroller-Pins an Y1 und Y2 eine Spannung angelegt, also an Y1 High-Pegel und an Y2 Low-Pegel. Die Mikrocontroller-Pins an X1 und X2 werden hochohmig als Eingänge geschaltet. Nun kann an einem der beiden x-Pins die Messspannung, die am Spannungsteiler in y-Richtung anliegt, erfasst werden. Bei gedrücktem Touchscreen ist der Abgriff des y-Spannungsteilers mit den x-Pins verbunden.
Das ganze wird zyklisch wiederholt, sodass fortlaufend die x- und y-Position gemessen wird.
Die beiden Pins C4 und C5 sind mögliche Eingänge des internen A/D-Wandlers des ATmega8, die aber auch als Ausgang geschaltet werden können. Somit werden hier nur insgesamt 4 Pins zum Erfassen der Konatktwiderstände des Touchpanels benötigt.
Zu beachten ist, dass nach Umschalten der x/y-Richtung jeweils die A/D-Messung etwas verzögert erfolgen sollte, da es bedingt durch interne Kapazitäten im Touchaufbau zu Umladevorgängen kommt, die eine zu früh erfolgte Messung verfälschen können.
Ob der Touchscreen gedrückt ist, kann man folgendermaßen erkennen:
An X2 wird LOW-Pegel angelegt, die Mikrocontrollerpins an X1 und Y1 werden als Eingänge mit internem Pullup geschaltet, Y2 wird hochohmig geschaltet. Wird an Y1 ein Low-Pegel detektiert, dann ist der Touch gedrückt, da eine Verbindung zwischen den beiden Folien vorhanden ist. Voraussetzung ist, dass der Widerstand des Touchpanels sehr viel kleiner ist, als der interne Pullup am Mikrocontrollereingang. Dies dürfte in der Praxis meistens erfüllt sein.
3. Anzeige und Bedienung
Nach dem Einschalten der Versorgungsspannung erscheint im Display ein Startbildschirm mit dem Schriftzug "TOUCH". Durch Betätigen des Tasters kann der Bildschirm jederzeit gelöscht werden. Mit einem Touchpen, wie er z.B. PDAs beiliegt, kann per Druck auf den Touchscreen oberhalb einer LED diese eingeschaltet werden. Somit lässt sich ein Muster zeichnen.
Ein Video, auf der man das ganze in Aktion sieht, gibt es hier:
4. Quellcode
Der Code für den ATmega8 auf der Ping Pong Platine wurde mit dem C-Compiler CodeVision AVR (Version 2.04.6 Evaluation) erstellt. Diese Evaluation-Version kann für den privaten nicht-kommerziellen Gebrauch kostenlos verwendet werden und ist auf eine Codegröße von 3 kB beschränkt, was für diese Anwendung ausreicht. Das komplette Projekt ist in der RAR-Datei enthalten (Projektdatei für CodeVison AVR ist touch.prj).
Der Timer2 ist so konfiguriert, dass er ca. jede Millisekunde einen Überlauf mit Interrupt auslöst. In der entsprechenden Interruptserviceroutine timer2_ovf_isr erfolgt in einer Statemachine abhängig vom Zähler touchCnt die Auswertung des Touchscreens in den verschiedenen Stufen. Nach 20 ms erfolgt eine neue Touchauswertung. Zusätzlich wird in der Interruptserviceroutine von Timer2 die LED-Ansteuerung per Multiplexing durchgeführt.
Die Funktion getTouch liefert als Rückgabewert zurück, ob der Touch gedrückt ist (1) oder nicht (0). Bei gedrücktem Touch werden über die Pointer x und y die aktuellen x- und y-Koordinaten als Digitwerte des A/D-Wandlers (0...1023) geliefert.
Im Hauptprogramm wird bei gedrücktem Touch geprüft, ob sich die Druckposition bei einer LED innerhalb eines definierten Fangbereichs befindet und dann die entsprechende LED eingeschaltet. Zusätzlich werden die aktuellen x- und y-Koordinaten als Digitwerte des A/D-Wandlers (0...1023) per Uart ausgegeben und können in einem Terminalprogramm (z.B. Hyperterminal oder HTerm) angezeigt werden. Die RS232-Parameter sind 9600 Bd, 8 Datenbits, kein Paritätsbit, 1 Stopbit, kein Handshake.
Somit ist es möglich, die in der Software in der Routine "main" definierten Parameter exemplarisch zu bestimmen:
x-Koordinate der linken LED-Spalte: XMIN
y-Koordinate der oberen LED-Zeile: YMIN
Abstand der LEDs in x-Richtung: XRANGE
Abstand der LEDs in y-Richtung: YRANGE
Zusätzlich gibt es noch Toleranzwerte, die als Fangbereich für eine LED-Position dienen: XTOL und YTOL
Die voreingestellten Werte für XTOL und YTOL betragen ca. +/- 33% von XRANGE und YRANGE.
5. Quellen/Links
[1] Video zum Ping Pong Touch: http://www.youtube.com/watch?v=pAVQ5_h610U
[2] Application Note "AVR341: Four and five-wire Touch Screen Controller" von Atmel
[3] C-Compiler CodeVision AVR
[4] NDS Touchscreen
[5] Projekt - Code
Die passende Ergänzung zu diesem Artikel:
| |  | Franzis Ping-Pong Produktart: Softwarebox ISBN 978-3-7723-4799-3 Versandkostenfrei* direkt beim Verlag bestellen
29,95 € 
|