YS電子工作ラボ

グラフィック液晶 デモ
       INT018 (160 x 128 pixel)  1.8インチ
       
(→プロジェクトファイル(Harmony Ver.2.04版 ) ダウンロード) 


   PIC32MZ 評価ボードには、Displaytech社のINT035(QVGA: 320 x 240pixel  3.5インチ)のグラフィク液晶が標準で搭載されていますが、 このINTのシリーズの中で一番小型のグラフィック液晶 としてINT018があります。 INT018は 1.8インチで160 x 128ピクセル、タッチパネル機能なしと云った仕様です。 このINT018は PIC32MZ 評価ボード(MZ100 - A001)で評価することができます。

 <INT018について>
  ・ 液晶の詳細スペックについてはDisplaytech社のホームページを参照してください。( → URL )
  ・ YS電子工作ショップでは取り扱っていません。 購入先としては、RSコポーネント、MOUSER、Digi-Keyなどがあります。
  ・ PIC32MZ評価ボードに追加する要領については右のURLを参照してください。( → URL ) 
  ・ INT028、INT024、INT022とはコネクタ(12p x 2)に関して 機械的にまた電気的に取り付け互換性がありますが、ドライバーは若干異なります。

以下に サンプルのデモソフトです。





<仕様>
 ・PIC32MZ 及びHarmonyのグラフィックライブラリを用いて Displaytech社のグラフィック液晶INT018にグラフィックを表示する。
 ・表示する画面は 以下の2つの画面とする。 

       表示文字          文字の向き    表示画像  備考
画面A  INT018 
160 x 128pixel 


横向き
 

 128 x 77 pixel 、jpg画像
 
