ASergej_R19 0 22 октября, 2015 Опубликовано 22 октября, 2015 · Жалоба Очень распространенный контроллер ili9341... Пытаюсь запустить на дисплее MIO283QT-13 (320x240) в режиме 6-bit RGB (когда цвета передаются по параллельной шине последовательно R-G-B). Показывает черно-белые строчки. В 18/16 битном RGB - все ок. В SPI - тоже. В чем тонкость - не понимаю... Может кто подскажет сколько клоков надо выставить в Thsync (период и время действия в "0"), Tvsync (период и время действия в "0")? Может в контроллере нужны какие-то специфические настройки? Я выставляю Thsync (760 clk, 10clk), Tvsync (324*760 clk, 1520 clk) - не работает. Что-то в ступор уже впал. может кто подскажет чего? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ASergej_R19 0 31 октября, 2015 Опубликовано 31 октября, 2015 · Жалоба Что, никто не запускал какой-нибудь дисплей с ILI9341 в режим 6-bit RGB mode? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ASergej_R19 0 3 ноября, 2015 Опубликовано 3 ноября, 2015 · Жалоба Решил аццкую хрень эту. Может кому пригодится... Этот контроллер (ILI9341) имеет стандартную частоту обновления в 70 Гц при DOTCLK = 6,4 МГц. Максимальная частота DOTCLK, которую воспринимает контроллер - это 10 МГц. Если работаем в режиме 16/18-бит RGB - все ок. Если переключаемся в 6-бит, то нам нужно 3 передачи на 1 пиксель => частоту DOTCLK при том же Refresh Rate нужно бы увеличить в 3 раза (по крайней мере - до 19 МГц), но у нас потолок - 10 МГц => максимально возможная частота обновления экрана выходит в районе 40 Гц - что хрень. Тогда создатели ILI9341, чтобы обойти это решают, что в этом режиме, можно писать во внутреннюю GRAM контроллера а не как положено - сразу на дисплей, а внутреннюю память типа будут обновлять с частотой внутреннего генератора самого ILI9341, который в этом режиме не зависит от DOTCLK. Этот аццкий бит - ByPass_MODE в регистре 0xB0h. Если используется режим 6-бит RGB, то его нужно установить в "1". Сделать какую-то сноску на счет этого бита или вообще объяснить эту тонкость в даташите - посчитали лишним. Как-то так... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yung 0 19 февраля, 2016 Опубликовано 19 февраля, 2016 · Жалоба Медленно дурею от модуля с этим контроллером. Или с другим? Купили в Чип-Дипе два модуля: MIKROE-1439 и MIKROE-495. http://www.chipdip.ru/product/mikrotft/ http://www.chipdip.ru/product/me-tft-proto-board/ Если верить Чип-Дипу, то там контроллер HX8347. На сайте производителя сообщают, что контроллер 9341. Пробовал и так, и этак. Добиться чего-либо от них не получилось ни по послед., н по параллельным портам. Самое интересное - взвожу RST, WR, опускаю RD - порты модуля как выходы не конфигурируются. В SPI режиме тоже самое - когда модулю положено отвечать, SDA в z-состоянии. Едва ли оба модуля мертворожденные. Питаю от 3.3 В, щупаю атмегой 128 с тем же питанием. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 19 февраля, 2016 Опубликовано 19 февраля, 2016 · Жалоба Добиться чего-либо от них не получилось ни по послед., н по параллельным портам. Самое интересное - взвожу RST, WR, опускаю RD - порты модуля как выходы не конфигурируются. В SPI режиме тоже самое - когда модулю положено отвечать, SDA в z-состоянии. А Вы не читайте, а пишите в него. У меня тож ILI9340 (а может 9341), не удалось ничего считать (SPI). Но функции вывода работают нормально, проверял до SCLK = 20MHz - всё ок. Тут кто-то писал, что вых. драйверы у этого контроллера вроде слабые, не продавливают нужный уровень. Хотел проверить на низких частотах SCLK, да всё забываю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yung 0 19 февраля, 2016 Опубликовано 19 февраля, 2016 · Жалоба Тут кто-то писал, что вых. драйверы у этого контроллера вроде слабые, не продавливают нужный уровень. Хотел проверить на низких частотах SCLK, да всё забываю. Какие уж тут частоты, в статике порты не фиксируются. Я и так уж сейчас до 100 кГц тактовую опустил, и ниже пробовал. Кроме белого экрана ничего нет. Инициализацию нарыл в инете, пишут, рабочая. l //######################################################################### void pause_us (U8 i8) { U8 j8; for (;i8;i8--){ for (j8=3;j8;j8--){NOP();} } } //######################################################################### void write_byte(uint8_t c) { uint8_t i; for(i=0;i<8;i++) { if (c & 0x80) {MOSI1;} else {MOSI0;} pause_us(3); SCK1; c = c<<1; pause_us(3); SCK0; } } //######################################################################### void write_command(uint8_t c) { DC0; pause_us(3); CS0; pause_us(3); write_byte©; pause_us(3); CS1; pause_us(3); } //######################################################################### void write_data(uint8_t c) { DC1; pause_us(3); CS0; pause_us(3); write_byte©; pause_us(3); CS1; pause_us(3); } #define LCD_SendCMD write_command #define LCD_Data8 write_data #define DC0 PORTD&=~BIT(6) #define DC1 PORTD|=BIT(6) #define CS0 PORTB&=~BIT(0) #define CS1 PORTB|=BIT(0) #define RST0 PORTD&=~BIT(5) #define RST1 PORTD|=BIT(5) #define LCD_MEMORY_CONFIG 0xe8 // 270 degrees void new_init (void) { U16 i,j; RST1; //set1( LCD_RESET ); CS1; //set1( LCD_CS ); DC1; //set1( LCD_DC ); delay( 20 ); RST0; //set0( LCD_RESET); delay( 20 ); RST1; //set1( LCD_RESET ); delay( 200 ); LCD_SendCMD( 0x01 ); // reset delay(20); LCD_SendCMD( 0x28 ); // display off LCD_SendCMD( 0xcf ); LCD_Data8( 0x00 ); LCD_Data8( 0x83 ); LCD_Data8( 0x30 ); LCD_SendCMD( 0xed ); LCD_Data8( 0x64 ); LCD_Data8( 0x03 ); LCD_Data8( 0x12 ); LCD_Data8( 0x81 ); LCD_SendCMD( 0xe8 ); LCD_Data8( 0x85 ); LCD_Data8( 0x01 ); LCD_Data8( 0x79 ); LCD_SendCMD( 0xcb ); LCD_Data8( 0x39 ); LCD_Data8( 0x2c ); LCD_Data8( 0x00 ); LCD_Data8( 0x34 ); LCD_Data8( 0x02 ); LCD_SendCMD( 0xf7 ); LCD_Data8( 0x20 ); LCD_SendCMD( 0xea ); LCD_Data8( 0x00 ); LCD_Data8( 0x00 ); LCD_SendCMD( 0xc0 ); //power control LCD_Data8( 0x26 ); LCD_SendCMD( 0xc1 ); //power control LCD_Data8( 0x11 ); LCD_SendCMD( 0xc5 ); //vcom control LCD_Data8( 0x35 ); //35 LCD_Data8( 0x3e ); //3E LCD_SendCMD( 0xc7 ); //vcom control LCD_Data8( 0xbe ); // 0x94 LCD_SendCMD( 0x36 ); // memory access control // LCD_Data8( 0x48 ); // 0 grad orientation LCD_Data8( LCD_MEMORY_CONFIG ); LCD_SendCMD( 0x3a ); // pixel format set LCD_Data8( 0x55 ); //16bit /pixel LCD_SendCMD( 0xb1 ); // frame rate LCD_Data8( 0x00 ); // LCD_Dat h'1B' ; 70 Hz LCD_Data8( 0x13 ); // 100 Hz LCD_SendCMD( 0x2a ); // column set LCD_Data8( 0x00 ); LCD_Data8( 0x00 ); LCD_Data8( 0x00 ); LCD_Data8( 0xEF ); LCD_SendCMD( 0x2b ); // row set LCD_Data8( 0x00 ); LCD_Data8( 0x00 ); LCD_Data8( 0x01 ); LCD_Data8( 0x3F ); LCD_SendCMD( 0x34 ); // tearing effect off LCD_SendCMD( 0xb7 ); // entry mode LCD_Data8( 0x07 ); // LCD_SendCMD( 0xb6 ); // display function ctrl LCD_Data8( 0x0a ); LCD_Data8( 0x82 ); LCD_Data8( 0x27 ); LCD_Data8( 0x00 ); LCD_SendCMD( 0x11 ); // sleep out delay(120); LCD_SendCMD( 0x29 ); // display ON delay(120); addset(0,0); for (i=0;i<320;i++) for (j=0;j<240;j++) { write_data(0x00); write_data(0xff); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться