Salamander 2 13 апреля, 2013 Опубликовано 13 апреля, 2013 · Жалоба дисплей ILI9325. Как повернуть изображение на 180 градусов? Есть ли команда специальная? Или же нужно переписывать библиотеку? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexdos 0 13 апреля, 2013 Опубликовано 13 апреля, 2013 · Жалоба дисплей ILI9325. Как повернуть изображение на 180 градусов? Есть ли команда специальная? Или же нужно переписывать библиотеку? о какой библиотеке речь ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 13 апреля, 2013 Опубликовано 13 апреля, 2013 · Жалоба в смысле, о какой библиотеке? Часть программы, отвечающая за дисплей. поскольку сам нашел кое-что, уточню вопрос. Что-нибудь кроме GRAM Access Direction Setting (регистр 03h) менять надо? Я поменял - на результате не сказалось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexdos 0 13 апреля, 2013 Опубликовано 13 апреля, 2013 · Жалоба в смысле, о какой библиотеке? Часть программы, отвечающая за дисплей. поскольку сам нашел кое-что, уточню вопрос. Что-нибудь кроме GRAM Access Direction Setting (регистр 03h) менять надо? Я поменял - на результате не сказалось. Откуда нам знать какой "Часть программы, отвечающая за дисплей." Вы пользуетесь. Взяли со стороны, купили, или сами написали. А по делу, я тоже щас с таким дисплеем воюю, долго не получалось получить изображение в нужной мне ориентации. Менял в GRAM Access Direction Setting (регистр 03h) но такое чувство что не реагировало, вернее изображение было всегда как бы зеркальными. Оказалось дело в инициализации. нашел чудный документ ILI9325AN_V0.22.pdf а в нём примеров инициализации дисплеев разных размеров. В общем взял я оттуда, и чудо свершилось. Изображение стало на место, правда потом я уже не пробовал менять в GRAM Access Direction Setting (регистр 03h). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 13 апреля, 2013 Опубликовано 13 апреля, 2013 (изменено) · Жалоба Почитал еще... Поменял биты. Картинка перевернулась. А вот текст почему-то оказался в той же ориентиции, что и раньше. В подпрограмме вывода текста не нашел ничего, влияющего на ориентацию. А библиотека у меня - ucGUI Изменено 13 апреля, 2013 пользователем Salamander Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexdos 0 13 апреля, 2013 Опубликовано 13 апреля, 2013 · Жалоба Почитал еще... Поменял биты. Картинка перевернулась. А вот текст почему-то оказался в той же ориентиции, что и раньше. В подпрограмме вывода текста не нашел ничего, влияющего на ориентацию. А библиотека у меня - ucGUI А поделится есть возможность ucGUI? или ссылкой откуда её скачать. А то у мня не получилось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 13 апреля, 2013 Опубликовано 13 апреля, 2013 · Жалоба http://www.cutedigi.com/development-tools/...ouchscreen.html не совсем понял значение бита ORG в этом регистре. Куда-то, по идее, перемещает начало. А детально? А в вашем документе - все примеры одной ориентации... Вот как у меня: oid LCD_Init(void) { lcd_rst(); LCD_WR_CMD(0x00E3, 0x3008); // Set internal timing LCD_WR_CMD(0x00E7, 0x0012); // Set internal timing LCD_WR_CMD(0x00EF, 0x1231); // Set internal timing LCD_WR_CMD(0x0000, 0x0001); // Start Oscillation LCD_WR_CMD(0x0001, 0x0100); // set SS and SM bit LCD_WR_CMD(0x0002, 0x0700); // set 1 line inversion LCD_WR_CMD(0x0003, 0x1030); // set GRAM write direction and BGR=0,262K colors,1 transfers/pixel. LCD_WR_CMD(0x0004, 0x0000); // Resize register LCD_WR_CMD(0x0008, 0x0202); // set the back porch and front porch LCD_WR_CMD(0x0009, 0x0000); // set non-display area refresh cycle ISC[3:0] LCD_WR_CMD(0x000A, 0x0000); // FMARK function LCD_WR_CMD(0x000C, 0x0000); // RGB interface setting LCD_WR_CMD(0x000D, 0x0000); // Frame marker Position LCD_WR_CMD(0x000F, 0x0000); // RGB interface polarity //Power On sequence LCD_WR_CMD(0x0010, 0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB LCD_WR_CMD(0x0011, 0x0007); // DC1[2:0], DC0[2:0], VC[2:0] LCD_WR_CMD(0x0012, 0x0000); // VREG1OUT voltage LCD_WR_CMD(0x0013, 0x0000); // VDV[4:0] for VCOM amplitude Delay(200); // Dis-charge capacitor power voltage LCD_WR_CMD(0x0010, 0x1690); // SAP, BT[3:0], AP, DSTB, SLP, STB LCD_WR_CMD(0x0011, 0x0227); // R11h=0x0221 at VCI=3.3V, DC1[2:0], DC0[2:0], VC[2:0] Delay(50); // Delay 50ms LCD_WR_CMD(0x0012, 0x001C); // External reference voltage= Vci; Delay(50); // Delay 50ms LCD_WR_CMD(0x0013, 0x1800); // R13=1200 when R12=009D;VDV[4:0] for VCOM amplitude LCD_WR_CMD(0x0029, 0x001C); // R29=000C when R12=009D;VCM[5:0] for VCOMH LCD_WR_CMD(0x002B, 0x000D); // Frame Rate = 91Hz Delay(50); // Delay 50ms LCD_WR_CMD(0x0020, 0x0000); // GRAM horizontal Address LCD_WR_CMD(0x0021, 0x0000); // GRAM Vertical Address // ----------- Adjust the Gamma Curve ----------// LCD_WR_CMD(0x0030, 0x0007); LCD_WR_CMD(0x0031, 0x0302); LCD_WR_CMD(0x0032, 0x0105); LCD_WR_CMD(0x0035, 0x0206); LCD_WR_CMD(0x0036, 0x0808); LCD_WR_CMD(0x0037, 0x0206); LCD_WR_CMD(0x0038, 0x0504); LCD_WR_CMD(0x0039, 0x0007); LCD_WR_CMD(0x003C, 0x0105); LCD_WR_CMD(0x003D, 0x0808); //------------------ Set GRAM area ---------------// LCD_WR_CMD(0x0050, 0x0000); // Horizontal GRAM Start Address LCD_WR_CMD(0x0051, 0x00EF); // Horizontal GRAM End Address LCD_WR_CMD(0x0052, 0x0000); // Vertical GRAM Start Address LCD_WR_CMD(0x0053, 0x013F); // Vertical GRAM Start Address //LCD_WR_CMD(0x0051, 0x0000); // Horizontal GRAM Start Address //LCD_WR_CMD(0x0050, 0x00EF); // Horizontal GRAM End Address //LCD_WR_CMD(0x0053, 0x0000); // Vertical GRAM Start Address //LCD_WR_CMD(0x0052, 0x013F); // Vertical GRAM Start Address LCD_WR_CMD(0x0060, 0xA700); // Gate Scan Line LCD_WR_CMD(0x0061, 0x0001); // NDL,VLE, REV LCD_WR_CMD(0x006A, 0x0000); // set scrolling line //-------------- Partial Display Control ---------// LCD_WR_CMD(0x0080, 0x0000); LCD_WR_CMD(0x0081, 0x0000); LCD_WR_CMD(0x0082, 0x0000); LCD_WR_CMD(0x0083, 0x0000); LCD_WR_CMD(0x0084, 0x0000); LCD_WR_CMD(0x0085, 0x0000); //-------------- Panel Control -------------------// LCD_WR_CMD(0x0090, 0x0010); LCD_WR_CMD(0x0092, 0x0000); LCD_WR_CMD(0x0093, 0x0003); LCD_WR_CMD(0x0095, 0x0110); LCD_WR_CMD(0x0097, 0x0000); LCD_WR_CMD(0x0098, 0x0000); LCD_WR_CMD(0x0007, 0x0133); // 262K color and display ON //ini(); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
athlon64 0 22 апреля, 2013 Опубликовано 22 апреля, 2013 · Жалоба Почитал еще... Поменял биты. Картинка перевернулась. А вот текст почему-то оказался в той же ориентиции, что и раньше. В подпрограмме вывода текста не нашел ничего, влияющего на ориентацию. А библиотека у меня - ucGUI Вы в правильном направлении движетесь. Любой переворот делается регистрами ILI (Бит AM и биты I/D регистра Entry Mode). Также посмотрите низкоуровневые процедуры работы с экраном (очистка экрана, закрашивание прямоугольника, вывод символа), в одном из китайских проектов видел зеркалирование на уровне этих процедур. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MementoMori 4 13 мая, 2013 Опубликовано 13 мая, 2013 (изменено) · Жалоба Ничего не пойму.... у меня по всякому получалось поворачивать экран, но все время отсчет координат идет снизу вверх. То есть внизу 0, вверху 240 (ориентация горизонтальная). Как сделать по-человечески? LCD_WriteReg(0x00E3, 0x3008); // Set internal timing LCD_WriteReg(0x00E7, 0x0012); // Set internal timing LCD_WriteReg(0x00EF, 0x1231); // Set internal timing LCD_WriteReg(0x0001, 0x0100); // set SS and SM bit LCD_WriteReg(0x0002, 0x0700); // set 1 line inversion LCD_WriteReg(0x0003, 0x1028); // set GRAM write direction and BGR=1. LCD_WriteReg(0x0004, 0x0000); // Resize register LCD_WriteReg(0x0008, 0x0207); // set the back porch and front porch LCD_WriteReg(0x0009, 0x0000); // set non-display area refresh cycle ISC[3:0] LCD_WriteReg(0x000A, 0x0000); // FMARK function LCD_WriteReg(0x000C, 0x0000); // RGB interface setting //// LCD_WriteReg(0x000D, 0x0000); // Frame marker Position LCD_WriteReg(0x000F, 0x0000); // RGB interface polarity //*************Power On sequence ****************// LCD_WriteReg(0x0010, 0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB LCD_WriteReg(0x0011, 0x0007); // DC1[2:0], DC0[2:0], VC[2:0] LCD_WriteReg(0x0012, 0x0000); // VREG1OUT voltage LCD_WriteReg(0x0013, 0x0000); // VDV[4:0] for VCOM amplitude guiDelay_ms(200); LCD_WriteReg(0x0010, 0x1290); // SAP, BT[3:0], AP, DSTB, SLP, STB LCD_WriteReg(0x0011, 0x0227); // DC1[2:0], DC0[2:0], VC[2:0] guiDelay_ms(50); LCD_WriteReg(0x0012, 0x001A); // Internal reference voltage= Vci; guiDelay_ms(50); LCD_WriteReg(0x0013, 0x1800); // Set VDV[4:0] for VCOM amplitude LCD_WriteReg(0x0029, 0x0028); // Set VCM[5:0] for VCOMH LCD_WriteReg(0x002B, 0x000C); // Set Frame Rate guiDelay_ms(50); LCD_WriteReg(0x0020, 0x0000); // GRAM horizontal Address LCD_WriteReg(0x0021, 0x0000); // GRAM Vertical Address // ----------- Adjust the Gamma Curve ----------// LCD_WriteReg(0x0030, 0x0000); LCD_WriteReg(0x0031, 0x0305); LCD_WriteReg(0x0032, 0x0003); LCD_WriteReg(0x0035, 0x0304); LCD_WriteReg(0x0036, 0x000F); LCD_WriteReg(0x0037, 0x0407); LCD_WriteReg(0x0038, 0x0204); LCD_WriteReg(0x0039, 0x0707); LCD_WriteReg(0x003C, 0x0403); LCD_WriteReg(0x003D, 0x1604); //------------------ Set GRAM area ---------------// LCD_WriteReg(0x0050, 0x0000); // Horizontal GRAM Start Address LCD_WriteReg(0x0051, 0x00EF); // Horizontal GRAM End Address LCD_WriteReg(0x0052, 0x0000); // Vertical GRAM Start Address LCD_WriteReg(0x0053, 0x013F); // Vertical GRAM Start Address LCD_WriteReg(0x0060, 0xA700); // Gate Scan Line a700 LCD_WriteReg(0x0061, 0x0001); // NDL,VLE, REV LCD_WriteReg(0x006A, 0x0000); // set scrolling line //-------------- Partial Display Control ---------// LCD_WriteReg(0x0080, 0x0000); LCD_WriteReg(0x0081, 0x0000); LCD_WriteReg(0x0082, 0x0000); LCD_WriteReg(0x0083, 0x0000); LCD_WriteReg(0x0084, 0x0000); LCD_WriteReg(0x0085, 0x0000); //-------------- Panel Control -------------------// LCD_WriteReg(0x0090, 0x0010); LCD_WriteReg(0x0092, 0x0600); //LCD_WriteReg(0x90, 0x0010); // LCD_WriteReg(0x92, 0x0000); // LCD_WriteReg(0x93, 0x0003); // LCD_WriteReg(0x95, 0x0110); // LCD_WriteReg(0x97, 0x0000); // LCD_WriteReg(0x98, 0x0000); LCD_WriteReg(0x0007, 0x0133); // 262K color and display ON Изменено 13 мая, 2013 пользователем IgorKossak [codebox] для длинного кода, [code] - для короткого!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 13 мая, 2013 Опубликовано 13 мая, 2013 (изменено) · Жалоба У них (ILIxxxx) примерно одинаково делается у всех. Вот отвечающие за переворот куски из моих проектов: static uint_fast8_t saved_y; static void ili9320_set_windowh(uint_fast8_t height) { #if LCDMODE_ILI9320_TOPDOWN /* перевёрнутое изображение */ // открыть строку для записи текста LCD_CtrlWrite_ILI9320(0x0050, saved_y - (height - 1)); // Horizontal GRAM Start Address LCD_CtrlWrite_ILI9320(0x0051, saved_y ); // Horizontal GRAM End Address LCD_CtrlWrite_ILI9320(0x0020, saved_y); #else /* LCDMODE_ILI9320_TOPDOWN */ /* нормальное изображение */ // открыть строку для записи текста LCD_CtrlWrite_ILI9320(0x0050, saved_y); // Horizontal GRAM Start Address LCD_CtrlWrite_ILI9320(0x0051, saved_y + (height - 1)); // Horizontal GRAM End Address LCD_CtrlWrite_ILI9320(0x0020, saved_y); #endif /* LCDMODE_ILI9320_TOPDOWN */ } /* Функция установки курсора в позицию x,y X - координата по горизонтали в пределах 0-175, Y - координата по вертикали (строка) в пределах 8 бит */ static void ili9320_set_graddr(uint_fast16_t x) { #if LCDMODE_ILI9320_TOPDOWN /* перевёрнутое изображение */ LCD_CtrlWrite_ILI9320(0x0021, x); #else /* LCDMODE_ILI9320_TOPDOWN */ /* нормальное изображение */ LCD_CtrlWrite_ILI9320(0x0021, x); #endif /* LCDMODE_ILI9320_TOPDOWN */ } // Инициализация ... #if LCDMODE_ILI9320_TOPDOWN /* перевёрнутое изображение */ LCD_CtrlWrite_ILI9320(0x0003, 0x1020 /* 0x1030 */); // set GRAM write direction and BGR=1. #else /* LCDMODE_ILI9320_TOPDOWN */ /* нормальное изображение */ LCD_CtrlWrite_ILI9320(0x0003, 0x1010 /* 0x1030 */); // set GRAM write direction and BGR=1. #endif /* LCDMODE_ILI9320_TOPDOWN */ void display_gotoxy(uint_fast8_t x, uint_fast8_t y) { #if WITHDISPLAYDISABLE if (display_disabled != 0) return; #endif #if LCDMODE_ILI9320_TOPDOWN /* перевёрнутое изображение */ saved_y = (DIM_Y - 1) - (y * CHAR_H); ili9320_set_graddr((x * CHAR_W)); #else /* LCDMODE_ILI9320_TOPDOWN */ /* нормальное изображение */ saved_y = (y * CHAR_H); ili9320_set_graddr((DIM_X - 1) - (x * CHAR_W)); #endif /* LCDMODE_ILI9320_TOPDOWN */ } Другой контроллер: static uint_fast8_t ili9225_y; /* в пикселях */ // открыть для записи полосу пикселей высотой как указано в параметре (символ) и шириной до правого края static void ili9225_set_strype(uint_fast8_t heigth) { #if LCDMODE_ILI9225_TOPDOWN const uint_fast8_t yc1 = ili9225_y + (heigth - 1); const uint_fast8_t yc2 = ili9225_y; LCD_CtrlWrite_ILI9225(ILI9225_RAM_ADDR_SET1, yc2); // Horizontal GRAM Address Set // открыть строку для записи текста LCD_CtrlWrite_ILI9225(ILI9225_HORIZONTAL_WINDOW_ADDR1, yc1); //Horizontal Address Start Position LCD_CtrlWrite_ILI9225(ILI9225_HORIZONTAL_WINDOW_ADDR2, yc2); // Horizontal Address End Position #else /* LCDMODE_ILI9225_TOPDOWN */ const uint_fast8_t yc1 = ili9225_y - (heigth - 1); const uint_fast8_t yc2 = ili9225_y; LCD_CtrlWrite_ILI9225(ILI9225_RAM_ADDR_SET1, yc2); // Horizontal GRAM Address Set // открыть строку для записи текста LCD_CtrlWrite_ILI9225(ILI9225_HORIZONTAL_WINDOW_ADDR1, yc2); //Horizontal Address Start Position LCD_CtrlWrite_ILI9225(ILI9225_HORIZONTAL_WINDOW_ADDR2, yc1); // Horizontal Address End Position #endif /* LCDMODE_ILI9225_TOPDOWN */ } static void ili9225_set_addr_column(uint_fast8_t x) { #if LCDMODE_ILI9225_TOPDOWN LCD_CtrlWrite_ILI9225(ILI9225_RAM_ADDR_SET2, (DIM_X - 1) - x); // Vertical GRAM Address Set // постоянная часть выностится в инициализацию LCD_CtrlWrite_ILI9225(ILI9225_VERTICAL_WINDOW_ADDR1, (DIM_X - 1) - x); // Vertical GRAM End Address //LCD_CtrlWrite_ILI9225(ILI9225_VERTICAL_WINDOW_ADDR2, 0); // Vertical GRAM Start Address #else /* LCDMODE_ILI9225_TOPDOWN */ LCD_CtrlWrite_ILI9225(ILI9225_RAM_ADDR_SET2, x); // Vertical GRAM Address Set // постоянная часть выностится в инициализацию //LCD_CtrlWrite_ILI9225(ILI9225_VERTICAL_WINDOW_ADDR1, DIM_X - 1); // Vertical GRAM End Address LCD_CtrlWrite_ILI9225(ILI9225_VERTICAL_WINDOW_ADDR2, x); // Vertical GRAM Start Address #endif /* LCDMODE_ILI9225_TOPDOWN */ } // в иициализации // +++ запись константной части адресации курсора здесь. #if LCDMODE_ILI9225_TOPDOWN LCD_CtrlWrite_ILI9225(ILI9225_ENTRY_MODE, 0x1010); // set GRAM write direction and BGR=1. LCD_CtrlWrite_ILI9225(ILI9225_VERTICAL_WINDOW_ADDR2, 0); // Vertical GRAM Start Address #else /* LCDMODE_ILI9225_TOPDOWN */ LCD_CtrlWrite_ILI9225(ILI9225_ENTRY_MODE, 0x1020); // set GRAM write direction and BGR=1. LCD_CtrlWrite_ILI9225(ILI9225_VERTICAL_WINDOW_ADDR1, DIM_X - 1); // Vertical GRAM End Address #endif /* LCDMODE_ILI9225_TOPDOWN */ void display_gotoxy(uint_fast8_t x, uint_fast8_t y) { #if WITHDISPLAYDISABLE if (display_disabled != 0) return; #endif #if LCDMODE_ILI9225_TOPDOWN ili9225_y = y * CHAR_H; /* переход от символьных координат к экранным */ #else /* LCDMODE_ILI9225_TOPDOWN */ ili9225_y = (DIM_Y - 1) - y * CHAR_H; /* переход от символьных координат к экранным */ #endif /* LCDMODE_ILI9225_TOPDOWN */ ili9225_set_addr_column(x * CHAR_W); При этом знакогенератор одинаковый и больше ничего не меняется. Изменено 13 мая, 2013 пользователем Genadi Zawidowski Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MementoMori 4 13 мая, 2013 Опубликовано 13 мая, 2013 · Жалоба хм... давайте уточним - у вас в горизонтальном положении где неходится шлейф тачскрина? у меня в правом нижнем углу. То есть в координатах 319,239. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться