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

 
 
> TFT LCD дисплей.
Jenya7
сообщение Oct 7 2016, 09:44
Сообщение #1


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

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Хотелось узнать принцип работы такого дисплея. Он принимает следующие сигнальные линии
RED – 8 lines, GREEN – 8 lines, BLUE – 8 lines, CLK, VSYNC, HSYNC, DataEnable.
Допустим мы хотим поставить точку по координатам x = 10, y = 20 тогда
Выставляем цвет на RGB линиях, VSYNC тикает 10 раз, HSYNC тикает 20 раз, активируем DataEnable. Так ли это или я ошибаюсь?

Прикрепленные файлы
Прикрепленный файл  NL4827HC19_05A.pdf ( 947.52 килобайт ) Кол-во скачиваний: 54
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 14)
x893
сообщение Oct 7 2016, 10:04
Сообщение #2


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

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Ошибаетесь
стр 15 и далее
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Oct 7 2016, 10:25
Сообщение #3


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

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(x893 @ Oct 7 2016, 15:04) *
Ошибаетесь
стр 15 и далее

судя по диаграме на каждый HSYNC строб перерисуется вся линия. То есть общая картина такая - CLK молотит все время, HSYNC и VSYNC молотят все время а мы только обновляем данные на RGB линиях ?

Сообщение отредактировал Jenya7 - Oct 7 2016, 10:26
Go to the top of the page
 
+Quote Post
yuravg
сообщение Oct 7 2016, 10:41
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 63
Регистрация: 12-08-15
Из: Санкт-Петербург
Пользователь №: 87 968



Цитата(Jenya7 @ Oct 7 2016, 13:25) *
судя по диаграме на каждый HSYNC строб перерисуется вся линия. То есть общая картина такая - CLK молотит все время, HSYNC и VSYNC молотят все время а мы только обновляем данные на RGB линиях ?

VSYNC - строб для всей картинки
HSYNC - строб для строки в картинке
de - данные в строке (может полностью совпадать с HSYNC)
clk - есть всегда
Go to the top of the page
 
+Quote Post
x893
сообщение Oct 7 2016, 10:55
Сообщение #5


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

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Цитата(yuravg @ Oct 7 2016, 13:41) *
VSYNC - строб для всей картинки
HSYNC - строб для строки в картинке
de - данные в строке (может полностью совпадать с HSYNC)
clk - есть всегда

DE обычно меньше - так как есть зоны черные слева - справа
и сверху-снизу тоже есть области
Но это все в контроллере задается.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Oct 7 2016, 12:36
Сообщение #6


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

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Если я смотрю на драйвер со стороны контроллера то я вижу такой код.
Код
//-----------------------------------------------------------------------------
  // FUNCTION:    D4DLCDHW_SendDataWord_K70LCDC
  // SCOPE:       Low Level Driver API function
  // DESCRIPTION: The function send the one 16 bit variable into LCD  
  //
  // PARAMETERS:  unsigned long addr          address to write data
  //                            unsigned short value    variable to send
  //
  // RETURNS:     none
  //-----------------------------------------------------------------------------
  static void D4DLCDHW_WriteData_K70LCDC(unsigned long addr, D4D_COLOR value)
  {      
    #if D4D_COLOR_SYSTEM  == D4D_COLOR_SYSTEM_RGB565
        *((unsigned long*)addr) =((value & 0xf800)<<8)|((value & 0x07e0)<<5)|((value & 0x001F)<<3);    
    #elif D4D_COLOR_SYSTEM == D4D_COLOR_SYSTEM_RGB888
        *((unsigned long*)addr) = value;
    #endif    
  }

Это запись в LCD – запись значения по какому то адресу. А где управление линиями? Где установка цвета?
Go to the top of the page
 
+Quote Post
Andrew Su
сообщение Oct 7 2016, 13:35
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 301
Регистрация: 18-09-07
Из: Украина
Пользователь №: 30 647



Добрый день.
Приведенный вами фрагмент программы записывает в ячейку видеопамяти значение пиксела(точки) на экране.
Если установлено D4D_COLOR_SYSTEM_RGB565, то
пиксел имеет 16 бит, из них
5 бит red составляющей цвета, 6 бит - green составляющей цвета и 5 бит blue составляющей цвета.
Если установлено D4D_COLOR_SYSTEM_RGB888, то все составляющие по 8 бит и пиксел, соответственно 24 бита.
Сигналами VSYNC, HSYNC, DE управляет видеоконтроллер, к которому подключен дисплей. Он же выдает CLK.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 7 2016, 14:02
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Jenya7 @ Oct 7 2016, 15:36) *
Это запись в LCD – запись значения по какому то адресу. А где управление линиями? Где установка цвета?

