本文へ移動
サポートシェアリングソリューション
OKWAVE Plus

このQ&Aは役に立ちましたか?

ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:同じドライブIC搭載のLCDで位置ずれが起きる)

同じドライブIC搭載のLCDで位置ずれが起きる

2023/09/06 14:24

このQ&Aのポイント
  • 今まで購入が可能だったLCDモジュールが終息品になり、代わりを探しています。
  • CH12864FというLCDモジュールを試し接続してみた結果、そのままのプログラムで表示ができることを確認しました。
  • 同じ内臓コントローラチップを使用している別のLCDモジュールを試してみたところ、位置ずれが起きてしまいました。位置ずれの修正はプログラムで行う必要があるのでしょうか?
※ 以下は、質問の原文です

同じドライブIC搭載のLCDで位置ずれが起きる

2018/04/13 17:18

今まで購入が可能だったというLCDモジュールがすでにメーカー側で終息品になっているということで、代わりになるLCDモジュールを探しています。

今まで使用していたLCDモジュールが
PE12864-004
というLCDモジュールだったのですが、

秋葉原の部品屋さん(aitendo)で購入した”CH12864F”という型番の前よりもサイズが小さめのLCDモジュールを試しい接続してみたところ、そのままのプログラムで表示動作ができることを確認しました。
このCH12864FというLCDモジュールのページを見てみると
http://www.aitendo.com/product/12387

内蔵コントローラチップは”ST7567R”というのを使用しているということがわかりました。
そこで、同じ内臓コントローラチップを使用しているLCDモジュールならばいろいろな形状や種類のLCDモジュールでもOKなのかなと思い、同じST7567Rを搭載しているという

"FGC12864SYHDA-000011E"と書かれたLCDモジュールを購入してためしてみたのですが、マイコンから送信している漢字フォントの画像などは表示できているのですが、なぜか位置ずれが起きてしまっていました。

同じ内臓コントローラチップを使っていても、位置ずれの修正などはプログラムで行わなければいけないのでしょうか?
どうぞ、ご教示の程よろしくお願い致します。

質問者が選んだベストアンサー

ベストアンサー
2018/04/13 18:01
回答No.2

毎度JOです。
コントローラ ST7567
https://newhavendisplay.com/appnotes/datasheets/LCDs/ST7567.pdf

65x132 Dotのコントロールが出来る様です、液晶の表示範囲(64x128)がコントローラ ST7567の「65x132 Dot」の何処にマッピングされているかが問題の本質ではなかろうか
マイコンのプログラムが変更出来るなら、この辺りの変更で問題解決しそうですね。

お礼

2018/04/16 14:56

JO_Oさん

回答頂きありがとうございます。
その後、ソースコードを見ながら、なんとなくここなのでは?と思ったところをかたっぱしから数値の変更をしたりして、変化を見ながらデバッグしてみたところ修正できました。


原因は、このFGC12864SYHDA-000011EというLCDの場合では、スクリーンの書き込みラインの位置の初期値をいじらないと表示したい場所に来ないということがわかりました。

修正した箇所を調べたら、
”Display Start Line Set”というレジスタに書き込む値を変えているということでした。電源を入れた際のLCDの初期化のルーチンにこれがあったので修正したところ表示したい位置に描画できました。


http://www.newhavendisplay.com/app_notes/ST7565P.pdf
データシートの42ページ目


#define LCD_SET_LINE 0x40 /* set line for COM0 (6 lsbs = ST5:ST4:ST3:ST2:ST1:ST0) */

----(中略)--------------


void lcd_out_ctl(char dat)
{
*pIndirectCmdAddr = dat;
}

----(中略)--------------



void lcd_init(void)
{

----(中略)--------------
//lcd_out_ctl(LCD_SET_LINE+0); //PE12864-004の場合


lcd_out_ctl(LCD_SET_LINE+32); //このように修正して表示修正完了

----(中略)--------------
}





PE12864-004というLCDと今回のFGC12864SYHDA-000011Eという
LCDで動作に若干違いがあるということがわかりました。あまり触ってなかったLCDのコードの理解にもなりました。

助かります。

