グラフィック液晶 デモ
INT028 QVGA(320 x 240 pixel) 2.8インチ
INT024 QVGA(320 x 240 pixel) 2.4インチ
INT022 QVGA(320 x 240 pixel) 2.2インチ
(→プロジェクトファイル(Harmony Ver.2.04版 ) ダウンロード)
PIC32MZ 評価ボードには、Displaytech社のINT035(QVGA: 320 x 240pixel 3.5インチ)のグラフィク液晶が標準で搭載されていますが、 このINTのシリーズに 小型でタッチパネル機能がないQVGAのグラフィック液晶
INT028(2.8インチ)、INT024(2.4インチ)、INT022(2.2インチ)があります。 これらの液晶は PIC32MZ 評価ボード(MZ100
- A001)で評価することができます。 尚、最近 INT028とINT024についてはタッチ機能付のタイプも発売されたようです。 <INT028、INT024、INT022について> ・ 液晶の詳細スペックについてはDisplaytech社のホームページを参照してください。( → URL ) ・ YS電子工作ショップでは取り扱っていません。 購入先としては、RSコポーネント、MOUSER、Digi-Keyなどがあります。 ・ PIC32MZ評価ボードに追加する要領については右のURLを参照してください。( → URL ) INT028、INT024、INT022は 液晶を制御しているコントローラは同じRA8872です。 違いはグラフィック液晶のサイズが異なるだけで、 電気的インターフェース、コネクタの種類 及びピンアサインも全く同じで、キバンへの取り付け寸法まで同じす。 以下に、サンプルのデモソフトです。 サンプルのデモソフトは1つでNT028、INT024、INT022共用となっています。 |
<仕様>
・PIC32MZ 及びHarmonyのグラフィックライブラリを用いて Displaytech社のグラフィック液晶INT028、INT024、INT022に
グラフィックを表示する。
・表示する画面は 以下の2つの画面とする。
表示文字 | 文字の向き | 表示画像 | 備考 | |
画面A | Graphics LCD INT028, 024, 022) (2.8" 2.4" 2.2") QVGA 320 x 240pixel <Vertical> |
横向き |
![]() 240 x 144 pixel 、jpg画像 |
|
画面B | Welcome to PIC32MZ !! <Horizontal> |
縦向き (画面Aの文字の向きに対して 反時計方向に90度回転した方向) |
![]() 240 x 144 pixel、jpg画像 |
・画面Aと画面Bを2sec毎に交互に液晶に表示すること。
・グラフィク液晶には安定して表示が行われるべく以下を実施のこと。
インテル8080 インターフェースの制御ライン(CS、RS、RD、WR,RST)は、10KΩでプルアップのこと( → 参照)
<回路図> ( → PDFファイル)
<外観>PIC32MZ評価ボード(→購入方法)を使った実験品の外観です。
グラフィック液晶取り付け前 (液晶(左から): INT028、INT024、INT022 |
グラフィック液晶(INT024)取り付け後 |
<動作結果>(→ 動画:1080pのHD動画を見ることができます。)
画面A | 画面B | |
INT022 | ![]() |
![]() |
INT024 |
![]() |
![]() |
INT028 |
![]() |
![]() |
<解説> 記載してある内容は要点だけです。 詳細はプロジェクトファイルを精読願います。
(以下は、Harmony v2.04 をもとに作成しています。最新のバージョンとは異なる点があるかもしれませんので注意してください。)
■ MHC設定 1 Options & Pin Settingsの設定
■ Options
■ MHC設定2 Graphics Composerの設定
ラベルウィジェットとイメージウィジェットを使って 以下のような Screen1 と Screen2 を作成します。
作成要領については、Graphics Composerの使い方 ( → URL )を参照願います。
■ INT028、INT024、INT022用(以下、INT028_24_22用)グラフィックライブラリの追加要領
INT028とINT024とINT022のグラフィックライブラリは共用です。 INT028_24_22用グラフィックライブラリを以下の要領で組み込みます。
以下の説明ではプロジェクトフォルダは"C:\microchip\harmony\v2_04\apps\_WK\Hp204\gfx204\11a
028 Demo" です。
① | drv_gfx_generic.h |
![]() "C:\microchip\harmony\v2_04\apps\_WK\Hp204\gfx204\11a 028 Demo \firmware\src\system_config\default\framework\gfx\driver\controller\generic\drv_gfx_generic.h" 上記パスにあるdrv_gfx_generic.hを開きファイル内容をすべて削除したあと、ys_drv_gfx_int028_24_22.h(以下参照)のファイル内容をコピーして貼り付けます。 (備考) "C:\microchip\harmony\v2_04\framework\gfx\driver\controller\generic\templates\drv_gfx_generic.h.ftl" 上記ファイルの内容をys_drv_gfx_int028_24_22.hの内容に変更しておくとMHCが自動的に所要の drv_gfx_generic.hを生成してくれます。また煩わしいプロジェクトファイル再生成時のチェックが発生しなくなります。 以下、ys_drv_gfx_int028_24_22.h |
|
② | drv_gfx_generic.c |
![]() "C:\microchip\harmony\v2_04\apps\_WK\Hp204\gfx204\11a 028 Demo \firmware\src\system_config\default\framework\gfx\driver\controller\generic\drv_gfx_generic.c" 上記パスにあるdrv_gfx_generic.cを開きファイル内容をすべて削除したあと、ys_drv_gfx_int028_24_22.c(以下参照)のファイル内容をコピーして貼り付けます。 (備考) "C:\microchip\harmony\v2_04\framework\gfx\driver\controller\generic\templates\drv_gfx_generic.c.ftl" 上記ファイルの内容をys_drv_gfx_int028_24_22.cの内容に変更しておくとMHCが自動的に所要の drv_gfx_generic.hを生成してくれます。また煩わしいプロジェクトファイル再生成時のチェックが発生しなくなります。 以下、ys_drv_gfx_int028_24_22.c |
|
③ | gfx_driver_def.c |
![]() "C:\microchip\harmony\v2_04\apps\_WK\Hp204\gfx204\11a 028 Demo \firmware\src\system_config\default\framework\gfx\hal\gfx_driver_def.c" 上記パスにあるgfx_driver_def.cを開きファイル内容をすべて削除したあと、ys_gfx_driver_def_int028_24_22.c(以下参照)のファイル内容をコピーして貼り付けます。 以下、ys_gfx_driver_def_int028_24_22.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遅延させます。INT028, INT024, INT022の内部制御回路が完全に立ち上がるまでの遅延時間です。 INT028,
INT024, INT022が完全に立ち上がる前にPICが立ち上がり、 PICと接続しているピン(CS,RS,RD,WR,RESET 及びDATA00-DATA15)に何らかのパルス信号が入ってしまうとINT028,
INT024, INT022は 永遠に立ち上がれなくなってしまいます。 PIC32MZ評価ボード(MZ100-A001)ではハードの回路で リセットICM51957Bにより650msecの遅延時間を作って、 合計2,650msec(=
ハード650msec + ソフト2000msec )でプログラムをつくるようにしています。
( → INTシリーズの立ち上がり時間に係るQ.A.)
delay_ms(2000); //INT028、INT024、INT022の内部回路が立ち上がるまで待つ
//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
\11a 028 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: 240 vertical: 320
laContext_SetActiveScreen(screen1_ID); //screen1 表示
// LATGbits.LATG15 = 1;
break;
case 1:
ys_DISP_ORIENTATION = 90; //horizontal: 320 vertical: 240
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