реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> LPC2478 + TFT 320x240 совсем рябит (, вместе с курсором..
overloaded
сообщение Apr 5 2010, 03:29
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 73
Регистрация: 17-10-07
Из: Киев
Пользователь №: 31 422



Частота клока 6,5 МГц (По ДШ рекоммендуют 6,75). С чем может быть связано рябение (я так понимаю постоянно прорисовываются то четные- то нечетные строки)?.
Рябит вместе с курсором. Картинка изначально была сдвинута влево вверх, чтоб стала посредине, значительно увеличил Vertical front porch и horizontal front porch(от значений, рекоммендуемых ДШ на ТФТ).

При некоторых стечениях обстоятельств)) (положение курсора, данные тестовой картинки) ТФТ вообще отказывается что-либо показывать... (Белый фон, как до инициализации).
Смотрел сигналы осциллографом - форма верт. и гор синхронизаций нормальная, синхр. данных (DCLK) - почти синус. Это нормально?
Еще интересная особенность - значения LCD_POL(IPC Invert panel clock., IHS Invert horizontal synchronization., IVS Invert vertical synchronization.) в в нескольких комбинациях на картинку не влияют.
Подскажите плз в какую вообще сторону думать? )

На всякий случай код с парой тестов и картинку с ДШ ТФТ прилагаю.
Код
#define LCD_RES_H 320
#define LCD_RES_V 240
#define LCD_BUF_SIZE (LCD_RES_H*LCD_RES_V*2)

unsigned char VideoBuf[LCD_BUF_SIZE] __attribute__((at(NOR_FLASH_BASE))); //SDRAM

void InitLCD()
{
  int i, testnum = 0;
  int k=0;
  unsigned short *Pall = (unsigned short *)&LCD_PAL;
  unsigned short *Vbuf = (unsigned short *)&VideoBuf;
  unsigned short *Curs = (unsigned short *)&CRSR_IMG;
    
    PCONP|= (1<<20); //LCD

    PINSEL11 = (6<<1)|(1<<0);// bit0=1 - LCD port is enabled.    bit1...3 = 110 TFT 16-bit. (1:5:5:5 mode)
  
  LCD_CFG    = 10;//72 MHz div 11
  //1
//  LCD_TIMH   = (((42-1)<<24) | ((67-1)<<16) | ((11-1)<<8) | (((LCD_RES_H/16)-1)<<2));
//  LCD_TIMV   = ((6<<24) | (16<<16) | ((3-1)<<10) | (LCD_RES_V-1));
  //2
  //LCD_TIMH   = (((31-1)<<24) | ((67-1)<<16) | ((11-1)<<8) | (((LCD_RES_H/16)-1)<<2));
  //LCD_TIMV   = ((3<<24) | (16<<16) | ((3-1)<<10) | (LCD_RES_V-1));
  //kartinka posredine
  LCD_TIMH   = (((61-1)<<24) | ((67-1)<<16) | ((11-1)<<8) | (((LCD_RES_H/16)-1)<<2));
  LCD_TIMV   = ((33<<24) | (16<<16) | ((3-1)<<10) | (LCD_RES_V-1));

  LCD_POL    = ((0<<27) | (1<<26) | (((LCD_RES_H/1)-1)<<16) | (0<<14)
                  | (1<<13)| (1<<12) | (1<<11)| (0<<6) | (0<<5) | (2<<0));

  LCD_CTRL   = ((0<<10) | (0<<9) | (0<<8) | (1<<5) | (4<<1)); // 100 = 16 bpp, 1:5:5:5 mode.

  for(i=0; i<256; i++)
      Curs[i] = 0xFFFF;

  CRSR_CFG = 0;
  CRSR_XY = (110<<16)|(160<<0);
  CRSR_CTRL = 1;//Cursor on

  LCD_UPBASE = (unsigned long)VideoBuf;
  LCD_LPBASE = (unsigned long)VideoBuf;    

    
    for(i=0; i<256; i++)//test
    {
        Pall[i] = 0xFF00+i;
    }
                            

  LCD_CTRL |= 1;//Enable
  LCD_CTRL |= 1<<11;//PWR ON

    testnum = 3;
    while(1)
    {
          switch(testnum)
          {
              case 0://bleklie tsveta
              for(i=0; i<(LCD_BUF_SIZE/2); i++)
                  if(i < (LCD_BUF_SIZE/4))
                    Vbuf[i]= (32<<10)|(0<<5)|(0<<0);
                else
                    Vbuf[i]= (0<<10)|(0<<5)|(32<<0);
            testnum = -1;
            break;
        
            case 1://ne vivodit - vse beloe
              for(i=0; i<(LCD_BUF_SIZE/2); i++)
                  if(i < (LCD_BUF_SIZE/4))
                    Vbuf[i]= 0;
                else
                    Vbuf[i]= 0xFFFF;
            testnum = -1;
            break;
        
            case 2://sverhu beloe, vnizu-4ernoe
              for(i=0; i<(LCD_BUF_SIZE/2); i++)
                  if(i < (LCD_BUF_SIZE/4))
                    Vbuf[i]= 0xFFFF;
                else
                    Vbuf[i]= 0;
            testnum = -1;
            break;
        
            case 3://poloski
              for(i=0; i<(LCD_BUF_SIZE/2); i++)
            {
                if((i % (320*20)) == 0)
                    k = rand();
                Vbuf[i]= k;
            }
            testnum = -1;
            break;
        
            case 4://random
              for(i=0; i<(LCD_BUF_SIZE/2); i++)
                Vbuf[i]= rand() & 0xFFFF;
            testnum = -1;
            break;

            default:
            break;
          }
    }

}