Это для экрана со встроенным контроллером и интерфейсом 8080/6800.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Oct 7 2016, 14:45
Сообщение #9


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

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(aaarrr @ Oct 7 2016, 19:02) *
Это для экрана со встроенным контроллером и интерфейсом 8080/6800.

я не знаю какой интерфейс у дисплея. но это его функции управления. дисплей определяется в конфигурационном файле
Код
//low level driver for Kinetis K70 MCU LCDC peripherial
#define D4D_LLD_LCD_HW d4dlcdhw_k70_lcdc

ну и
Код
// the main structure that contains low level driver api functions
  // the name fo this structure is used for recognizing of configured low level driver of whole D4D
  // so this name has to be used in main configuration header file of D4D driver to enable this driver
  const D4DLCDHWFB_FUNCTIONS d4dlcdhw_k70_lcdc =
  {
    D4DLCDHW_Init_K70LCDC,    
    D4DLCDHW_WriteData_K70LCDC,
    D4DLCDHW_ReadData_K70LCDC,
    D4DLCDHW_GetFbDescriptor_K70LCDC,
    D4DLCDHW_PinCtl_K70LCDC,
    D4DLCD_FlushBuffer_K70LCDC,
    D4DLCDHW_DeInit_K70LCDC
  };

а D4DLCDHW_WriteData_K70LCDC мы уже видели.
кстати там можно выбрать и 8080/6800.
Код
/ d4dlcdhw_gpio6800_8b - low level hw interface driver for gpio drived parallel 8b 6800 bus
// d4dlcdhw_gpio8080_8b - low level hw interface driver for gpio drived parallel 8b 8080 bus
// d4dlcdhw_gpio8080_byte_8b - low level hw interface driver for gpio drived parallel 8b 8080 bus


Ну допустим со стороны дисплея есть SDRAM и мы пишем в адрес памяти. Но как? По каким линиям? Вот демонстрационный пример
CODE
/********************************************************************/
/*
* Display Red, Green, Blue, and White in each quadrant of the screen. Enable the
* graphic window to be displayed or not displayed, which will be a black rectangle
*/
void lcdc_color_demo()
{
color_demo_data(); //Create the frame buffer data for background plane and graphic window
color_demo_gw_setup(); //Initialize the graphic window registers for this demo

// set LCD Screen Start Address
LCDC_LSSAR = FRAME_START_ADDRESS;

// set LCD graphic window start address
LCDC_LGWSAR = GW_START_ADDRESS;

SIM_MCR|=SIM_MCR_LCDSTART_MASK; //Start LCDC

while(1)
{
in_char(); //Wait for input
LCDC_LGWCR&=~LCDC_LGWCR_GWE_MASK; //Turn off graphic window
in_char(); //Wait for input
LCDC_LGWCR|=LCDC_LGWCR_GWE_MASK; //Turn on graphic window
}

}

/*
* Create a frame buffer with the data to display on the LCD
*/
void color_demo_data()
{
int *pointer32;
int i,n;

/*
* Create the frame buffer so that the screen will be divided into 4 quadrants
* of a different color:
* RG
* BW
*/
pointer32=(int *)FRAME_START_ADDRESS;

//Loop through top half of screen
for(i=0;i<SCREEN_YSIZE/2;i++)
{
//One half will be red
for(n=0;n<SCREEN_XSIZE/2;n++)
{
*pointer32=0x00FF0000; //Red
pointer32++;
}

//One half will be green
for(n=0;n<SCREEN_XSIZE/2;n++)
{
*pointer32=0x0000FF00; //Green
pointer32++;
}
}

//Loop through bottom half of screen
for(i=0;i<SCREEN_YSIZE/2;i++)
{
//One half will be blue
for(n=0;n<SCREEN_XSIZE/2;n++)
{
*pointer32=0x000000FF; //Blue
pointer32++;
}

//One half will be white
for(n=0;n<SCREEN_XSIZE/2;n++)
{
*pointer32=0x00FFFFFF; //White
pointer32++;
}
}

/* Create a graphic window filled with the color black*/
pointer32=(int *)GW_START_ADDRESS;
for(i=0;i<GW_BUFFER_SIZE/4;i++)
{
*pointer32=0x00000000; //Black
pointer32++;
}
}

