60歳からの電子工作ノート

生涯学習として取り組んでいます。

I2C通信とSPI通信(温湿度表示器の試作)

温湿度センサ(AHT25) からのデータをLCDへ表示しました。温度はタッチキーにより℃(摂氏)またはF(華氏)で表示します。

図1. 温湿度表示器

 

ハードウェア

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通信は無くしました。

図2. 構成図


インターフェイスボード

図3. インターフェイスボード  回路図

図4. レイアウトとフットプリント

図5. インターフェイスボード

図6 インターフェイスボード(部品実装後)

図7. インターフェイスボード(部品表)

LCDインターフェイスボード(3.3V版)

図8. LCDインターフェイスボード(3.3V) 回路図

図9. LCDインターフェイスボード(3.3V) レイアウトとフットプリント

図10. LCDインターフェイスボード(3.3V)

図11. LCDインターフェイスボード(3.3V) 部品実装後

図12. LCDインターフェイスボード(3.3V)   部品表

ソフトウェア

メイン処理

温湿度の取得と表示はメインルーチンで次のタイミングで行います。AHT25 へ「測定開始コマンド」の発行(I2C マスタ送信)は2秒毎に行います。「測定開始コマンド」発行から100msec後に、「温湿度読み出しコマンド」を発行します。(I2C通信  マスタ受信) 「温湿度読み出しコマンド」発行から100msec後に温湿度を計算します。100msec毎に温度と湿度を表示します。℃のキー入力があった場合、温度を℃(摂氏)で表示します。Fのキー入力があった場合、温度をF(華氏)で表示します。 

図13. 温湿度データの取得と表示タイミング

補足:

AHT25とのRIIC通信は、資料3*3

ILI9488とのRSPI通信は、資料2、XPT2046との簡易SPI通信は、資料4*4と同じです。

タッチキーの作成

フォント作成ツール(改良版)を使用して、64(W)x64(H)サイズのボタンイメージを作成し、指定した座標に表示しました。4隅を先端が細いプラスチック製のペンで押して、データを取得します。

図14. タッチキーとタッチ時の読み出しデータ

X軸の測定値が0x32~0x48であり、Y軸測定値が0x1b~0x29であれば、「℃のキー」が押されたと判断できます。またX軸の測定値が0x32~0x48であり、Y軸測定値が0x06~0x15であれば、「Fのキー」が押されたと判断できます。タッチの判定法にもよりますが、上記の2つの条件だけで判断した場合、下にあるキー(この場合「Fのキー」)を押して、離す時に上のキーが押されたと判断される場合がありました。これは、押してから離す途中で、Y軸の測定値が「上のキー」の判定領域の値となったためでした。

図15. 下のキーを押した状態から完全に離すまでのY軸の測定値

これを回避するために、キーの押し加減(圧力)を取得し、圧力が小さい場合は「タッチなし」と判断するようにしました。

ここでのタッチ圧は、フィルム側とLCDガラス側の透明導電膜間の抵抗値、タッチ抵抗(Rz)の逆数です。Rzが非常に大きい場合、タッチされていない状態です。Rzが0に近い場合、強くタッチされている状態です。

タッチ抵抗Rzの求め方は、資料5*5と、資料6*6に記載されています。

図16. タッチ抵抗(Rz)

タッチ状態で、電圧をY+,X-間に印加した場合、タッチ抵抗値(Rz)は、

  Rz = \dfrac{V_B-V_A}{I_Touch}   ----- ①

  V_A = V_cc\times \dfrac{Z_1}{Q} ----- ②

  V_B =  V_cc\times \dfrac{Z_2}{Q} ----- ③

(Z1,Z2は測定されたZ1,Z2の位置。QはA/Dコンバータの分解能 12bitの場合は4096)

またタッチ状態で、電圧をX+,X-間に印加した場合、A点とX-間の抵抗値 (RxA) は、

 RxA = Rx\times \dfrac{X}{Q} ----- ④