Прикрепленное изображение
Go to the top of the page
 
+Quote Post
skripach
сообщение Apr 5 2010, 06:56
Сообщение #2


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



Вы бы сделали что-то вроде:
Код
// init Horizontal Timing
  LCD_TIMH_bit.HBP   =  C_GLCD_H_BACK_PORCH - 1;
  LCD_TIMH_bit.HFP   =  C_GLCD_H_FRONT_PORCH - 1;
  LCD_TIMH_bit.HSW   =  C_GLCD_H_PULSE - 1;
  LCD_TIMH_bit.PPL   = (C_GLCD_H_SIZE/16) - 1;
  // init Vertical Timing
  LCD_TIMV_bit.VBP   =  C_GLCD_V_BACK_PORCH;
  LCD_TIMV_bit.VFP   =  C_GLCD_V_FRONT_PORCH;
  LCD_TIMV_bit.VSW   =  C_GLCD_V_PULSE;
  LCD_TIMV_bit.LPP   =  C_GLCD_V_SIZE - 1;
,
а то народ ленится битики считать.


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
overloaded
сообщение Apr 5 2010, 10:18
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 73
Регистрация: 17-10-07
Из: Киев
Пользователь №: 31 422



Сделал более удобочитаемым. Что еще заметил - вдоль левой грани квадрата курсора (по вертикали) проскакивают пиксели, полу-случайно. Т.е. (*-проскакивающий пиксель smile.gif ):

Код
*|------------|
  |  курсор   |
  |               |
*|               |
  |----------- |



Кстати, от негативной ауры глючащего ТФТ)) и на телефоне экран заглючил :-)))) Боюсь как-бы монитор не сдох теперь lol.gif

Код
#define LCD_RES_H 320
#define LCD_RES_V 240
#define LCD_BUF_SIZE (LCD_RES_H*LCD_RES_V*2)

#define LCD_TIMH_HBP    (61-1)    //42-1(ili 31-1 ??) po datasheet na TFT
#define LCD_TIMH_HFP    (67-1)
#define LCD_TIMH_HSW    (11-1)
#define LCD_TIMH_PPL    ((LCD_RES_H/16)-1)

#define LCD_TIMV_VBP    33        //6(ili 3 ??) po datasheet na TFT
#define LCD_TIMV_VFP    16
#define LCD_TIMV_VSW    (3-1)
#define LCD_TIMV_LPP    (LCD_RES_V-1)

#define LCD_POL_BCD        1
#define LCD_POL_CPL        ((LCD_RES_H/1)-1)
#define LCD_POL_IOE        0
#define LCD_POL_IPC        1
#define LCD_POL_IHS        1
#define LCD_POL_IVS        1
#define LCD_POL_CLKSEL     0
#define LCD_POL_PCD_LO    1

#define LCD_CTRL_BEPO    0
#define LCD_CTRL_BEBO    0
#define LCD_CTRL_BGR    0
#define LCD_CTRL_LCDTFT    1
#define LCD_CTRL_LCDBPP    4


unsigned char VideoBuf[LCD_BUF_SIZE] __attribute__((at(NOR_FLASH_BASE))); //SDRAM

void InitLCD()
{
  int i, testnum = 0;
  int k=0;
  unsigned short *Pall = (unsigned short *)&LCD_PAL;
  unsigned short *Vbuf = (unsigned short *)&VideoBuf;
  unsigned short *Curs = (unsigned short *)&CRSR_IMG;
    
    PCONP|= (1<<20); //LCD
    
    PINSEL11 = (6<<1)|(1<<0);// bit0=1 - LCD port is enabled.    bit1...3 = 110 TFT 16-bit. (1:5:5:5 mode)

  //AHBCFG1    = ((0<<0)|(3<<1)|(1<<4)|(3<<4)|(1<<8)|(4<<12)|(3<<16)|(2<<20)|(1<<24)|(5<<28));
  
  LCD_CFG    = 10;//72 MHz div 11

  LCD_TIMH   = (LCD_TIMH_HBP<<24) | (LCD_TIMH_HFP<<16) | (LCD_TIMH_HSW<<8) | (LCD_TIMH_PPL<<2);
  LCD_TIMV   = (LCD_TIMV_VBP<<24) | (LCD_TIMV_VFP<<16) | (LCD_TIMV_VSW<<10) | LCD_TIMV_LPP;

  LCD_POL    = (0<<27) | (LCD_POL_BCD<<26) | (LCD_POL_CPL<<16) | (LCD_POL_IOE<<14)
                  | (LCD_POL_IPC<<13)| (LCD_POL_IHS<<12) | (LCD_POL_IVS<<11)| (0<<6) | (LCD_POL_CLKSEL<<5) | (LCD_POL_PCD_LO<<0);

  LCD_CTRL   = (LCD_CTRL_BEPO<<10) | (LCD_CTRL_BEBO<<9) | (LCD_CTRL_BGR<<8) | (LCD_CTRL_LCDTFT<<5) | (LCD_CTRL_LCDBPP<<1); // 100 = 16 bpp, 1:5:5:5 mode. 011=8bit(palette?);

  for(i=0; i<256; i++)
      Curs[i] = 0xFFFF;

  CRSR_CFG = 0;
  CRSR_XY = (110<<16)|(160<<0);
  CRSR_CTRL = 1;//Cursor on

  LCD_UPBASE = (unsigned long)VideoBuf;
  LCD_LPBASE = (unsigned long)VideoBuf;    

    
    for(i=0; i<256; i++)//test
    {
        Pall[i] = 0xFF00+i;
    }                                                   
  
  LCD_CTRL |= 1;//Enable
  LCD_CTRL |= 1<<11;//PWR ON

...
}
Go to the top of the page
 
+Quote Post
skripach
сообщение Apr 5 2010, 10:29
Сообщение #4


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



Тогда так, а именно.


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
SPACUM
сообщение Apr 5 2010, 11:12
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 161
Регистрация: 22-06-09
Из: Москва
Пользователь №: 50 531



У Меня эффект мерцания был на экране 640х480 при низкой тактовой частоте контроллера или при медленной работе внешней памяти. До конца устранить не удалось. Но если не применять яркости пикселов в диапазоне 1/2 ... 1/4 от максимальной, мерцания практически не заметно. Еще сильное мерцание было при незаземлении металлической рамки вокруг дисплея(от полной яркости до нуля при прикосновении рукой).


--------------------
Ты можешь знать все что угодно, но пока ты не доказал это на практике, ты не знаешь ничего!© Ричард Бах
Go to the top of the page
 
+Quote Post
skripach
сообщение Apr 5 2010, 11:27
Сообщение #6


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



Рябь и мерцание разные вещи.


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Apr 5 2010, 15:36
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(overloaded @ Apr 5 2010, 13:18) *
Что еще заметил - вдоль левой грани квадрата курсора (по вертикали) проскакивают пиксели, полу-случайно. Т.е. (*-проскакивающий пиксель smile.gif ):

Это свидетельствует о неправильной полярности синхросигнала, ну или о плохом качестве сигналов вообще.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
overloaded
сообщение Apr 6 2010, 11:01
Сообщение #8


Участник
*

Группа: Свой
Сообщений: 73
Регистрация: 17-10-07
Из: Киев
Пользователь №: 31 422



Судя по изображению, явно что-то не то с сигналами т.к. совсем плохое, на незаземленную рамку не похоже.. Рябит так, что кажется , что изобрадение дергается вверх-вниз, + черного нет, он сероватый..
Полярность и форма синхросигналов правильная, а вот форма DCLK смущает..(см. осц-грамму: ~0,5 В\дел, 0,04мкс\дел) Плата в которую подключен ТФТ с платой с контроллером соединяется шлейфом IDC-40 20см. При отключении ТФТ форма не меняется. Шлейф укорачивал с 50см - форма не поменялась.. Померять на плате с контроллером не удалось т.к. осциллограф не синхронизируется) Но подозреваю что там все нормально.. Неужели шлейф так все портит? Он же в ATA используется.. Пулл-ап\даун отключены.
Или форма все-таки не смертельная и причина в другом?
Прикрепленное изображение


Сообщение отредактировал overloaded - Apr 6 2010, 11:03
Go to the top of the page
 
+Quote Post
ar__systems
сообщение Apr 6 2010, 11:28
Сообщение #9


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



Цитата(overloaded @ Apr 6 2010, 06:01) *
Судя по изображению, явно что-то не то с сигналами


Что за осциллограф и probe?
Go to the top of the page
 
+Quote Post
overloaded
сообщение Apr 6 2010, 11:45
Сообщение #10


Участник
*

Группа: Свой
Сообщений: 73
Регистрация: 17-10-07
Из: Киев
Пользователь №: 31 422



Спасибо, как-то об этом не подумал)) Действительно, Осциллограф С1-49 Полоса пропускания, МГц 5, 1МОм 50 пФ (( Поставил клок 2 Мгц - форма стала нормальная. Т.е. рябь скорее всего чисто логическая выходит.. Буду думать дальше)
Go to the top of the page
 
+Quote Post
ar__systems
сообщение Apr 6 2010, 12:12
Сообщение #11


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



у LPC если не ошибаюсь front & back порч означают не совсем то, что должны бы, а совсем наоборот, т.е front справа на графике, а back слева.

Вообще дешевый USB logic analyzer сэкономит вам массу времени при отладке LCD.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 6 2010, 13:07
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Как экран зовут?
Go to the top of the page
 
+Quote Post
overloaded
сообщение Apr 6 2010, 14:30
Сообщение #13


Участник
*

Группа: Свой
Сообщений: 73
Регистрация: 17-10-07
Из: Киев
Пользователь №: 31 422



Анализатор в ближайшие пару дней возможности достать нет...

экран COM41T4148 (http://www.data-modul.com/eu/products/tft_displays/single_tft_small/com41t4148xlc.html?nav=pn) в режме MODE = VSS - т.е. с конфигурацией через SPI. Но тут вроде тоже все уже много раз пересмотрел + если б формат был неправильный, он бы просто не включился т.к. стартует в режиме standby,
а командой по SPI этот стендбай отключается, да и на команды flip horizontal, vertical реагирует...

В общем методом научного перебора)), на всякиц случай, перепробовал все комбинации
LCD_POL_IPC, LCD_POL_IHS, LCD_POL_IVS.. а также разные бек и фронт порчи, которые только двигают картинку.

Снижал клок вплоть до 1 кадр в 2 секунды - все то-же самое..
Что удалось заметить: Каждый кадр то ниже то выше на 1 пиксель (чередуются).
+при активном сбросе контроллера на работающем ТФТ, половина линий(опять-же через одну) белые, остальные- тех цветов что и были

Пиксели слева
(а при некоторых настройках порчей и справа) от курсора продолжают появляться - в каждом кадре
на разной высоте...
Пока все сводится к покупке анализатора.. (((

Сообщение отредактировал overloaded - Apr 6 2010, 14:42
Go to the top of the page
 
+Quote Post
scorp1969
сообщение Apr 6 2010, 15:22
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 10-11-09
Пользователь №: 53 547



пару мыслеи:
видео буфер выровнен по границе 8?
а RGB выводы правильные используются в режиме 555 out of 888?
и вообще, у вас видео буфер как char pазмером 2х320х240 при этом режим 555 один пиксел это 16бит но ни как не char

Сообщение отредактировал scorp1969 - Apr 6 2010, 15:26
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Apr 6 2010, 15:41
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Работа с ПДАшными платами от Колибри научила меня настороженно относиться к дисплеям, которые конфигурируются по SPI.
Вы бы по мусоркам покопались и нашли "человеческий" TFT, ага?
Мы подключали четыре типа дисплеев к 2478 и подобных проблем не было ни с одним режиме 16 и 32 бит (ну кроме быстродействия, конечно).


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th June 2025 - 00:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01536 секунд с 7
ELECTRONIX ©2004-2016