Aitendo の UL024TF の Resistive Touch が使えることがわかったので,さっそく使ってみようと思います.
まずは原理をおさらい…4線抵抗膜式のタッチスクリーンは,2枚の抵抗膜が重なった構造をもっていて,X軸方向に電流を流すX膜と,Y軸方向に電流を流すY膜があります(図1).電気を流すための4つの端子にはそれぞれ,XL, XR, YU, YDという名前がついています.XLはX+とかXP,XRはX-とかXM,YUはY+とかYP,YDはY-,YMなどと呼ばれる場合もあります(図1).抵抗膜に触れると,その場所でX膜とY膜に導通が生じます.その位置を,各膜への電流の流し方および電圧計の入れ方によって計測しよう,というのがこのタッチスクリーンの原理になります.
図1:4線抵抗膜式タッチスクリーンの構造
図2は,タッチスクリーンに触ったことを検知する方法を図示したものです.ここではX膜側で電圧を測っていますが,入れ替えても同じことです.まずXRに抵抗をはさんでH電圧(ここでは3.3V)を印加します.いわゆるプルアップの状態にしておくわけです.抵抗は抵抗膜の抵抗値(1kΩ程度)より高いものを入れます.PSoC 4 のGPIO で Resistive Pull Up を選んだ場合は約5kΩとなります.他方,Y膜には,どちら側でもいいのですが,L電圧(0V)を印加します.この状態でスクリーンにタッチして導通が発生すると,XRにつないだ電圧計の値は,H電圧から下がる方向に変化します.これを検知すれば,スクリーンにタッチしたことを検出できるわけです.
図2:スクリーンへのタッチを検出する方法
つぎに,X方向の位置を検出する方法です.それにはX膜の両端子にそれぞれH電圧とL電圧を印加します.抵抗膜の抵抗率は一様ですので,抵抗膜上の電圧は,そのX位置に比例します.(抵抗分圧の原理.)スクリーンにタッチすると,YUに接続された電圧計によって,その位置のX膜上の電圧を計測することができます.電圧計は一般にとてもインピーダンスが高いので,Y方向側の位置による測定電圧の変化はほとんど起きないからです.
図3:X方向の位置を検出する方法
Y方向についても原理は同じです.Y膜側に電圧を印加し,X膜側で電圧を測定することになります.
図4:Y方向の位置を検出する方法
この3つの検出を組み合わせて,
- スクリーンに触っているか否か
- 触っている場合はそのXY位置はどこか
を求めていくわけです.
CY8CKIT-042 (PSoC 4 Pioneer Kit)にUL024TFをつないでResistive Touchを使えるようにしたときの回路図は以下のようになりました.Arduinoのデジタルピン側,すなわちLCD_DportはもっぱらHLの電圧を印加するために用います.アナログピン側,すなわち制御信号のうちRSとnWRは,電圧の印加とともに,電圧の測定も担います.そうそう,LCD_Dportは DOE を使うのをやめて,入力と出力の切り替えはピンのドライブモードを変更する関数をいちいち呼ぶことにしました.
プログラムの実際については,UL024TF.cの後半を見ていただくのが早いと思います.
次の記事で,移植したグラフィック関数群の紹介とともに,プロジェクトファイルを公開します.