質問者

このQ&Aは役に立ちましたか?

この質問は投稿から一年以上経過しています。
解決しない場合、新しい質問の投稿をおすすめします。

質問する

その他の回答 (3件中 1~3件目)

2018/04/13 19:35
回答No.3

はじめましてtechhouseさん TigAnsと申します。

どのように表示ズレが生じていますか?
ST7567Rは表示用RAMが64x132dot分あり、そのうち64x128dot分を画面に表示しています
そのため水平方向で4ピクセル表示ズレが生じる余地があります。(その分は表示されない)
また表示開始ライン、表示開始カラムも変更できるため、端の部分が反対側に回り込んで
表示されることもあります。

とりあえず現状を知らせてください。
また流用したプログラムなどもURLなどで提示できますでしょうか?

お礼

2018/04/16 14:49

TIGANSさん

回答頂きありがとうございます。
その後、ソースコードを見ながら、なんとなくここなのでは?と思ったところをかたっぱしから数値の変更をしたりして、変化を見ながらデバッグしてみたところ修正できました。


原因は、このFGC12864SYHDA-000011EというLCDの場合では、スクリーンの書き込みラインの位置の初期値をいじらないと表示したい場所に来ないということがわかりました。

修正した箇所を調べたら、
”Display Start Line Set”というレジスタに書き込む値を変えているということでした。電源を入れた際のLCDの初期化のルーチンにこれがあったので修正したところ表示したい位置に描画できました。


http://www.newhavendisplay.com/app_notes/ST7565P.pdf
データシートの42ページ目


#define LCD_SET_LINE 0x40 /* set line for COM0 (6 lsbs = ST5:ST4:ST3:ST2:ST1:ST0) */

----(中略)--------------


void lcd_init(void)
{

----(中略)--------------
//lcd_out_ctl(LCD_SET_LINE+0); //PE12864-004の場合


lcd_out_ctl(LCD_SET_LINE+32); //このように修正して表示修正完了

----(中略)--------------
}



PE12864-004というLCDと今回のFGC12864SYHDA-000011EというLCDで動作に若干違いがあるということがわかりました。あまり触ってなかったLCDのコードの理解にもなりました。

助かります。

質問者
2018/04/13 17:49
回答No.1

こんにちは
私なら、クロックを落として試してみます。
正しくは、波形のタイミングが仕様書の範囲に入っているかを検証するということですが、簡易的にはクロックを遅くすることでクリチカルなタイミングを満足させる事で容易に数ある要因の1つは検証出来ます。

お礼

2018/04/16 14:50

kuro804さん

回答頂きありがとうございます。
その後、ソースコードを見ながら、なんとなくここなのでは?と思ったところをかたっぱしから数値の変更をしたりして、変化を見ながらデバッグしてみたところ修正できました。


原因は、このFGC12864SYHDA-000011EというLCDの場合では、スクリーンの書き込みラインの位置の初期値をいじらないと表示したい場所に来ないということがわかりました。

修正した箇所を調べたら、
”Display Start Line Set”というレジスタに書き込む値を変えているということでした。電源を入れた際のLCDの初期化のルーチンにこれがあったので修正したところ表示したい位置に描画できました。


http://www.newhavendisplay.com/app_notes/ST7565P.pdf
データシートの42ページ目


#define LCD_SET_LINE 0x40 /* set line for COM0 (6 lsbs = ST5:ST4:ST3:ST2:ST1:ST0) */

----(中略)--------------


void lcd_init(void)
{

----(中略)--------------
//lcd_out_ctl(LCD_SET_LINE+0); //PE12864-004の場合


lcd_out_ctl(LCD_SET_LINE+32); //このように修正して表示修正完了

----(中略)--------------
}



PE12864-004というLCDと今回のFGC12864SYHDA-000011EというLCDで動作に若干違いがあるということがわかりました。あまり触ってなかったLCDのコードの理解にもなりました。

助かります。

質問者

お礼をおくりました

さらに、この回答をベストアンサーに選びますか?

ベストアンサーを選ぶと質問が締切られます。
なおベストアンサーを選びなおすことはできません。