おじさん工房TOP  APB-1  APB-2  APB-3  SDR-1  SDR-3  RFC-5  RFC-7 

おじさん工房 BBS

636651

LCDの互換性でわかる方いたら教えてください。 - yama

2018/12/10 (Mon) 13:29:12

LCDの互換性でわかる方いたら教えてください。
Amzonで3.5インチのLCDが売っていますがこれコネクターの配列や信号か同じなのですが互換性はあるのでしょうか?
https://www.amazon.co.jp/dp/B075FQRBXX/?coliid=IXP0BHVK7GQFV&colid=25C5FVKUUHHR5&psc=0&ref_=lv_ov_lig_dp_it

https://www.amazon.co.jp/dp/B077TM4XX8/?coliid=I1DT6C0CVLUPLL&colid=25C5FVKUUHHR5&psc=0&ref_=lv_ov_lig_dp_it
使えるなら大きくして見たいです。

Re: LCDの互換性でわかる方いたら教えてください。 - すーみん

2018/12/31 (Mon) 22:54:23

ぎょふんさん こんばんは

ピークホールドのソースその他丁寧に教えて下さり、ありがとうございました。
このお休み中に実装させたいと思います!

>同じILIのシリーズなのに面白い反転するんですね。
>LCDコントローラーICの制御(動作モード?)のレジスタ書き換えみたいな対応で可能なのでしょうか。
>同時に、ソースには色々なICの型番が記されているのが気になります。

lcdarduino.cその他のソースを追いかけて、ニーズはあまりないと思いますが、ILI9325対応を行ってみました。

・lcdarduino.cでは、LCDコントローラのレジスタを読出し、ILI9328, ILI9341, ST7783, HX8347Gの4種についてドライバを切り替えて対応している。
・ILI9328ドライバの実態はILI932X用でILI9325もカバーしているもの。
・ILI9325のレジスタの読み出し値は0x93259325でILI9328(0x93289328)とは異なるが、4種以外の場合はデフォルトでILI9328ドライバを選択して処理しているために、結果的に(=たまたま)ほとんどの表示はうまくいく。
・ところが、lcd_draw_ch(一文字を描く)では、ILI9328とST7783のみに限定して180度回転処理を行っているので、ILI9325の文字は正しく表示されない。
・また、lcd_draw_pic(メータのグラフィック描画)については、回転処理を行っていないので、文字同様正しく表示されない。

上記のプログラムの流れから、KUMAN SC3A-1(3.5インチ/ILI9486/480x320ドット)をそのまま挿しても正しく表示されません。、(実際に試しました)そもそも、16bitパラレルである可能性があります。

以下、冗長なソースで恥ずかしいですが、参考までに添付します。 ILI9328, ST7783, HX8347Gについては未テストです。

皆さま、良い年をお迎え下さい。

lcdarduino.c
//--------------------------------------------------------------------
//
// lcdarduino.c Arduino TFT shield(320*240, 8bit parallel)の制御プログラム
// ILI9328, ILI9341, ST7783, HX8347G を統合したドライバー
//           ILI9325追加/メータ表示のILI9328,ST7783対応 2018.12.31
//--------------------------------------------------------------------
 :
(中略)
 :
#define ILI9325 0x93259325 //★ILI9325を追加 2018.12.31
#define ILI9328 0x93289328
 :
(中略)
 :
static void lcd_setadrs( int x0, int y0, int x1, int y1 ) {
switch( lcdcontroller ) {
default:
case ILI9325: //★ 2018.12.31
case ILI9328:
ili9328_setadrs( x0, y0, x1, y1 );
break;
case ILI9481:

 :
(中略)
 :

//───────────────────────────────────
void lcd_init( void )
{
LCD_RESX_L();
delay_msec(1); // reset pulse > 10us ILI9341 spec 15.4 p.218
LCD_RESX_H();
delay_msec(10); // resetting time < 5ms ILI9341 spec 15.4 p.218

lcd_controller(); // which controller?

uint i=0, a, d;
switch( lcdcontroller ) {
default:
case ILI9325: //★2018.12.31
case ILI9328:
while( i < sizeof(ILI932x_regValues) / sizeof(uint16_t) ) {

 :
(中略)
 :

//----------------------------------------------------------
// 1 文字描く
//----------------------------------------------------------
void lcd_draw_ch( int x, int y, int ch, int size, int color1, int color2 ) {
 :
(中略)
 :
#if defined LCD_LANDSCAPE || defined LCD_LANDSCAPE_INV
//if( lcdcontroller==ILI9328 || lcdcontroller==ST7783 ) {
if( lcdcontroller==ILI9325 || lcdcontroller==ILI9328 || lcdcontroller==ST7783 ) { //★ILI9325を追加
font += ((size+7)/8)*size - 1; // font 右下から描いていくので
 :
(中略)
 :

//----------------------------------------------------------
// 矩形領域にビットマップ(4色)を描画
//----------------------------------------------------------
void lcd_draw_pic( int x0, int y0, int x1, int y1, int size, const int *pixelbuf) {
int i, pix16, pix, color;

lcd_setadrs( x0, y0, x1, y1 );
LCD_CSX_L();
int tmp = (LCD_DATA_PORT->ODR)&(~LCD_DATA_PORT_MASK);

while( size-- ) {
// ★ILI9325,ILI9328,ST7783の時は末データから描画 2018.12.31
if( lcdcontroller==ILI9325 || lcdcontroller==ILI9328 || lcdcontroller==ST7783 ) {
pix16 = *(pixelbuf + size);
for ( i=0; i<31; i+=2) {
pix = ( pix16 >> i ) & 0x3 ;
switch ( pix ) {
default:
case 0: color = C16_BLACK ;
break ;
case 1: color = C16_WHITE ;
break ;
case 2: color = C16_RED ;
break ;
case 3: color = C16_YELLOW ;
break ;
}
LCD_WRX_L();
(LCD_DATA_PORT->ODR) = tmp | ((color>>8)&LCD_DATA_PORT_MASK);
WRX_DLY();
LCD_WRX_H();
WRX_DLY();

LCD_WRX_L();
(LCD_DATA_PORT->ODR) = tmp | ((color)&LCD_DATA_PORT_MASK);
WRX_DLY();
LCD_WRX_H();
}
} else {
   pix16 = *pixelbuf++ ;
for ( i=30; i>-1; i-=2) {
pix = ( pix16 >> i ) & 0x3 ;
switch ( pix ) {
default:
case 0: color = C16_BLACK ;
break ;
case 1: color = C16_WHITE ;
break ;
case 2: color = C16_RED ;
break ;
case 3: color = C16_YELLOW ;
break ;
}
LCD_WRX_L();
(LCD_DATA_PORT->ODR) = tmp | ((color>>8)&LCD_DATA_PORT_MASK);
WRX_DLY();
LCD_WRX_H();
WRX_DLY();

LCD_WRX_L();
(LCD_DATA_PORT->ODR) = tmp | ((color)&LCD_DATA_PORT_MASK);
WRX_DLY();
LCD_WRX_H();
}
   }
} //★
LCD_CSX_H();
}

名前
件名
メッセージ
画像
メールアドレス
URL
編集/削除キー (半角英数字のみで4~8文字)
プレビューする (投稿前に、内容をプレビューして確認できます)

Copyright © 1999- FC2, inc All Rights Reserved.