タッチパネル・キャリブレーション・プログラムを用意しました
2010年6月号付属SH-2A基板お知らせダウンロード 2010年10月28日
本誌7月号「第2章 タッチ・パネル制御の基本と応用」で解説しているLCD拡張ボードは北斗電子版を使っています.また本誌10月号「LCD拡張ボード2製品の違いとプログラム作成上の注意点」では,北斗電子版と若松通商版のLCD拡張ボードの仕様の違いについて解説しています.この記事により,本誌6月号や7月号で作成した北斗電子版LCD拡張ボード向けのサンプル・プログラムを,若松通商版へ変更して動かすことは可能になりますが,1点だけ説明が足りない部分がありました.
実際にタッチパネル制御プログラムを動かして見るとわかりますが,タッチパネルそのものは動作するのですが,画面に描画される線の位置が少しずれてしまいます.これは,北斗電子版と若松通商版で搭載されているLCDパネルが異なり,タッチパネルの特性(抵抗値)が若干違うためです.
そこで,タッチ位置と座標を調整するための“タッチパネル・キャリブレーション・プログラム”を用意しました.
北斗電子版アーカイブ・ファイル
→TouchHokuto.zip
若松通商版アーカイブ・ファイル
→TouchWakamatsu.zip
●調整方法
タッチパネル・キャリブレーション・プログラム(北斗電子版はTouchPanelCali_hフォルダ内,若松通商版はTouchPanelCali_wフォルダ内)を何らかの方法でLCD拡張ボードを接続したSH-2Aマイコン基板に転送して実行を開始します.
すると,画面左上に“┌”,画面右下に“┘”という白線が表示されるので,まずは左上の角の部分をタッチペンでタッチしてください.すると画面上にX軸とY軸のA-D変換結果が“X=??? Y=???”という形で表示されます.ここで表示された,X軸の値の平均値をTOUCH_Xmindefaultに,Y軸の値の平均値をTOUCH_Ymindefaultとします.
図1 画面左上をタッチしているようす
次に画面右下の角の部分をタッチします.ここで表示された,X軸の値のだいたいの平均値をTOUCH_Xmaxdefaultに,Y軸の値のだいたいの平均値をTOUCH_Ymaxdefaultとします.
図2 画面右下をタッチしているようす
タッチペンを放す瞬間にタッチ位置がズレることがあるので,平均を計算する場合は,最後から数個分のA-D変換結果は参照せずに,だいたいの平均値を採るとよいでしょう.
実際に本キャリブレーション・プログラムを実行するとわかりますが,北斗電子版も若松版も,画面の上下方向に対して上をタッチするとY軸のA-D変換の値が大きく,下をタッチすると値が小さくなります(X軸は左が小さく右が大きい).4線抵抗膜方式のタッチパネルは,X1/X2/Y1/Y2という4本の信号線がありますが,LCDパネル上にタッチパネル膜を張り込む方向によって増減方向が変わってきます.
●タッチパネル・ドライバの変更
キャリブレーション・プログラムと同時に“タッチパネル・デモ・プログラム”も用意しました(北斗電子版はTouchPanelDemo_hフォルダ内,若松通商版はTouchPanelDemo_wフォルダ内).その中のタッチパネル・ドライバTouchPanel.cのソースの先頭あたりには,
/* キャリブレーションデフォルト値 */ #define TOUCH_Xmindefault ??? #define TOUCH_Ymindefault ??? #define TOUCH_Xmaxdefault ??? #define TOUCH_Ymaxdefault ???
という定数定義部分があります.ここに先ほど取得した値を入れて,リコンパイルしてください.
図3 デモプログラムのようす
本誌7月号第2章で紹介しているタッチパネル・ドライバでは,Y座標への変換の処理で,
y = LCD_HIGHT - (int)yd; /* Y軸のみひっくり返す */
という処理を入れていました.これは,定数名が示すようにTOUCH_XmindefaultとTOUCH_Ymindefaultに,どちらも A-D変換結果の小さいほうの値を入れたため,上下方向は値を入れ替えて定数を定義しました.そのため最終的にY座標を計算する段階で方向をひっくり返していました.
ここで用意したキャリブレーション・プログラムでは,北斗電子版も若松通商版も上下方向の増減方向がY軸座標の増減方向とは逆になっていることを意識して欲しいという点を考慮し,TOUCH_XmindefaultとTOUCH_Ymindefaultはあくまで画面左上をタッチしたときのA-D変換値を定義することにしました.
そのため,ここで同時に紹介する“タッチパネル・デモ・プログラム”では,Y座標計算時の処理を,
y = (int)yd;
として,Y軸をひっくり返す処理をなくしています.
これにより,また別のタッチパネルを使う場合でも,キャリブレーション・プログラムで表示された値をそのまま定数に定義すれば,正しいX,Y座標が計算されるようになります.
●プログラム開発環境
本プログラムはgccで作成しています.
▲コンパイラ
Interface2006年7月号特集「はじめてのSH-2基板応用&開発実践技法」で紹介されているCygwin用にビルド済みのSH-2用gccを使用しています.
→http://www.cqpub.co.jp/interface/contents/2006/200607.htm
ビルド済みSH-2用gccコンパイラ一式のダウンロードURLは下記となります.
→http://www.cqpub.co.jp/interface/download/2006/07/040506/sh-tools.tar.gz
▲実機へのダウンロード
シリアル・ダウンローダを使ってダウンロードしてください.配置アドレスは内蔵大容量RAMの先頭アドレスとなります.
ROM化のイメージでバイナリ・ファイルを作成しているので,SH-2Aマイコン基板上のブート用シリアル・フラッシュROMのユーザ領域に書き込んで起動させることもできますし,バイナリ・ファイルを APP.BIN というファイル名にリネームして,SDカードのルート・ディレクトリにコピーすれば,SDカード対応ブートローダを使って起動させることもできます.
▲HEW上からのダウンロード
シリアル・ダウンローダを使わずに,HEW上からバイナリをダウンロードする方法も用意しました.
gcc作成バイナリ・プログラム・ダウンロード用HEWプロジェクト
→DownLoad.zip
アーカイブを解凍すると,HEWプロジェクト一式以外に,
・TouchPanelCali_h.bin … 北斗電子版キャリブレーション・プログラム
・TouchPanelDemo_h.bin … 北斗電子版タッチパネル・デモ・プログラム
・TouchPanelCali_w.bin … 若松通商版キャリブレーション・プログラム
・TouchPanelDemo_w.bin … 若松通商版タッチパネル・デモ・プログラム
の各ファイルが生成されます.上記のいずれかを DownLoad.bin にリネームして上書きコピーしてください.
HEWを起動したら,図4に示す Download modules の下にある DownLoad.bin をダブルクリックしてSH-2Aマイコン基板にダウンロードして,「リセット後実行」を選択してください.キャリブレーション・プログラムまたはデモ・プログラムが動き出します.
なお,ダウンロード後はHEW上から強制ブレークがきかないので,USBケーブルを抜いてHEWを強制終了してください.
図4 HEW上からgcc作成バイナリ・プログラムをダウンロード