/*
* Initialize the graphic window registers to create a graphic window in the
* middle of the screen
*/
void color_demo_gw_setup()
{
// set LCD graphic window size
LCDC_LGWSR =
LCDC_LGWSR_GWW(GW_XSIZE/16) |
LCDC_LGWSR_GWH(GW_YSIZE);

// set LCD graphic window virtual page width
LCDC_LGWVPWR = GW_XSIZE;

// set LCD graphic window panning offset (not used in 24bpp mode)
LCDC_LGWPOR = 0;

// set LCD graphic window position so that the GW will cover up the middle of screen
LCDC_LGWPR =
LCDC_LGWPR_GWXP(SCREEN_XSIZE/4) |
LCDC_LGWPR_GWYP(SCREEN_YSIZE/4);

// set LCD graphic window control
LCDC_LGWCR =
LCDC_LGWCR_GWAV(0xff) | // alpha-transparent value (0xFF is opaque)
LCDC_LGWCR_GWE_MASK;
}

в color_demo_data() перебираются адреса и заноситься дата. а где управление линиями? в MK70FN1M0Vyy12 есть встроенный LCD модуль. он что автоматически всем управляет? а адрес это что, координаты?

Сообщение отредактировал Jenya7 - Oct 7 2016, 14:58
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 7 2016, 14:52
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Jenya7 @ Oct 7 2016, 17:45) *
я не знаю какой интерфейс у дисплея. но это его функции управления. дисплей определяется в конфигурационном файле

Наврал я в предыдущем сообщении. Интерфейс у вашего экрана RGB, про цвет и управление Andrew Su написал.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Oct 7 2016, 15:03
Сообщение #11


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

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(Andrew Su @ Oct 7 2016, 18:35) *
Добрый день.
Приведенный вами фрагмент программы записывает в ячейку видеопамяти значение пиксела(точки) на экране.
Если установлено D4D_COLOR_SYSTEM_RGB565, то
пиксел имеет 16 бит, из них
5 бит red составляющей цвета, 6 бит - green составляющей цвета и 5 бит blue составляющей цвета.
Если установлено D4D_COLOR_SYSTEM_RGB888, то все составляющие по 8 бит и пиксел, соответственно 24 бита.
Сигналами VSYNC, HSYNC, DE управляет видеоконтроллер, к которому подключен дисплей. Он же выдает CLK.

спасибо. понемногу проясняется. а адресс? как мы выбираем адрес? и как мы передаем его? у нас ведь нет адресных линий.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 7 2016, 15:11
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Jenya7 @ Oct 7 2016, 18:03) *
а адресс? как мы выбираем адрес? и как мы передаем его? у нас ведь нет адресных линий.

У вас есть буфер в ОЗУ. Адрес точки есть <адрес начала буфера> + (Y * <количество точек в строке> + X) * <размер точки в байтах>
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Oct 7 2016, 15:20
Сообщение #13


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

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(aaarrr @ Oct 7 2016, 20:11) *
У вас есть буфер в ОЗУ. Адрес точки есть <адрес начала буфера> + (Y * <количество точек в строке> + X) * <размер точки в байтах>

По моему до меня дошло. Мы обращаемся в адрес микроконтроллера, то есть по сути дела обращаемся к координате пикселя и передаем дату – цвет, который мы хотим записать в данный пиксель. А микроконтроллер сам разруливает сигнальные линии на основе данных которые мы ему записали. Я прав? Единственно что не понятно – эти адресса это адреса регистров?
Есть такое определение
Код
#define FRAME_START_ADDRESS 0x80400000  //Screen in DDR

Куда код обращается? К внешней памяти? Или внутренний RAM?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 7 2016, 15:30
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Jenya7 @ Oct 7 2016, 18:20) *
Единственно что не понятно – эти адресса это адреса регистров?

Это адреса в памяти контроллера. Контроллер осуществляет непрерывную развертку LCD,
данные для развертки берутся из памяти контроллера.

Со стороны программы экран - это просто участок памяти.

Цитата(Jenya7 @ Oct 7 2016, 18:20) *
Есть такое определение
Код
#define FRAME_START_ADDRESS 0x80400000  //Screen in DDR

Куда код обращается? К внешней памяти? Или внутренний RAM?

Комментарий как бы намекает, что это адрес во внешней DDR.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Oct 7 2016, 15:39
Сообщение #15


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

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(aaarrr @ Oct 7 2016, 20:30) *
Это адреса в памяти контроллера. Контроллер осуществляет непрерывную развертку LCD,
данные для развертки берутся из памяти контроллера.

Со стороны программы экран - это просто участок памяти.


Комментарий как бы намекает, что это адрес во внешней DDR.

я понял. спасибо.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 21:56
Рейтинг@Mail.ru


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