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

 
 
 
Reply to this topicStart new topic
> дисплей ILI9325. Как повернуть изображение на 180 градусов?
Salamander
сообщение Apr 13 2013, 18:32
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443



дисплей ILI9325. Как повернуть изображение на 180 градусов?
Есть ли команда специальная? Или же нужно переписывать библиотеку?
Go to the top of the page
 
+Quote Post
alexdos
сообщение Apr 13 2013, 18:51
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 339
Регистрация: 10-07-08
Из: Херсон
Пользователь №: 38 856



Цитата(Salamander @ Apr 13 2013, 21:32) *
дисплей ILI9325. Как повернуть изображение на 180 градусов?
Есть ли команда специальная? Или же нужно переписывать библиотеку?



о какой библиотеке речь ?
Go to the top of the page
 
+Quote Post
Salamander
сообщение Apr 13 2013, 19:27
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443



в смысле, о какой библиотеке?
Часть программы, отвечающая за дисплей.


поскольку сам нашел кое-что, уточню вопрос.
Что-нибудь кроме GRAM Access Direction Setting (регистр 03h) менять надо?
Я поменял - на результате не сказалось.
Go to the top of the page
 
+Quote Post
alexdos
сообщение Apr 13 2013, 19:40
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 339
Регистрация: 10-07-08
Из: Херсон
Пользователь №: 38 856



Цитата(Salamander @ Apr 13 2013, 22:27) *
в смысле, о какой библиотеке?
Часть программы, отвечающая за дисплей.


поскольку сам нашел кое-что, уточню вопрос.
Что-нибудь кроме GRAM Access Direction Setting (регистр 03h) менять надо?
Я поменял - на результате не сказалось.



Откуда нам знать какой "Часть программы, отвечающая за дисплей." Вы пользуетесь. Взяли со стороны, купили, или сами написали.
А по делу, я тоже щас с таким дисплеем воюю, долго не получалось получить изображение в нужной мне ориентации. Менял в GRAM Access Direction Setting (регистр 03h) но такое чувство что не реагировало, вернее изображение было всегда как бы зеркальными. Оказалось дело в инициализации. нашел чудный документ ILI9325AN_V0.22.pdf а в нём примеров инициализации дисплеев разных размеров. В общем взял я оттуда, и чудо свершилось. Изображение стало на место, правда потом я уже не пробовал менять в GRAM Access Direction Setting (регистр 03h).
Go to the top of the page
 
+Quote Post
Salamander
сообщение Apr 13 2013, 20:00
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443



Почитал еще... Поменял биты. Картинка перевернулась.
А вот текст почему-то оказался в той же ориентиции, что и раньше.
В подпрограмме вывода текста не нашел ничего, влияющего на ориентацию.

А библиотека у меня - ucGUI

Сообщение отредактировал Salamander - Apr 13 2013, 20:04
Go to the top of the page
 
+Quote Post
alexdos
сообщение Apr 13 2013, 20:12
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 339
Регистрация: 10-07-08
Из: Херсон
Пользователь №: 38 856



Цитата(Salamander @ Apr 13 2013, 23:00) *
Почитал еще... Поменял биты. Картинка перевернулась.
А вот текст почему-то оказался в той же ориентиции, что и раньше.
В подпрограмме вывода текста не нашел ничего, влияющего на ориентацию.

А библиотека у меня - ucGUI


А поделится есть возможность ucGUI? или ссылкой откуда её скачать. А то у мня не получилось.
Go to the top of the page
 
+Quote Post
Salamander
сообщение Apr 13 2013, 20:38
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443



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();

}
Go to the top of the page
 
+Quote Post
athlon64
сообщение Apr 22 2013, 05:24
Сообщение #8


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

Группа: Свой
Сообщений: 156
Регистрация: 10-03-10
Из: Уфа
Пользователь №: 55 882



Цитата(Salamander @ Apr 14 2013, 02:00) *
Почитал еще... Поменял биты. Картинка перевернулась.
А вот текст почему-то оказался в той же ориентиции, что и раньше.
В подпрограмме вывода текста не нашел ничего, влияющего на ориентацию.

А библиотека у меня - ucGUI


Вы в правильном направлении движетесь. Любой переворот делается регистрами ILI (Бит AM и биты I/D регистра Entry Mode).
Также посмотрите низкоуровневые процедуры работы с экраном (очистка экрана, закрашивание прямоугольника, вывод символа), в одном из китайских проектов видел зеркалирование на уровне этих процедур.


--------------------
Руслан
Go to the top of the page
 
+Quote Post
Memento Mori
сообщение May 13 2013, 16:39
Сообщение #9


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

Группа: Участник
Сообщений: 151
Регистрация: 1-10-12
Пользователь №: 73 751



Ничего не пойму....
у меня по всякому получалось поворачивать экран, но все время отсчет координат идет снизу вверх. То есть внизу 0, вверху 240 (ориентация горизонтальная).

Как сделать по-человечески?

CODE
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


Сообщение отредактировал IgorKossak - May 13 2013, 19:24
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение May 13 2013, 17:27
Сообщение #10


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



У них (ILIxxxx) примерно одинаково делается у всех. Вот отвечающие за переворот куски из моих проектов:


CODE
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 */
}


Другой контроллер:


CODE
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);


При этом знакогенератор одинаковый и больше ничего не меняется.

Сообщение отредактировал Genadi Zawidowski - May 13 2013, 17:55
Go to the top of the page
 
+Quote Post
Memento Mori
сообщение May 13 2013, 17:48
Сообщение #11


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

Группа: Участник
Сообщений: 151
Регистрация: 1-10-12
Пользователь №: 73 751



хм... давайте уточним - у вас в горизонтальном положении где неходится шлейф тачскрина? у меня в правом нижнем углу. То есть в координатах 319,239.
Go to the top of the page
 
+Quote Post

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

 


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


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