Перейти к содержанию
    

дисплей ILI9325. Как повернуть изображение на 180 градусов?

дисплей ILI9325. Как повернуть изображение на 180 градусов?

Есть ли команда специальная? Или же нужно переписывать библиотеку?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

дисплей ILI9325. Как повернуть изображение на 180 градусов?

Есть ли команда специальная? Или же нужно переписывать библиотеку?

 

 

о какой библиотеке речь ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в смысле, о какой библиотеке?

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

 

 

поскольку сам нашел кое-что, уточню вопрос.

Что-нибудь кроме GRAM Access Direction Setting (регистр 03h) менять надо?

Я поменял - на результате не сказалось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в смысле, о какой библиотеке?

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

 

 

поскольку сам нашел кое-что, уточню вопрос.

Что-нибудь кроме GRAM Access Direction Setting (регистр 03h) менять надо?

Я поменял - на результате не сказалось.

 

 

Откуда нам знать какой "Часть программы, отвечающая за дисплей." Вы пользуетесь. Взяли со стороны, купили, или сами написали.

А по делу, я тоже щас с таким дисплеем воюю, долго не получалось получить изображение в нужной мне ориентации. Менял в GRAM Access Direction Setting (регистр 03h) но такое чувство что не реагировало, вернее изображение было всегда как бы зеркальными. Оказалось дело в инициализации. нашел чудный документ ILI9325AN_V0.22.pdf а в нём примеров инициализации дисплеев разных размеров. В общем взял я оттуда, и чудо свершилось. Изображение стало на место, правда потом я уже не пробовал менять в GRAM Access Direction Setting (регистр 03h).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почитал еще... Поменял биты. Картинка перевернулась.

А вот текст почему-то оказался в той же ориентиции, что и раньше.

В подпрограмме вывода текста не нашел ничего, влияющего на ориентацию.

 

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

Изменено пользователем Salamander

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почитал еще... Поменял биты. Картинка перевернулась.

А вот текст почему-то оказался в той же ориентиции, что и раньше.

В подпрограмме вывода текста не нашел ничего, влияющего на ориентацию.

 

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

 

А поделится есть возможность ucGUI? или ссылкой откуда её скачать. А то у мня не получилось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почитал еще... Поменял биты. Картинка перевернулась.

А вот текст почему-то оказался в той же ориентиции, что и раньше.

В подпрограмме вывода текста не нашел ничего, влияющего на ориентацию.

 

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

 

Вы в правильном направлении движетесь. Любой переворот делается регистрами ILI (Бит AM и биты I/D регистра Entry Mode).

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ничего не пойму....

у меня по всякому получалось поворачивать экран, но все время отсчет координат идет снизу вверх. То есть внизу 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

Изменено пользователем IgorKossak
[codebox] для длинного кода, [code] - для короткого!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У них (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);

 

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

Изменено пользователем Genadi Zawidowski

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

хм... давайте уточним - у вас в горизонтальном положении где неходится шлейф тачскрина? у меня в правом нижнем углу. То есть в координатах 319,239.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...