PIC32MZ2048EFM064-I/PT (TFTカラー液晶)

  TFTカラー液晶として、タッチスクリーン付きで安価なaitendoの3.5インチ液晶シールドML035TF-TPを用います。この液晶の難点は、実際のLCD画面の縦横比がピクセル比(240:400)と違うので、例えば円を描いても楕円になってしまいます。補正が必要です。それに、描画速度が遅いように思います。また、LCDのRAMデータを読むために必要なRD端子が出ていないので、アルファーブレンディングができません。さらに、以下に示すように液晶基板にはフラックスが満載です。購入する際には、これらの点ご注意ください。

  最初は、グラフィック・ライブラリーであるUTFTとタッチスクリーン・ライブラリーURTouchを使います。その後、マイクロチップ社のグラフィック・ライブラリー(Aria)への統合を図ります。なお、ML035TF-TPの液晶コントローラチップはILI9327で、タッチコントローラチップはXPT2046です。UTFTは前者を、URTouchは後者をサポートしています。

  ところで、PIC用のファームウェアをコンパイルするために MPLAB X IDE v4.05をインストールした後、MPLAB XC32 Compiler v1.44をインストールしておきます。 さらに、MPLAB Harmony Integrated Software Framework v2.05をインストールし、そのあと、MPLAB Harmony Confugulator(MHC)をプラグインとして、MPLAB X IDEに組み込みます。組み込み方法は、MPLAB Harmonyをインストールした時に、最後に表示されます。Webを検索をすれば、日本語での解説もありますので、そちらを参考にしてください。

  注意:以下のファームウェア(zipファイル)を解凍するとフォルダーが出てきますので、そのフォルダーをまるごと、必ずmicrochip\harmony\v2_05\appsフォルダーの中に入れてください。


テスト回路

  次図は、使用した回路の液晶部分を除いた回路図です。液晶も含めて3.3Vの単電源です。5V電源は必要ありません。

  次図は、液晶との接続のためにHarmonyで設定したPIC32MZ2048EFM064-I/PTのピン配置です。なお、WRとRSの2つピンが、他のピン(D0-D7,CS,RST)と離れた所に設定したのは、後ほどPMP(Parallel Master Port:パラレルマスターポート)を利用するためです。

また以下の表は、PIC32MZ2048EFM064-I/PTと液晶との接続を示しています。

