PIC用コンパイラmikroC ProのGLCD用ライブラリを使って秋月で販売されているSG12864Aがコントロールできるかを確認しました。

ヘルプでGLCD関連の部分を見ると、初期化関数Glcd_Init();を呼ぶ前にグローバル変数でセットしなければならない部分があり今回は以下のようになりました。PICは18F452を使っています。


// Glcd_Init()を呼ぶための準備開始
char GLCD_DataPort at PORTD;   // dataはPORTD

sbit GLCD_CS1 at RC5_bit;  // チップセレクト
sbit GLCD_CS2 at RC4_bit;  // チップセレクト
sbit GLCD_RS  at RC6_bit;
sbit GLCD_RW  at RC3_bit;
sbit GLCD_EN  at RC2_bit;
sbit GLCD_RST at RC1_bit;

sbit GLCD_CS1_Direction at TRISC5_bit;   //チップセレクト
sbit GLCD_CS2_Direction at TRISC4_bit;   // チップセレクト
sbit GLCD_RS_Direction  at TRISC6_bit;
sbit GLCD_RW_Direction  at TRISC3_bit;
sbit GLCD_EN_Direction  at TRISC2_bit;
sbit GLCD_RST_Direction at TRISC1_bit;

// Glcd_Init()を呼ぶための準備終了


ヘルプを見る限りでは、データポート部分は連続したポート0-7の指定が必要になります。他の制御信号は自分の好きなポートのビットを割り当てられるようです。LCDはメーカーが違っても配線やコントロールの仕方が同じ場合が多いのでSG12864Aも問題なく操作できると思っていました。


実際に、この初期化でGLCDに何かを描画させるとCS1、CS2チップセレクトが逆に働いているようです。左側に描画されなければならないものが右側に、右側に描画されなければならないものが左側に描画されてしまいます。配線間違いかと思い確認しましたが間違っていませんでした。推測ですが、mikroC ProのGLCDライブラリのCS1、CS2出力はActive Lowが前提になっているのではないかとおもわれます。SG12864は説明書を見るとCS1,CS2はActive high です。GLCDのチップセレクト信号はCS1とCS2の2つだけで、必ずどちらかが選択されていて両方とも選択されていない状態がなければCS1とCS2はNOTの関係になっているのでは?と思い、LCDとPICの配線はそのままでソフトウエアで


// Glcd_Init()を呼ぶための準備開始

char GLCD_DataPort at PORTD;   // dataはPORTD

sbit GLCD_CS1 at RC4_bit;    // SG12864がactive highのため
sbit GLCD_CS2 at RC5_bit;    // SG12864がactive highのため
sbit GLCD_RS  at RC6_bit;
sbit GLCD_RW  at RC3_bit;
sbit GLCD_EN  at RC2_bit;
sbit GLCD_RST at RC1_bit;

sbit GLCD_CS1_Direction at TRISC4_bit;     // active high対策
sbit GLCD_CS2_Direction at TRISC5_bit;     // active high対策
sbit GLCD_RS_Direction  at TRISC6_bit;
sbit GLCD_RW_Direction  at TRISC3_bit;
sbit GLCD_EN_Direction  at TRISC2_bit;
sbit GLCD_RST_Direction at TRISC1_bit;

// Glcd_Init()を呼ぶための準備終了

とCS1とCS2を入れ替えてみました。これでしばらく動作させた限りではうまく動いているようです。


mikroCのGLCD関連のライブラリをそのまま使うのであればソフトを元に戻してハードウエアを変更してCS1、CS2とLCDの間に反転回路を設けなければなりません。mikroC Proのコンパイラが正式にサポートするGLCDモジュールはmikroelectoronikaが販売するモジュールなので、HPからこのモジュールの仕様を調べようとしましたが見つけることができませんでした。CS1とCS2がActive lowとわかれば、トラブルの原因がわかり安心できます。


Glcd_Image();でコンパイラ付属のサンプルビットマップを表示すると以下の通りになります。


Glcd_Set_Font(Character8x7, 8, 7, 32);// Change font
Glcd_Write_Text(“x=1 page0”, 1, 0, 2);   // page 0
Glcd_Write_Text(“x=1 page1”, 1, 1, 2);   // page 1
Glcd_Write_Text(“x=1 page2”, 1, 2, 2);   // page 2
Glcd_Write_Text(“x=1 page3”, 1, 3, 2);   // page 3
Glcd_Write_Text(“x=1 page4”, 1, 4, 2);   // page 4
Glcd_Write_Text(“x=1 page5”, 1, 5, 2);   // page 5
Glcd_Write_Text(“x=1 page6”, 1, 6, 2);   // page 6
Glcd_Write_Text(“x=1 page7”, 1, 7, 2);   // page 7



でCharacter8x7フォントで文字を描画すると以下の通り


Glcd_Set_Font(FontSystem5x7_v2 , 5, 7, 32);// Change font


でフォントを変えると以下の通り。





Glcd_Circle(64, 32, 20, 1);// (64,32)に半径20
Glcd_Rectangle(5, 5, 120, 40, 1);// 長方形
Glcd_H_Line(10, 100, 20, 1);  // 水平ライン
Glcd_V_Line(5, 50, 10, 1);   // 垂直ライン


を実行すると以下の表示になります。





左右にまたがった描画もうまくできているようなので、mikroC ProでSG12864Aの操作はできそうであることがわかりました。


その後KS0108を使ったLCDモジュール用のライブラリのソースを公開されているのがネット上でいくつか見つかったので、ソースを眺めてみるとCS1、CS2信号はhighで選択、lowで選択の2通りがあるのがわかりました。

Tags: ,

Leave a Reply

This blog is kept spam free by WP-SpamFree.

6 visitors online now
1 guests, 5 bots, 0 members
Max visitors today: 9 at 04:52 am UTC
This month: 20 at 12-08-2017 09:20 pm UTC
This year: 42 at 01-23-2017 11:11 am UTC
All time: 133 at 05-04-2015 11:06 pm UTC