|
LPC2478 + TFT 320x240 совсем рябит (, вместе с курсором.. |
|
|
|
Apr 5 2010, 03:29
|
Участник

Группа: Свой
Сообщений: 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; } }
}
|
|
|
|
|
 |
Ответов
|
Apr 5 2010, 06:56
|
■ ■ ■ ■
    
Группа: Свой
Сообщений: 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; , а то народ ленится битики считать.
--------------------
Делай что должен и будь что будет.
|
|
|
|
|
Apr 5 2010, 10:18
|
Участник

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

|
Сделал более удобочитаемым. Что еще заметил - вдоль левой грани квадрата курсора (по вертикали) проскакивают пиксели, полу-случайно. Т.е. (*-проскакивающий пиксель  ): Код *|------------| | курсор | | | *| | |----------- | Кстати, от негативной ауры глючащего ТФТ)) и на телефоне экран заглючил :-)))) Боюсь как-бы монитор не сдох теперь Код #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
... }
|
|
|
|
|
Apr 6 2010, 11:01
|
Участник

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

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

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

|
Спасибо, как-то об этом не подумал)) Действительно, Осциллограф С1-49 Полоса пропускания, МГц 5, 1МОм 50 пФ (( Поставил клок 2 Мгц - форма стала нормальная. Т.е. рябь скорее всего чисто логическая выходит.. Буду думать дальше)
|
|
|
|
Сообщений в этой теме
overloaded LPC2478 + TFT 320x240 совсем рябит ( Apr 5 2010, 03:29 skripach Тогда так, а именно. Apr 5 2010, 10:29 SPACUM У Меня эффект мерцания был на экране 640х480 при н... Apr 5 2010, 11:12 skripach Рябь и мерцание разные вещи. Apr 5 2010, 11:27 ar__systems у LPC если не ошибаюсь front & back порч означ... Apr 6 2010, 12:12 aaarrr Как экран зовут? Apr 6 2010, 13:07 overloaded Анализатор в ближайшие пару дней возможности доста... Apr 6 2010, 14:30  scorp1969 пару мыслеи:
видео буфер выровнен по границе 8?
а ... Apr 6 2010, 15:22 Dog Pawlowa Работа с ПДАшными платами от Колибри научила меня ... Apr 6 2010, 15:41 scorp1969 а земля точно хорошая к дисплею идет? Apr 6 2010, 15:52 overloaded Цитата(Dog Pawlowa @ Apr 6 2010, 18:41) В... Apr 6 2010, 17:07 overloaded До сих пор не могу заставить нормально работать ((... Apr 14 2010, 16:43 overloaded Заработало! =)) Все-таки надо было более тщате... Apr 16 2010, 15:13 overloaded Не прошло и года =) В общем фон стал окончательно ... Mar 16 2011, 15:06 SergeyDDD Цитата(overloaded @ Mar 16 2011, 19:06) Н... Mar 17 2011, 12:06 overloaded Это COMMON ELECTRODE CENTER VOLTAGE. Т.е. средняя ... Mar 20 2011, 20:19 Prinz Здравтсвуйте.
У меня немного похожий вопрос. Разби... Apr 4 2011, 06:09 M_Andrey Цитата(Prinz @ Apr 4 2011, 09:09) // 0 = ... Apr 5 2011, 09:11  Prinz Цитата(M_Andrey @ Apr 5 2011, 15:11) И по... Apr 5 2011, 10:14   M_Andrey 1. PINSEL11 = 0x0000000d; - это режим 1:5:5:5
не ... Apr 5 2011, 15:29    Prinz Цитата(M_Andrey @ Apr 5 2011, 21:29) 1. ... Apr 6 2011, 05:11 Prinz Уточню, контроллер тот же LPC2478. Ядро на частоте... Apr 5 2011, 05:57 slava2148 Вообще-то должны быть либо HSYNC и VSYNC либо DCLK... Jun 6 2011, 11:24
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|