PIC32MZ2048EFM064-I/PT 液晶ML035TF-TP 備考
D0(PIN#58)GPIO_OUT DB8(JP1:PIN#22)
D1(PIN#61)GPIO_OUT DB9(JP1:PIN#23)
D2(PIN#62)GPIO_OUT DB10(JP1:PIN#24)
D3(PIN#63)GPIO_OUT DB11(JP1:PIN#25)
D4(PIN#64)GPIO_OUT DB12(JP1:PIN#26)
D5(PIN#1)GPIO_OUT DB13(JP1:PIN#27)
D6(PIN#2)GPIO_OUT DB14(JP1:PIN#28)
D7(PIN#3)GPIO_OUT DB15(JP1:PIN#29)
CS(PIN#4)GPIO_OUT CS(JP1:PIN#40)
RST(PIN#5)GPIO_OUT RST(JP1:PIN#41)
RS(PIN#30)GPIO_OUT RS(JP1:PIN#38)
WR(PIN#52)GPIO_OUT WR(JP1:PIN#39)
D_CLK(PIN#49)GPIO_OUT D_CLK(JP2)
D_CS(PIN#50)GPIO_OUT D_CS(JP2)
D_IN(PIN#51)GPIO_OUT D_IN(JP2)
D_OUT(PIN#56)GPIO_IN D_OUT(JP2)
D_IRQ(PIN#57)GPIO_IN D_IRQ(JP2)
3.3V(JP3) 3.3V電源に接続
GND(JP3) 2つとも回路アースへ接続

  液晶基板をちょいと解体してみました。フラックスが満載です。



UTFT

  UTFTはRinky-Dink Electronics社が公開しているグラフィック・ライブラリーです。必要であればUTFT.zipをダウンロードします。このUTFTライブラリを使用して、画像を表示させるためのファームウェアがML035TF_NEW.zipです。以図は画像を表示させたものです。

  なお、もとの画像はML035TF_NEWフォルダーの中にあるneuton.pngファイルです。この画像をUTFT.zipを解凍して出てくるUTFT\Tools\ImageConverter565.exeを用いてRGB565データ化し適当なファイル名で出力します。UTFTではこのファイルを読み込むことになります。本ファームウェアではML035TF_NEW\firmware\src\data.cに出力しています。ImageConverter565.exeの使い方は簡単なので説明を省略します。

  なお、ML035TF_NEW\firmware\src\app.cの中に円を描く命令//drawCircle(100 , 100, 50);や直線を描く命令 //drawLine(380,20,20,220);などが含まれていますので、コメントを外してお試しください。


URTouch

  URTouchはRinky-Dink Electronics社が公開しているタッチスクリーン・ライブラリーです。必要であればURTouch.zipをダウンロードします。このURTouchライブラリ付属のサンプル・ファームウェアを以下に紹介します。

  ML035TF1.zip:画面左側にある色選択バーで色を選択し、中央の画面をタップすると、タップした位置に小さな円が選択した色で描かれます。円の大きさは、画面右下にある+やーをタップすると変えることができます。また、画面の右上にあるCLEARボタンをタップすると、描かれた円がすべて消えます。


  ML035TF2.zip:数字ボタンをタップすると、その数値が画面の最終行に表示されます。その後、Enterをタップすると、最終行に表示されている数値が上方にシフトします。Enterを押す前に、Clearをタップすると、入力した数値が消えます。


  ML035TF3.zip:タッチスクリーンの校正用のファームウェアです。下図は初期画面です。

初期画面の任意の場所をタップすると、次のような画面が現れます。

四角で囲まれた+(クロスマーク)が8個あります。ハイライトされているクロスマークを1つづつタップして、8個すべてをタップし終わると、次のような画面が現れます。

この画面で表示されているCAL_X、CAL_Y、CAL_Sの数値が校正値です。この数字をML035TF3\firmware\src\URTouchCD.hに設定します。タッチスクリーンを使う際には、このファイルを用いなければいけません。


  ML035TF4.zip:これは単に、タップした場所に点を打つだけのファームウェアです。



Aria(MHC環境)

  Aria(名前の由来は歌劇のアリアだと思います)はマイクロソフト社のグラフィック用のユーザー・インターフェース・ライブラリです。以下のファームウェアは上記UTFTとURTouchライブラリーをAriaと統合したものです。

  液晶とタッチスクリーン用の専用ドライバーを作成し、これらを利用するためのMHC環境を構築します。

まず、
フォルダーmicrochip\harmony\v2_05\bsp
フォルダーmicrochip\harmony\v2_05\framework
フォルダーmicrochip\harmony\v2_05\utilities
のバックアップを取っておきます。

  次にPIC32MZ2048EFM064-I/PT (HARMONY: v2.05 USB DEVICE)の章に書いてある通りに、テスト回路用のMHC環境を整えます。具体的には、この章にあるconfig205EFM.zipを解凍すると、config204EFMフォルダーの中に、bspフォルダーとframeworkフォルダーとutilitiesフォルダーが出てきますので、これら3つのフォルダーをmicrochip\harmony\v2_05フォルダーの中に上書きします。これで、PIC32MZ2048EFM064-I/PTを用いたテスト回路用のMHC環境が整います。

  そして、gfx_config205.zip(v2018.1.5)を解凍すると、gfx_config205フォルダーの中に、frameworkフォルダーとutilitiesフォルダーが出てきますので、これら2つのフォルダーをmicrochip\harmony\v2_05フォルダーの中に上書きします。これで、液晶とタッチスクリーン用のMHC環境が整います。

----------- 参考まで ------------

 1:液晶コントローラILI9327用のドライバーはmicrochip\harmony\v2_05\framework\gfx\driver\controller\otm2201aフォルダーの中身を、タッチスクリーンXPT2046用のドライバーはmicrochip\harmony\v2_05\framework\driver\touch\genericフォルダーの中身を参照して作りました。

 2:液晶コントローラILI9327用のドライバー関係のファイルは、 gfx_config205\framework\gfx\driver\controllerフォルダーの中に、また、タッチスクリーンXPT2046用のドライバー関係のファイルはgfx_config205\framework\driver\touchフォルダーに入っています。 液晶コントローラILI9325用のMHC環境の整え方の詳しい解説が、eparejaさんの#15のトピックスとして公表されています。大変参考になります。

 3:タッチスクリーン用のドライバーgfx_config205\framework\driver\touch\xpt2046\src\drv_touch_xpt2046.cをテンプレートにするためのファイルがgfx_config205\framework\driver\touch\xpt2046\config\drv_xpt2046.hconfigです。後者のファイルは、microchip\harmony\v2_04\framework\driver\touch\generic\config\drv_touch_generic.hconfigファイルを参照して作ったものです。drv_xpt2046.hconfigファイルとdrv_touch_generic.hconfigファイルの両ファイルの最後の3行を比較すると、先頭にあるキーワードは、後者でfileであった箇所が、前者ではtemplateとなっていることが分かると思います。fileのままですと、あるファームウェアでdrv_touch_xpt2046.cの中身を編集してしまうと、drv_touch_xpt2046.cを使う他のファームウェアのdrv_touch_xpt2046.cの中身まで編集されてしまい、最悪の場合、動作不良を起こします。これを避けるためfiletemplateに変えました。

 4: gfx_config205\framework\gfx\utils\src\gfxu_image_png_internal.cの78行目と、gfx_config205\framework\gfx\utils\src\gfxu_image_png_external.cの82行目にあるassert(error == 0); をコメント行にしています。元々はコメント行ではありませんが、そのままですと、コンパイル・エラーとなります。

-----------------------------------

  使用法は以下の通りです。

1.ILI9327用の液晶ドライバを組み込むためには、Harmony ConfiguratorのOptionsのGraphics Stack?のチェックボックスにチェックを入れて、そこを展開して現れるリストで、以下の矢印で示す3つの箇所を設定します。

2.XPT2046用のタッチスクリーン・ドライバを組み込むためには、Harmony ConfiguratorのOptionsで、以下の2つの箇所を設定します。

  2-1:上の図の下方にある矢印が指し示すチェックボックスにチェックを、以下の図のように入れます。

  2-2:Harmony ConfiguratorのOptionsでHarmony Framework Configurator->Drivers->Touch Driversと展開し、以下の図のように矢印が示すチェックボックスにチェックを入れます。


Aria使用例

 Ariaを学ぶのに、ちょいと古いのですが、MPLAB® Harmony v2.xx Graphics Library Trainingが参考になります。

  ML035TF_NEW1.zip:MPLABのHARMONYロゴーを表示するファームウェアです。上記のML035TF_NEW.zipとAriaを統合したものです。


  ML035TF1_GFX.zip: ボタン・ウィジェットを使ったファームウェアです。ウィジェット(Widget)とは、Wikipediaによるとグラフィカルユーザインタフェースを構成する部品要素だそうです。 画面をタップすると、タップした点のピクセル座標(x,y座標)が表示されます。タップしていないときには、x=y=-1となっています。また、Pushと書かれたボタン・ウィジェットを押すと、ボタンが押されたような見栄えになります。そして、ボタン・ウィジェットを押して放すたびにPICの32番ピン(RC15)が3.3Vになったり0Vになったりを繰り返します。PICの32番ピンとアースの間に、LEDと電流制限抵抗(100Ω以上)を直列にしたものを接続すると視覚的に分かり易いでしょう。

なお、ボタン・ウィジェットの押下で、イベントを発生させるためには、Graphics Composerを起動させて、ボタン・ウィジェットを以下の図のようにマウスでクリック選択します。

そして、Properties Editorウィンドウの中のEvents欄のRelased(ボタンを離したときにイベントが発生する設定)の前のチェック・ボックスにチェックをいれます。

コードを生成すると、以下の図のように、libaria_events.cなるファイルができています。その中に、イベント・コールバック関数(ボタンを離したときに呼ばれる関数)void ButtonWidget1_ReleasedEvent(laButtonWidget* btn)があります。今の場合、この関数の中で、PICの32番ピン(RC15)を3.3Vにしたり、0Vにしたりを繰り返しています。


  ML035TF1_GFX_PMP.zip:これは、すぐ上のML035TF1_GFX.zipのLCDへのデータ出力をPMP(Parallel Master Port :パラレルマスターポート)で行ったものです。データ転送が速くなると期待したのですが、だめでした。参考までに。


  ML035TF1_GFX1.zip:これは、PICの47番ピン(RC13)とアース間にタクトスィッチを付けて、それを押したり放したりすると、LCD画面上のボタン・ウィジェットがまるで押されたり放されたように振舞います。もちろん、その結果として、PICの32番ピン(RC15)が3.3Vになったり0Vになったりを繰り返します。


  GFXtest03.zip:タッチスクリーンは使用していません。文字(string)の背景(Backgrond type)は「Cache」としています。

  背景データのためのバッファは、下図で矢印で示しているdrv_gfx_ili9327.cの54行目のように、配列frameBuffer[MAX_BUFFER_COUNT][DISPLAY_WIDTH * DISPLAY_HEIGHT]で確保し、129行目のGFX_PixelBufferCreate関数の中で、frameBuffer[0]として登録しています。背景データはapp.cの中にあるAPP_PaintFrameWithBuffer関数で設定しています。この関数の中で、配列frameBufferのアドレスを読み込み、その配列に背景の画像データを代入しています。もっと簡単な設定方法があるかも知れません。


  GFXtest04.zip:タッチスクリーンを使用しています。次の図は起動時の画面です。

 「Cache」の効果を見るためには、文字を変えてみる必要があります。ここでは、マイクロチップ社のロゴマーク(白いMを赤丸で囲ったもの)を、タップするごとに「英文字」(起動時の画面)と「和文字」(下に示した画面)とが交互に変わります。文字の背景がちらつくことがありません。「Cache」の効果です。

なお、上の2つの画面で「-1」と表示されていますが、これは、タップした点のピクセル座標(x,y座標)です。タップしていないときには、x=y=-1となっています。 これを削除したい場合は、以下の図で示すdrv_touch_xpt2046.cの770行目と771行目にある

printNumI(PCapX[0], 200, 20, 5, ' ');
printNumI(PCapY[0],200, 40, 5, ' ');

の2行を削除するか、コメント文にします。


  aria_weather_forecast_02.zip:これは、マイクロチップ社が提供しているサンプル・ファームウェアで、それを少し書き換えたものです。画面の右上のマイクロチップ社のロゴマークをタップすると、表示言語が変わります。また、画面の右中ほどの雲のマークをタップすると、雨や晴れのマークに変化します。

文字(string)の背景(Backgrond type)は「Cache」としています。 試しにGraphics Composerを起動させて、以下のようにProperties Editorウィンドウで、すべての文字のBackground Type を「Cache]から「None」に変えてファームウェアを実行すると、「Cache]の効果が実感できます。


  aria_showcase.zip:これは、マイクロチップ社が提供しているサンプル・ファームウェアで、Ariaで何ができるかを展示したショーケース(展示箱)という名前を持ったものです。使用されていた画像は、元々RGP8888用の画像なので、それをRGB565に変換しました。このため、特にSlide Show Demoで黒塗りの箇所が出てきますが、動作確認には支障はないと思います。アルファ・ブレンディングの箇所はうまく働いていません。使用した液晶モジュールには、液晶コントローラ内のRAMデータを読むために必要なRD端子ががないので、アルファ・ブレンディングはできません。


  aria_basic_motion.zip:これは、マイクロチップ社が提供しているサンプル・ファームウェアです。画面右下の電源ボタンを押すと、画面真ん中のマイクロチップ社のロゴマークが回転し、画面右上の電池が消費されていきます。電池がなくなると、ロゴマークの回転が止まります。電源につなぐ(コンセント画像が下のほうに現れるのでタップ)と電池が充電され、充電が終わるとロゴマークが再び回転し始めます。なお、グローバル・パレットは使わないようにしています。使い方は勉強中です。

  aria_scrolling.zip:これも、マイクロチップ社が提供しているサンプル・ファームウェアです。ウィジェット以外の白地の場所を左右にドラッグすると、旗の付いたボタンがそれに応じて移動します。


PIN設定の書き出しと読み込み

 一度設定したPICのPIN設定をファイルに書き出すことができます(エクスポート)。そして、他のファームウェアで、その設定を読み込むことができます(インポート)。同じPIN設定を利用するときに便利です。

1.書き出し

 1-1:以下の図での矢印をマウスでクリックします。 すると、下図のようにExport Menu画面が現れるので、MPLAB Harmony & Apprication Configulation Optionsを選び、このウィンドウの下方にあるExportボタンを押します。

 1-2:すると、下図のようなウィンドウが現れるので下図のように展開して、Portsを選び、このウィンドウの下方にあるSave Asボタンを押します。適当なファイル名をつけて保存します。

2.読み込み

 2-1:以下の図での矢印をマウスでクリックします。すると、下図のようにInport Menu画面が現れるので、MPLAB Harmony & Apprication Configulation Optionsを選び、このウィンドウの下方にあるImportボタンを押します。保存したファイルを開きます。

 2-2:すると、下図のようなウィンドウが現れるので、MPLAB Harmony & Apprication Configulationを選び、このウィンドウの下方にあるImportボタンを押します


戻る