画面B PIC32MZ

 
縦向き
(画面Aの文字の向きに対して
反時計方向に90度回転した方向)


 128 x 77 pixel、jpg画像
 


 ・画面Aと画面Bを2sec毎に交互に液晶に表示すること。
 ・グラフィク液晶には安定して表示が行われるべく以下を実施のこと。
   インテル8080 インターフェースの制御ライン(CS、RS、RD、WR,RST)は、10KΩでプルアップのこと( → 参照






<回路図> ( → PDFファイル





<外観>PIC32MZ評価ボード(→購入方法)を使った実験品の外観です


<動作結果>(→動画:1080pのHD動画を見ることができます。) 

画面A 
          
画面B





<解説> 記載してある内容は要点だけです。 詳細はプロジェクトファイルを精読願います。
        (以下は、Harmony v2.04 をもとに作成しています。最新のバージョンとは異なる点があるかもしれませんので注意してください。)

 MHC設定 1 Options & Pin Settingsの設定


  Options

項目 ①Configuration設定
Device & Project Configuration
  > PIC32MZ2048 Device Configuration
②Configuration設定
Device & Project Configuration
 > Project Configuration> XC32(Global option)
 > XC32-ld > General
②PMP設定 
Harmony Framework Configuration > Drivers
 > PMP 
M
H
C
 
備考 デフォルトからの変更要領:
 FPLLIDIV: DIV3
 FPLLICLK: PLL_POSC
 POSCMOD: EC

システムクロック周波数: 200MHz
外部
 主発振器: 24MHz

#pragma config FNOSC = SPLL
#pragma config POSCMOD = EC
#pragma config FPLLIDIV = DIV_3
#pragma config FPLLICLK = PLL_POSC
#pragma config FPLLMULT = MUL_50
#pragma config FPLLODIV = DIV_2 
(デフォルトからの変更要領:
 Heap Size(bytes): 25600 )

 ★ 本欄②の部分は⑤のGraphics Stacks
設定を行うとMHCにより自動的に作成されます。 従って、Heap Sizeをキーボードから設定する
必要はありません。
デフォルトからの変更要領:
 □Use PMP driver? : チェック追加


★ INT018(RA8872)のPMPは8ビットです。
項目 ④ Touch Drivers 設定
Harmony Framework Configuration > Drivers
 > Touch Drivers
⑤ Graphics Stacks 設定
Harmony Framework Configuration > Graphics Stacks
⑤Message 設定
Harmony Framework Configuration
> System Services > Message
M
H
C
備考 デフォルトからの変更要領:
 □Use GENERIC Driver?: チェック追加


NT018にタッチ機能はないのですが、 タッチ機能に係る設定がないとコンパイルできなかったり、できても実行ファイルが動作しない等のことからチェックを追加します。
デフォルトからの変更要領:
 □Use Graphics Stack?: チェックを追加
 Graphics display > Resolution >Height: 160
 Graphics display > Resolution >Width: 160
 Graphics controller >Select controller type
      : Generic Customizable Driver
デフォルトからの変更要領:
 □Use Message System Service?
          : チェックを追加

 
項目 ⑥Touch ,Timer設定
Harmony Framework Configuration > System Services
 > Touch
Harmony Framework Configuration > System Services

 > Timer
   
M
H
C
 
   
備考  デフォルトからの変更要領:
 □Use Touch System Service?
           : チェックを追加
 □Use Timer System Service?
           : チェックを追加


NT018にタッチ機能はないのですが、 タッチ機能に係る設定がないとコンパイルできなかったり、できても実行ファイルが動作しない等のことからチェックを追加します。
   


 

 MHC設定2 Graphics Composerの設定 

  ラベルウィジェットとイメージウィジェットを使って 以下のような Screen1 と Screen2 を作成します。
 作成要領については、Graphics Composerの使い方 (  → URL )を参照願います。

screen  Screen1  Screen2 
Graphics  
  Composer 



■ INT018用グラフィックライブラリの追加要領
  INT018用グラフィックライブラリを以下の要領で組み込みます。
   以下の説明ではプロジェクトフォルダは"C:\microchip\harmony\v2_04\apps\_WK\Hp204\gfx204\12a 018 Demo" です。

drv_gfx_generic.h
 


"C:\microchip\harmony\v2_04\apps\_WK\Hp204\gfx204\12a 018 Demo
      \firmware\src\system_config\default\framework\gfx\driver\controller\generic\drv_gfx_generic.h"

上記パスにあるdrv_gfx_generic.hを開きファイル内容をすべて削除したあと、ys_drv_gfx_int018.h(以下参照)のファイル内容をコピーして貼り付けます。
(備考)
"C:\microchip\harmony\v2_04\framework\gfx\driver\controller\generic\templates\drv_gfx_generic.h.ftl"
上記ファイルの内容をys_drv_gfx_int018.hの内容に変更しておくとMHCが自動的に所要の drv_gfx_generic.hを生成してくれます。また煩わしいプロジェクトファイル再生成時のチェックが発生しなくなります。

以下、ys_drv_gfx_int018.h


 
drv_gfx_generic.c
 


"C:\microchip\harmony\v2_04\apps\_WK\Hp204\gfx204\12a 018 Demo
        \firmware\src\system_config\default\framework\gfx\driver\controller\generic\drv_gfx_generic.c"

上記パスにあるdrv_gfx_generic.cを開きファイル内容をすべて削除したあと、ys_drv_gfx_int018.c(以下参照)のファイル内容をコピーして貼り付けます。
(備考)
"C:\microchip\harmony\v2_04\framework\gfx\driver\controller\generic\templates\drv_gfx_generic.c.ftl"
上記ファイルの内容をys_drv_gfx_int018.cの内容に変更しておくとMHCが自動的に所要の drv_gfx_generic.hを生成してくれます。また煩わしいプロジェクトファイル再生成時のチェックが発生しなくなります。

以下、ys_drv_gfx_int018.c



 
gfx_driver_def.c
 


"C:\microchip\harmony\v2_04\apps\_WK\Hp204\gfx204\12a 018 Demo
        \firmware\src\system_config\default\framework\gfx\hal\gfx_driver_def.c"


上記パスにあるgfx_driver_def.cを開きファイル内容をすべて削除したあと、ys_gfx_driver_def_int018.c(以下参照)のファイル内容をコピーして貼り付けます。

以下、ys_gfx_driver_def_int018.c





■ app.cに、青字部分を追加します。

① delay_us( )、delay_ms( ) という NOPを使った 1μsec 、1msec単位の遅延関数をつくります。HarmonyではSYS_Tasks ( )の中で
   長い時間の遅延をつかうとその遅延時間だけタスクがそこで止まってしまいますので注意して使う必要があります。
  int delay_Clock = 200000000; //システムクロック:200MHz

  void delay_us(volatile unsigned int usec) //1μsec遅延
  {
    volatile int count;

    count = (int)(delay_Clock/20000000)*usec;
  ……
  ……


② インターバル動作するシステムタイマのオブジェクトを生成しています。 この関数の定義は libaria_event.c の中で行われています。 
  TmrFunc();



以下、app.c






■ system_init.cに、青字部分を追加します。

① PICの立ち上がりを2000msec遅延させます。INT018の内部制御回路が完全に立ち上がるまでの遅延時間です。 INT018が完全に立ち上がる前にPICが立ち上がり、 PICと接続しているピン(CS,RS,RD,WR,RESET 及びDATA00-DATA15)に何らかのパルス信号が入ってしまうとINT018は 永遠に立ち上がれなくなってしまいます。 PIC32MZ評価ボード(MZ100-A001)ではハードの回路で リセットICM51957Bにより650msecの遅延時間を作って、 合計2,650msec(= ハード650msec + ソフト2000msec )でプログラムをつくるようにしています。
 ( → INTシリーズの立ち上がり時間に係るQ.A.)

  delay_ms(2000); //INT018の内部回路が立ち上がるまで待つ
  //1200msec:NG、 1500msec以上OK at N = 3



以下、system_init.c







■ libaria_events.c に青字部分を追加します。

 libaria_events.cの場所は "C:\microchip\harmony\v2_04\apps\_WK\Hp204\gfx204
                      \12a 018 Demo\firmware\src\system_config\default\framework\gfx\libaria\libaria_events.c"





①変数の定義をおこなっています。 handleTimer1は、システムタイマオブジェクトのハンドルです。 Scrは Graphics Composerに
 おけるスクリーンscreen1、screen2に対応した整数です。 ys_DISP_ORIENTATION は液晶画面の回転角度です。 評価ボードから見て
 水平方向に文字が表示されている場合が 0 で これに対して反時計方向に回転した向きに文字が表示される場合が 90 です。

  SYS_TMR_HANDLE handleTimer1;
  int Scr = 0;
  extern int ys_DISP_ORIENTATION; // 90;



②(システムタイマによる)繰り返しタイマのコールバック関数です。2sec毎に呼びだされます。
  laContext_SetActiveScreen( )は、スクリーン描画を実行する関数です。
  void Timer_Callback1 ( uintptr_t context, uint32_t currTick )
  {
    switch(Scr)
    {
      case 0:
        ys_DISP_ORIENTATION = 0; //horizontal: 160 vertical: 128
        laContext_SetActiveScreen(screen1_ID); //screen1 表示
        // LATGbits.LATG15 = 1;
        break;
      case 1:
        ys_DISP_ORIENTATION = 90; //horizontal: 160 vertical: 128
        laContext_SetActiveScreen(screen2_ID); //screen2 表示
        // LATGbits.LATG15 = 0;
        break;
      default:
        break;
    }
    Scr++;
    if(Scr >= 2)Scr = 0;
  }



③(システムタイマによる)インターバルタイマのオブジェクトを生成する関数です。  PIC起動時に1回だけ呼び出されます。
  生成後はTimer_Callback1( )が2000msec毎に呼び出されます。
  void TmrFunc(void)
  {
    handleTimer1 = SYS_TMR_CallbackPeriodic(2000, 1, Timer_Callback1);
    // LATGbits.LATG15 = 1;
  }



以下、libaria_events.c