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

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

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

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

  • ベストアンサー
  • JO_O
  • ベストアンサー率34% (13/38)
回答No.2

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

techhouse
質問者

お礼

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のコードの理解にもなりました。 助かります。

その他の回答 (2)

  • TIGANS
  • ベストアンサー率35% (245/681)
回答No.3

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

techhouse
質問者

お礼

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のコードの理解にもなりました。 助かります。

  • kuro804
  • ベストアンサー率29% (523/1762)
回答No.1

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

techhouse
質問者

お礼

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のコードの理解にもなりました。 助かります。

関連するQ&A

専門家に質問してみよう