(Rxは、フイルムのX+,X-の抵抗値(既知)、Xは測定されたXの位置)

 V_A = RxA\times I_Touch ----- ⑤

②式=⑤式より、

 I_Touch = \dfrac{V_cc\times \dfrac{Z_1}{Q}}{RxA} ----- ⑥

⑥式、②式、③式を①式へ代入して、

 Rz =  \dfrac{V_B-V_A}{I_Touch} = \dfrac{ \left(Z_2- Z_1\right)\times\dfrac{V_cc}{Q}}{V_cc\times\dfrac{Z_1}{Q}}\times RxA

④式を代入して変形すると、

Rz = Rx \times\dfrac{X}{Q}\times\left(\dfrac{Z_2}{Z_1} - 1\right)

 

Rx はタッチパネルの端子のXPとXN間の抵抗値としました。実測で270[Ω]でした。

XとZ1,Z2は、コマンドで取得します。

図17. タッチ位置(x,y)とタッチ圧測定用のコマンド

図18. タッチパネルの端子


タイマ割り込み処理

タッチキーのON/OFF(タッチ、非タッチ)を判定する処理は、タイマ割り込み内で行います。タッチコントローラへのコマンド発行を10msec毎に行います。コマンド発行から10msec後に受信済みのX,Y,Z1,Z2データより、X,Yの位置、タッチ抵抗を求め、キーのON/OFF判定を行います。

図19. タッチコントローラへのコマンド発行とON/OFF判定タイミング

 タッチの判定は、タッチ→非タッチで行います。4回連続してタッチ状態で、今回は非タッチ状態ならば、そのキーが押されたと判断して、メインルーチンのキー入力処理に知らせるフラグをセットしています。

図20. キーのON判定タイミング

図21. キーのON/OFF判定フロー 1

図22. キーのON/OFF判定フロー 2



ファイル一覧

図23. ファイル一覧

(ルネサス提供ファイルとは、CS+の新規プロジェクトで作成されるファイルです。)

使用する割り込み処理:

図24. 割り込み一覧

割り込み処理は、各モジュール内で定義しているため、ルネサス提供ファイルの intprg.cとvect.hで記載されている、同名の割り込みルーチンをコメント化します。

図25. 割り込み処理のコメント化

GitHub登録場所: https://github.com/vABCWork/test_thmo_humi

キー表示のピクセル欠け

「℃のキー」と「Fのキー」とも最初の8pixelが表示できませんでした。原因はわかりません。

図26.  キー表示の不良

フォントデータ作成ツール(改良版)

フォントデータ作成ツール 資料7*7を改良しました。

ピクセルサイズの選択を増やしました。

・Pack Bit形式(マイコンで使用する書式)で読出し可能としました。

・画像データ(白黒BMP形式)のファイルを読出しできるようにしました。

・文字をInputする際に、表示ピクセルのoffset X,Yを指定できるようにしました。

図27. フォントデータ作成ツール(改良版)

GitHub登録場所: https://github.com/vABCWork/MakeBitMap2

画像データからの作成例

7セグメントLEDの画像データから、48x96ピクセルのフォントデータを作成する例です。

1) 資料8*8の7セグの部分をsnipping ツールで画像切り取り、ファイルに保存します。

2)Windows11のペイント(11.2208.6.0)で、読み出します。

図28. ペイントでの画像データ読み出し

3)「ファイル」→「画像のプロパティ」で、色を「白黒」に変更します。

図29. 白黒に変更

4)「イメージ」→「サイズ変更」により、ピクセル単位の 48Wx96Hに変更します。

図30. サイズの変更

5)「ツール」でビット単位に修正します。

6)「ファイル」→「名前を付けて保存」→「その他の形式」 で、モノクロビットマップで保存します。

図31. モノクロBMP形式で保存

7)MakeFontData を起動し、ピクセルサイズを 48(W)x96(H)とします。

「Load Image]ボタンで、読み出します。

図32. モノクロBMP形式の読み出し

*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