グラフィック液晶 デモ
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動画を見ることができます。)
<解説> 記載してある内容は要点だけです。 詳細はプロジェクトファイルを精読願います。
(以下は、Harmony v2.04 をもとに作成しています。最新のバージョンとは異なる点があるかもしれませんので注意してください。)
■ MHC設定 1 Options & Pin Settingsの設定
■ Options
■ MHC設定2 Graphics Composerの設定
ラベルウィジェットとイメージウィジェットを使って 以下のような Screen1 と Screen2 を作成します。
作成要領については、Graphics Composerの使い方 ( → URL )を参照願います。
■ 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