タッチコントローラ(XPT2046)と簡易SPI通信を行いました。タッチ位置でのデータ変化を確認しました。
以下の資料を参考にしています。資料1*1、資料2*2、資料3*3、資料4*4
タッチシステム
使用しているタッチパネルは4線の抵抗式(感圧式) です。このタッチパネルはLCDガラス上に透明の導電性抵抗膜がコーティングされていて、隙間を空けてフィルムがついています。フィルムの下側にもコーティングされています。また透明導電膜から4本の線が引き出されています。フィルムをタッチすると、フィルム裏面の透明導電膜とLCD側の透明導電膜が導通して電流が流れます。
X位置を検出する際には、X+(XP)とX-(XN)に電圧を印加し、X位置に対応した電圧をY+(YP)から測定します。Y位置を検出する際には、Y+(YP)とY-(YN)に電圧を印加し、Y位置に対応した電圧をX+(XP)から測定します。
簡易SPI通信
マイコンとの接続
シリアルコミュニケーションインターフェイス(SCI)のSCI5 を簡易SPIとして使用します。タッチコントローラはコマンドを受信すると、A/D変換を開始し、結果を12ビットのA/D変換データとして送信します。
マイコンはX軸測定コマンドを送信後、受信用のクロックを生成するため、ダミーデータを2バイト送信します。ダミーデータを2バイト送信することで、A/D変換結果を受信できます。Y軸の測定もY軸測定コマンドを送信後、ダミーデータを2バイト送信してA/D変換結果を受信します。
通信仕様
簡易SPIの初期設定や送受信動作は、SCIの「クロック同期式モード」と同じです。データ長は8ビットのMSBファーストとなります。SPIモードレジスタ(SPMR)のCKPH=1(クロック遅れあり), CKPOL=0(クロック極性反転なし)とします。
フロー
実験
X軸とY軸の測定コマンド(制御バイト)を送信して、A/D変換データを受信します。
タッチ無しの状態と、パネルの各点(A,B,C,D)をタッチした時のA/D変換データです。
ファイル一覧
(ルネサス提供ファイルとは、CS+の新規プロジェクトで作成されるファイルです。)
使用する割り込み処理:
ルネサス提供ファイルの修正(割り込み処理のコメント化)
本プログラムで使用する割り込み処理は、sci_spi.cで記述するようにしました。
ルネサス提供ファイルの intprg.cとvect.hで記載されている、同名の割り込みルーチンをコメント化します。
GitHub登録場所: https://github.com/vABCWork/test_touch
初めての部品不良
今年の6月頃にAliExpress からXPT2046 を購入しました。10個で約300円でした。
テスト基板のはんだ付け後、基板のVccとGND間を確認したところショートしていました。FPCコネクタ(40ピン,0.5mmピッチ)が原因だと思い、確認しましたがブリッジはありません。チップコンデンサとチップ抵抗を取り外しましたが、まだショートしています。XPT2046を取り外すと、ショートしなくなりました。「手はんだ」が原因とも考えられるので、購入した他のXPT2046を調べました。全てではありませんが、VCCとGND他がショートしている部品が1個ありました。
XPT2046(1個30円、1個200円、3.5インチLCD上)を比較した写真です。