YS電子工作ラボ
  第83回PICクラブ 情報交換会 (開催日 2022.01.10)
<紹介作品

INT035 by Legato
    
 グラフィック デモ
 以下、 第83回情報交換会報告(後閑さん、FaceBook Picfun.club.より)
    講評 …… 後閑さん
   
3.PIC32MZのグラフィックLCD制御 :斎藤さん
  前回からLCDを大型のものに変更し、Legatoを使ってデモ用のプログラムを作成した報告でした。結局ドライバを作成することになり結構苦労されたようです。また、I2CのキャラクタLCDを同時に動かそうとしたところ、ピンが重複してしまってそれの解決にも苦労されたようです。
http://www.ys-labo.com/Shop/Referrence/PIC32MZ/2112/V3%20INT035%20by%20Legato%20gfx%20Demo%20sum.html
 以下、紹介に際し使用した資料
 
  INT035 by Legato
    グラフィック デモ
  2022.01.10 PIC情報交換会資料 
  YS電子工作デザイン http://www.ys-labo.com/  斎藤
  YS電子工作ショップ http://ys-labo.shop-pro.jp/
1.  概要
  1.1 要約
 ・PIC32MZでグラフィック液晶INT035(3.5インチ、QVGA 320x240 pixel)を制御
   グラフィックI/F: 8080 16ビットパラレル EBI
   タッチI/F: SPI
 ・グラフィックライブラリ: Harmony Ver.3 Legato(レガート)
 ・マイコン: PIC32MZ2048EFH100
 ・デモ内容:
  1. ビットマップファイル画像表示、 ASCII文字列の表示、 ボタンウィジェットへのタッチによる表示スクリーンの切り替え
  2. LED用ボタンで キバン上のLEDを ON/OFF
  3. 円、直線、矩形の表示をターマーで 切り替え表示するスライドショー
  4. タッチ位置座標をキャラクタ液晶に表示
 
1.2. システム構成

           
2.  外観
全体 INT035部 拡大

3.  回路図(→PDFファイル
4.
  開発環境
 ・ Harmony v.3 XC32 v3.01 、グラフィックライブラリ: Legato
 ・ PIC: PIC32MZ2048EFH100
5.   動作結果
  1. 動画   →  YouTube (1080pのHD動画)  
2. 各画面
 
第1モード

TOP画面
ラベルへの文字表示
画像の表示
 
ラベル文字
Welcome to
 PIC32MZ
  Evaluation Board
ラベル文字
<Harmony Ver.3>
 LCD INT035
  by Legato
第2モード 

LEDのON/OFF制御
LED : OFF LED : ON
第3モード  

図形の描画
 及びスライドショー
1. 描画図形 : なし 2. 描画図形 : 円
3. 描画図形 : 円、直線 4. 描画図形 : 円、直線、矩形


 

6.  プログラムの作成プロセス 及び内容
 
1. プロジェクトファイルの生成
 ① Project Graphに 所要のコンポーネントの配置して、設定 及び結線を行う。
 ② INT035は マイクロチップサンプルソフトLegato_Quickstart( legato_qs_mzef_cu_tm4301b_ssd1963.X)と同じグラフィックドライバーIC SSD1963(1215KB SRAM Frame Buffer)を使っているので、このサンプルのExternal Controllerの設定からスタート
 ③ 制御ポートWR、RD、RS、CSのピンのFunctionをGPIOとし、また下記指定の下記名称に設定し、8080 16ビットパラレルモード送信とする(→Pin Settings)  plib_gpio.h
 GFX_DISP_INTF_PIN_CS、GFX_DISP_INTF_PIN_RSDC、GFX_DISP_INTF_PIN_RD
 GFX_DISP_INTF_PIN_WR、 GFX_DISP_INTF_PIN_RESET
 ④ MHCから生成されるファイルdrv_gfx_external_controller.c内のグラフィックドライバー関数をINT035液晶表示が適正になるまで修正
 
 (注)グラフィック関係設定の技術情報
   ・マイクロチップサンプルプログラム(右の画像参照)
      Legato_Quickstart( legato_qs_mzef_cu_tm4301b_ssd1963.X) 
      ボード: Curiosity PIC32MZ EF 2.0 Development Board
      I/Fボード: SSD1963 LCD Adapter Graphics Card(16 bit EBIパラレルI/F用 AC320214)
      液晶: 4.3" 480 x 272 WQVGA Display Module with maXTouch(AC320005-4)
   ・液晶INT035データシート
   ・液晶INT035メーカのフォーラム(SEACOMP Forum: 旧Displaytech Forum)  ←液晶初期化情報など
   ・液晶ドライバーIC(SSD1963)データシート
   ・8080 R/W Timing、 6800 R/W Timing

・Curiosity PIC32MZボードのmikroBusに 自作ボードからキャラクタ液晶、LEDなどを接続して実験(動画→ URL)
2. Graphic Composer によるScreen作成
 ・Screenに ラベルウィジェット、ボタンウィジェット、ピクチャーウィジェットなどドラッグで配置して、レイアウトを行う
 ・配置したウィジェットの設定を行う。
 ・Screenのソースコードの生成を行う。
 ・プロジェクト全体のソースコード生成を行う。
     Screen1_treele_gen_screen_Screen1.c
3. タッチ情報をプロジェクトにインポート
void SYS_Tasks ( void )
{   
    /* Maintain Device Drivers */
        DRV_ExternalController_Update();

        ys_DRV_TOUCH_INT035(); //タッチ検出、タッチ種類、タッチ位置とシステムに注入

    /* Maintain Middleware & Other Libraries */    
    Legato_Tasks();
    SYS_INP_Tasks();

    /* Maintain the application's state machine. */
        /* Call Application task APP. */
    APP_Tasks();
}

app.c
INT035_Touch_lib_XC32.h
INT035_Touch_lib_XC32.c

4. グラフィック制御とI2Cキャラクタ液晶制御の同時動作化
  グラフィック制御で使用しているEBIモジュールのEBICS0端子とI2C2モジュールのSCL2端子が共に59ピンで重複使用となり、同時動作ができない問題が発生した。
 対策として、以下を実施して同時動作可能とした。
① EBIコンポーネントでECBCS0 Pin Enable bit チェックを外す。 →URL
② APP_Initialize ( )のなかでEBIMSK0 (EXTERNAL BUS INTERFACE ADDRESS MASK REGISTER)へ以下の書き込みをおこう。

void APP_Initialize ( void )

  ……

  EBIMSK0 = 0x28;   //SRAM 8MB用として、EBICS0なしモードでEBIを動作させる

//以下でも動作可
//EBIMSK0 = 0x20; //NG //chip select is not used
//EBIMSK0 = 0x21; //OK //64KB
//EBIMSK0 = 0x22; //OK //128KB
//EBIMSK0 = 0x23; //OK //256KB
//EBIMSK0 = 0x24; //OK //512KB
//EBIMSK0 = 0x25; //OK //1MB
//EBIMSK0 = 0x26; //OK //2MB
//EBIMSK0 = 0x27; //OK //4MB
//EBIMSK0 = 0x29; //OK //16MB

  ……

NotRemove_EBIMSK0_0x28.jpg
plib_ebi.c
initialization.c
EBIMSKx register データシート
PIC32MZデータシート
     
7. 参考
1. YS電子工作ラボHP での紹介/プロジェクトファイル
 
     
PIC32MZ Harmony v3版   → URL