温湿度センサ(AHT25) からのデータをLCDへ表示しました。温度はタッチキーにより℃(摂氏)またはF(華氏)で表示します。
ハードウェア
CPUボードと接続するインターフェイスボード資料1*1 と、LCDと接続するインターフェイスボード資料2*2 を修正しました。
当初、ILI9488とXPT2046を制御するためには、ILI9488用にCS,CLK,MOSI,D/C,RST信号、XPT2046用にCLK,MOSI,MISO,IRQ(ペン検知)が必要だと思っていました。
VccとGNDを含めると、合計11本になります。このため接続用のLANケーブル(8線)を2本使用していました。
実験してみると、ILI9488では「DBI Type-C Option1(3 line)(9bit 転送)」を使用すれば、D/Cラインが不要である事がわかりました。またCSも常にLowで大丈夫です。
XPT2046用は、常にタッキー状態を読み出していればIRQ(ペン検知)は必要ありません。
ILI9488用にCLK,MOSI,RST、XPT2046用にCLK,MOSI,MISO、これにVccとGNDで8本となり、LANケーブルを1本にすることができました。
簡易I2C通信は無くしました。
インターフェイスボード
LCDインターフェイスボード(3.3V版)
ソフトウェア
メイン処理
温湿度の取得と表示はメインルーチンで次のタイミングで行います。AHT25 へ「測定開始コマンド」の発行(I2C マスタ送信)は2秒毎に行います。「測定開始コマンド」発行から100msec後に、「温湿度読み出しコマンド」を発行します。(I2C通信 マスタ受信) 「温湿度読み出しコマンド」発行から100msec後に温湿度を計算します。100msec毎に温度と湿度を表示します。℃のキー入力があった場合、温度を℃(摂氏)で表示します。Fのキー入力があった場合、温度をF(華氏)で表示します。
補足:
AHT25とのRIIC通信は、資料3*3、
ILI9488とのRSPI通信は、資料2、XPT2046との簡易SPI通信は、資料4*4と同じです。
タッチキーの作成
フォント作成ツール(改良版)を使用して、64(W)x64(H)サイズのボタンイメージを作成し、指定した座標に表示しました。4隅を先端が細いプラスチック製のペンで押して、データを取得します。
X軸の測定値が0x32~0x48であり、Y軸測定値が0x1b~0x29であれば、「℃のキー」が押されたと判断できます。またX軸の測定値が0x32~0x48であり、Y軸測定値が0x06~0x15であれば、「Fのキー」が押されたと判断できます。タッチの判定法にもよりますが、上記の2つの条件だけで判断した場合、下にあるキー(この場合「Fのキー」)を押して、離す時に上のキーが押されたと判断される場合がありました。これは、押してから離す途中で、Y軸の測定値が「上のキー」の判定領域の値となったためでした。
これを回避するために、キーの押し加減(圧力)を取得し、圧力が小さい場合は「タッチなし」と判断するようにしました。
ここでのタッチ圧は、フィルム側とLCDガラス側の透明導電膜間の抵抗値、タッチ抵抗(Rz)の逆数です。Rzが非常に大きい場合、タッチされていない状態です。Rzが0に近い場合、強くタッチされている状態です。
タッチ抵抗Rzの求め方は、資料5*5と、資料6*6に記載されています。
タッチ状態で、電圧をY+,X-間に印加した場合、タッチ抵抗値(Rz)は、
----- ①
----- ②
----- ③
(Z1,Z2は測定されたZ1,Z2の位置。QはA/Dコンバータの分解能 12bitの場合は4096)
またタッチ状態で、電圧をX+,X-間に印加した場合、A点とX-間の抵抗値 (RxA) は、
----- ④
(Rxは、フイルムのX+,X-の抵抗値(既知)、Xは測定されたXの位置)
----- ⑤
②式=⑤式より、
----- ⑥
⑥式、②式、③式を①式へ代入して、
④式を代入して変形すると、
Rx はタッチパネルの端子のXPとXN間の抵抗値としました。実測で270[Ω]でした。
XとZ1,Z2は、コマンドで取得します。
タイマ割り込み処理
タッチキーのON/OFF(タッチ、非タッチ)を判定する処理は、タイマ割り込み内で行います。タッチコントローラへのコマンド発行を10msec毎に行います。コマンド発行から10msec後に受信済みのX,Y,Z1,Z2データより、X,Yの位置、タッチ抵抗を求め、キーのON/OFF判定を行います。
タッチの判定は、タッチ→非タッチで行います。4回連続してタッチ状態で、今回は非タッチ状態ならば、そのキーが押されたと判断して、メインルーチンのキー入力処理に知らせるフラグをセットしています。
ファイル一覧
(ルネサス提供ファイルとは、CS+の新規プロジェクトで作成されるファイルです。)
使用する割り込み処理:
割り込み処理は、各モジュール内で定義しているため、ルネサス提供ファイルの intprg.cとvect.hで記載されている、同名の割り込みルーチンをコメント化します。
GitHub登録場所: https://github.com/vABCWork/test_thmo_humi
キー表示のピクセル欠け
「℃のキー」と「Fのキー」とも最初の8pixelが表示できませんでした。原因はわかりません。
フォントデータ作成ツール(改良版)
フォントデータ作成ツール 資料7*7を改良しました。
・ピクセルサイズの選択を増やしました。
・Pack Bit形式(マイコンで使用する書式)で読出し可能としました。
・画像データ(白黒BMP形式)のファイルを読出しできるようにしました。
・文字をInputする際に、表示ピクセルのoffset X,Yを指定できるようにしました。
GitHub登録場所: https://github.com/vABCWork/MakeBitMap2
画像データからの作成例
7セグメントLEDの画像データから、48x96ピクセルのフォントデータを作成する例です。
1) 資料8*8の7セグの部分をsnipping ツールで画像切り取り、ファイルに保存します。
2)Windows11のペイント(11.2208.6.0)で、読み出します。
3)「ファイル」→「画像のプロパティ」で、色を「白黒」に変更します。
4)「イメージ」→「サイズ変更」により、ピクセル単位の 48Wx96Hに変更します。
5)「ツール」でビット単位に修正します。
6)「ファイル」→「名前を付けて保存」→「その他の形式」 で、モノクロビットマップで保存します。
7)MakeFontData を起動し、ピクセルサイズを 48(W)x96(H)とします。
「Load Image]ボタンで、読み出します。
*1:資料1「I2C通信とSPI通信(ボードの作成)」 https://vabc.hatenadiary.jp/entry/2022/08/11/154539
*2:資料2「I2C通信とSPI通信(4インチ LCDパネルとインターフェイスボード)」 https://vabc.hatenadiary.jp/entry/2022/10/10/174722
*3:資料3「I2C通信とSPI通信(RIICと簡易I2Cの割り込み処理プログラム)」https://vabc.hatenadiary.jp/entry/2022/08/30/154918
*4:資料4「I2C通信とSPI通信(タッチコントローラと簡易SPI通信)」https://vabc.hatenadiary.jp/entry/2022/10/22/172343
*5:資料5「低電圧I/O タッチスクリーン・コントローラ」www.ti.com/product/ja-jp/TSC2046
*6:資料6「タッチ・スクリーン・システムのアナログ入力雑音を低減する方法」www.ti.com/product/ja-jp/TSC2046
*7:資料7「I2C通信とSPI通信(フォントデータ作成ツールと数字の表示)」https://vabc.hatenadiary.jp/entry/2022/10/16/104933
*8:資料8「1桁LED数字表示器」akizukidenshi.com/download/ds/rohm/la401dn.pdf