LCD-Touchscreen Ledsee 240x128

Wieder war die Neugier die treibende Kraft einen solchen Versuch zu starten.

Denn wenn fast "Alles" per Touchscreen bedient wird, wollte ich herausfinden,
ob sich diese Technik auch im Hobbybereich vernünftig anwenden lässt.

Durch einen der Tausend Artikel im Netz bin ich auf die Fa. Ledsee gestoßen,
die mehrere Displays mit Touchpanel anbietet. Über ebay in Shanghai bestellt
ist dann die Lieferung wider erwarten doch noch nach 10 Wochen als
Einschreiben eingetroffen.

Mein Freund hat mir den Testaufbau zum Anschluss an das STK500 gelötet.
Port B für die Daten, an Port C die Steuersignale, Touchpanel an Port A.
Drei 10plg. Flachbandkabel angesteckt, betriebsbereit.

Für die Ansteuerung des Display verwende ich die Routinen von
Radoslaw Kwiecien.  Download hier:     http://en.radzio.dxp.pl/t6963/
Displaydaten und Portbelegung ändern und schon funktioniert die Text-   
und Grafikausgabe im AVR GCC Projekt.

Leider enthält das Datenblatt keine Information über das Touchpanel, aber
per Multimeter kommt Licht ins Dunkel und so konnte ich die 4 Anschlüsse
zuordnen. Die längere Seite (X-Koordinaten) hat zwischen den Elektroden einen
Widerstand von ca. 900 Ohm, in Y Richtung nur etwa 250. Der Isolationswider-
stand war Anfangs im Megohm Bereich, nach diversen Test-Touches messe
ich jetzt knapp 10 KOhm.

Als beste Informationsquelle für das Thema Touch am 8-Bit AVR habe ich diesen
Aufsatz gefunden:    http://www.atmel.com/dyn/resources/prod_documents/doc8091.pdf

Zum Download gibt es auch ein umfangreiches Demoprojekt.

In diesem Artikel ist die Funktionsweise des Panels und das Messprinzip sehr
verständlich beschrieben. Zum Schutz des AVR habe ich jeden der 4 Anschlüsse
über 100 R an die ADC0 bis ADC3 Pins des Mega644 auf dem STK500
verdrahtet.
Diese I/O Pins lassen sich auch als digitale Ein-/Ausgänge konfigurieren, was den
Hardwareaufwand minimiert.

Den ADC betreibe ich mit 10 Bit Auflösung. Nachdem ich keinen Hinweis auf
eine vorgeschriebene Polarität gefunden habe, schalte ich die rechte bzw. untere
Elektrode während der Messung an VCC, linke und obere kommen an GND.
Durch den Druck auf das Panel entsteht der "Schleifer" des Potentiometers
an den Anschlüssen der gegenüberliegenden Seite. Wegen dem hochohmigen
Eingang des ADC spielen die Widerstände keine wesentliche Rolle.



Diese Tabelle aus der Atmel-Applikation zeigt das Konfigurationsschema der
verwendeten Pins.
Das Mess-Prinzip ist bis hierher denkbar einfach und mit wenigen Zeilen hincodiert.
 

Fehlt "nur" noch die Umwandlung der gemessenen Spannungen in Pixelkoordinaten
des LCD-Displays.

Die "Kalibrierung" :

Ein großes Wort für meine simple Anpassungsmethode.

Als Referenzwerte der LCD-Koordinaten dienen die 2 Quadrate (4x4 Pixel) deren
Zentrum jeweils 12 Pixel von den Ecken Li/Ob bzw. Re/ Un entfernt ist.
Der Abstand in X-Richtung ist somit 240 - 24 = 216 Pixel, in Y 128 - 24 = 104.

Für die Betätigung sollte man tunlichst keine Reißnadelspitze verwenden. Meine Wahl
ist ein Folien-Anreibestift mit 2mm Kugel, weil ich keinen "Stylus" besitze.

Touch Li/Ob liefert die Min Werte des 10-Bit Wandlers ( 382 u. 184 ), Re/Un die Max
Werte 701 bzw. 813. Ob man die Mitte der Referenzquadrate getroffen hat, ist eine
ganz andere Frage.
Aus dem Zahlenbereich des ADC und dem Pixelabstand errechnet sich der Umrechenwert
Touchwert zu Display-Pixel. Durch Umrechnung des 12-Pixel-Offsets der Quadrate
ist es simpel die Min-Werte der linken oberen Ecke zu ermitteln.

Zur Kontrolle dient das "Zielquadrat" im Zentrum des Display. Das Quadrat mit 8x8 Pixel
hat als Zentrum den "Testtouch". Der X-Wert ist zufällig richtig geworden, 120, in
Y-Achse hat sich der kleinste Fehler 1 Pixel ergeben, statt 64 wird 63 angezeigt.

Touchfelder, die mit einem Stift betätigt (getroffen) werden sollen, werden mit weniger als
10 Pixel Seitenlänge, nicht sinnvoll sein. Für Fingerspitzen ???.

Voraussetzung für diese Kalibrierfunktion sind "nur" brauchbare Touchwerte.

Das "Touch-Ereignis":

"Wann ist ein Touch ein Touch" ?
Diese Frage ist nicht ohne weiteres zu beantworten, denn als Basis hat man nur
mehr oder weniger fragwürdige Wandlerwerte. In der o.a. Tabelle liest man in
der Zeile "Standby" die Anordnung X+ an GND und Y- über Pullupwiderstand
an VCC. Je nach Größe der wirksamen Widerstände im Touchpanel und des
Pullup-Wertes ergibt sich an Y- ein Wert der größer 0Volt und kleiner VCC ist.

Bei meiner Testanordnung etwa 1V im unbetätigten Zustand. Diese Spannung
reduziert sich bei "Touch" in Richtung GND. Als Kriterium für "Touch-Down"
verwende ich die Spannungsschwelle 0,5 Volt, "Touch-Up" ist Ut > 0,8 Volt.

Wenn "TD" erkannt ist, messe ich die X und Y Werte im Abstand von 10 Millisek.
10 mal. Die beiden ersten werden verworfen, der Mittelwert aus 8 ist das Ergebnis.
Natürlich gibt es intelligentere digitale Filter die das Messergebnis verbessern.

Im Atmel Demo werden die Werte in ein Array geschrieben, nach Größe sortiert
und die "Ausreißer" verworfen.

Neben "Touch-Down / Up kann auch das Ereignis "Touch-Move" von Interesse
sein, z.B. für eine Scroll-Funktion. Dazu ist in die Messloop T-Up als Ende-
Kennung einzufügen. Den Messwert liefert dann der Mittelwert aus den letzten
n (8) Messungen. Bei Touch-Up ist es sinnvoll die letzten Mittelwerte zu
verwerfen.

Erstes Fazit meiner Versuche:

Für einen "Tastenmensch" ist eine Bedienung ohne fühlbares "Feedback"
mehr als sehr gewöhnungsbedürftig. "Blinde" Betätigung, mit dem Finger am
"Drücker" halte ich für ausgeschlossen. Zudem sind alle "modernen User"
von ihren Handys und Pad's derartig verwöhnt, dass simple Touchfunktionen
sicher nicht akzeptiert werden. Wenn schon Touch dann kapazitiv, das
könnte auch eine erste Erkenntnis sein. Ein weiterer Knackpunkt ist die
schlechte Ablesbarkeit des monochromen Ledsee Displays.

Mal sehen, wann ich das Ding in meinem Fundus versenke, falls mir keine
praktische Anwendung einfällt !

Winfried Steinhart, im November 2010

Hier die Dateien :     win_main.zip