A simple Touch Controller for resistive touch panels
Deutsche Version weiter unten
Flipdot member [typ.o] writes: There are more and more affordable TFT
displays for Raspberry Pi coming with a resistive touch panel like
this
from german cheapo - supplier Pollin. I don't wanted to waste a USB
connector for the touch input and also I'm planning to use the display
with Python in text mode. Because I couldn't find a driver for this
usecase I decided to do my own stuff.
Original touch controller with USB to be replaced.
Here you have
touch.zip,
containing the
BASCOM
source for the Attiny85, corresponding HEX file, quick and dirty Python
test program and lcd.py module containing some VT100 shortcuts. The
Attiny is set to 8 Mhz internal RC clock and brownout detection for 2,7
V. It runs nicely with the 3V3 supply of the Pi and therefore doesn't
need a level shifter.
Final touch controller on perfboard.
The controller in the first step connects the X-resistor-plane to VCC
and GND using port b3 and b1 and then measures the voltage at one
terminal of the Y-plane. This A/D-input also is connected to VCC via an
internal pullup resistor to acieve a full scale reading if no touch
(i.e. no connection between X and Y plane). Afterwards X and Y is
swapped and treated accordingly. The controller sends the x,y coordinate
as raw A/D-converter values. Calibration and calculation of touched
character position is done by the Python script. If you touch the
surface of the panel, there will be a "503,220" on the serial line for
example. If you remove your finger, the controller will transmit the
text "RELEASE". That's all.
KISS.
German Version
Inzwischen gibt's eine Menge bezahlbarer TFTs für den Pi, zum Beispiel
das
da
von Pollin. Die Touch-Controller verbraten immer einen USB-Port, von
denen der Pi ja bloss zwei hat, und für den Textmodus auf der Konsole
habe ich auch noch keinen Treiber gefunden - was soll man da als
Text-Interface-Fan machen? Selber.
Der Controller legt zuerst die Anschlüsse der X-Widerstandsfläche an
+3,3 V und Masse, und guckt dann, ob auf einer der Y-Leitungen was kommt.
Das ist immer dann der Fall, wenn durch einen Findgerdruck sich die
beiden Folien berühren. Ohne Druck ist die Y-Folie offen. Damit ich
diesen Fall sauber erkennen kann, wird der A/D - Eingang vom Controller
mit einem internen Pullup auf Betriebsspannunge gezogen. Ohne Berührung
liefert die Messung dann Vollausschlag.
Für die Y-Folie wird's mit getauschten Rollen genau so gemacht.
Die Messwerte sendet der Controller ohne weitere Verarbeitung über die
serielle Schnittstelle. Bei einem Fingerdruck kommt dann beispielsweise
"503,220" mit 9600 bit/s. Macht man den Finger wieder weg, sendet der
Controller ein "RELEASE". Das ist schon alles.
KISS.
im touch.zip ist die Controller -
Firmare in BASCOM, das entsprechende kompilierte HEX File, ein krudes
Python Testprogramm mit einem kleinen Modul mit VT100 Befehlen, das ich
noch rumliegen hatte. [flipdot mitglied typ.o]