TechToysから購入したLCDボードにはタッチパネルも付いています。このLCDボードには、TIのADS7846というタッチパネルコントローラが載っており、マイコンとSPI接続できるようになっています。しかしながら、ディフォルトではタッチパネルはADS7846にはつながっておらず、ADS7846を有効にするためにはボード上の4か所のジャンパをハンダブリッジする必要があります。ディフォルトではXL, YU, XR, YDという4線式タッチパネルからの信号が、そのままボード上のピンソケットに出ています。
すなわち、このボードのタッチパネルを使うには次の2つの方法があることになります。
ADS7846のデータシートを読んでみると、SPIで接続できるタッチパネル用の12ビット(または8bit)ADCだということがわかりました。ポピュラーなチップらしくLinuxのドライバのソースでもサポートされているようです 。SPI信号以外に/PENIRQという信号もあり、ペンでタッチされた時に割り込みを生成することもできるようです。
せっかくコントローラが載っていることですし、SPIのピンも空けてあるので、1番のコントローラを使う方式を採用することにします。コントローラを使わない場合には、タッチされたことを検出するために、マイコンは常時タッチパネルにかかる電圧を測定していなければなりません。コントローラはこの監視作業をやってくれて、タッチされたら/PENIRQ信号を出してくれますので、これを受けて電圧測定をおこなえば良いので、CPUの処理を軽減することができます。
すなわち、このボードのタッチパネルを使うには次の2つの方法があることになります。
- ボード上のコントローラADS7846を使う方法。この場合には、SPIでX方向またはY方向の電圧を測定するコマンドを送信すると、その測定結果を受信することができます。
- マイコンのGPIOを使いX方向端子間に電圧をかけ、Y方向端子間にあらわれた電圧をマイコンのADCで測定する方法。XとYを入れ替えて、逆側の電圧も測定する。Chanさんの説明が参考になりました。
ADS7846のデータシートを読んでみると、SPIで接続できるタッチパネル用の12ビット(または8bit)ADCだということがわかりました。ポピュラーなチップらしくLinuxのドライバのソースでもサポートされているようです 。SPI信号以外に/PENIRQという信号もあり、ペンでタッチされた時に割り込みを生成することもできるようです。
せっかくコントローラが載っていることですし、SPIのピンも空けてあるので、1番のコントローラを使う方式を採用することにします。コントローラを使わない場合には、タッチされたことを検出するために、マイコンは常時タッチパネルにかかる電圧を測定していなければなりません。コントローラはこの監視作業をやってくれて、タッチされたら/PENIRQ信号を出してくれますので、これを受けて電圧測定をおこなえば良いので、CPUの処理を軽減することができます。