マイコン工作実験日記

Microcontroller を用いての工作、実験記録

タッチパネルをつなげた

2009-09-12 22:30:29 | MP3プレーヤ
アイコン並べた画面を見るとかなり雰囲気でてきた感じがしてきましたので、つづいてタッチパネルの接続です。もともとLCD画面にタッチパネルが貼ってありますので、モジュールの未配線だったタッチパネル関連の線をつなぐだけです。使用しているLCDモジュールでは、1)4線式パネルの信号をマイコン側のADCにつなげて利用する方法と、2)モジュール上のコントローラADS7846をSPIでつなぐ方法の2つの方法を選択可能ですが、昨年と同じようにADS7846を利用することにしました。

ADS7846を使用する場合でも、X座標とY座標を別々に読みだして座標変換する処理が必要なので、ある程度の手間がかかります。ただし、ペンダウンにより割り込みを生成できるのが大きなメリットです。ADCを使う場合は、常時XY座標を測定していないとペンダウンが発生したことを検出できませんので、それだけCPUサイクルを消費することになります。ADS7846を使えば、割り込みが発生したら、XY座標の測定を開始すれば良く、ペンが離されたことが検出できたらその後は休んでいることができます。

LPC2388には、SPIをサポートする周辺機能として、SPIという名前のインターフェースと、SSPという名前のインタフェースが用意されています。どちらかというとSSPの方が高機能のようなので、今回はSSP0を使って接続。SPIではSSEL端子が入力端子としてしか使えないのに対して、SSP0ではSSEL0を出力として使えますので、マスター動作時にCS信号を自動的に出力できて便利です。ADS7846からはペンダウンを通知する割り込み信号/PENIRQも出力されてきます。LPC2388基板側のIRQ端子は他の用途に使われていたり、ヘッダに出ていなかったりしますので、GPIO割り込みを使うつもりでP2[8]につないでおきました。



配線ができたので、さっそく動作確認です。ADS7846はSPIで送った8ビットのコマンドに応じて、続くクロック中の10ビットあるいは12ビットで測定した座標を返してくれます。まずはX座標の測定から。下の画面では0xd1が送信しているコマンドで、X座標の測定を要求しています。矢印の右側の3バイトがSPIの受信結果です。最初の1バイトは、コマンド送信中のデータですので関係無し。後ろの2バイト中の12ビットが測定結果です。Valの値は12ビットを抜き出して10進数で表示しています。



タッチしていない状態では値として0が読めています。タッチして左から右に行くにしたがって、測定値が小さくなっていきます。続いて、Y座標の確認。同様に、0x91が送信しているコマンドです。



今度はタッチしていない状態では2047が読めています。そして上から下へ移動するにしたがって、測定値が小さくなっていきます。このように、測定される値は、画面右はじの方が値が小さく、オフセットをもった値になっていますので、これを画面描画の時に使用する座標に変換してやる必要があります。この変換処理は、/PENIRQ信号の処理と合わせて、ひとつ新たなタスクを設けて処理してやる予定です。