Easyelectronics.ru

Электроника для всех
Текущее время: 25 ноя 2017, 07:06

Часовой пояс: UTC + 5 часов



    • 10 шт. 2-слоя 100*100mm 2$. Быстрый заказ: JLCPCB.com
    • JLCPCB - это крупнейшая фабрика PCB прототипов в Китае.
    • Имеющий более 290,000 клиентов и выполняющий более 8,000 заказов в день.
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: LCD Ili9481 + Coocox
СообщениеДобавлено: 26 апр 2016, 19:05 
Только пришел

Зарегистрирован: 08 апр 2016, 12:05
Сообщения: 7
Откуда: Петербург
Здравствуйте!
Помогите пожалйста разобраться.
Есть отладочная платка на stm32f103VET6.
Есть дисплей ILI9481 3,5 дюйма 480х320 режим 16bit. через FSMC.
Проект делаю в Coocox и CubeMX.
Какую библиотеку лучше использовать? (и как?)
Для начала хотя бы инициализацию сделать...
Я только недавно перешел на STM с AVR.
Со всей периферией разобрался а тут затык.
Спасибо!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LCD Ili9481 + Coocox
СообщениеДобавлено: 26 апр 2016, 20:38 
Старожил

Зарегистрирован: 07 авг 2014, 17:15
Сообщения: 314
Откуда: дальнее надмосковье
Есть много примеров для старой библиотеки, а вот для CubeMX+HAL я примеров для этого дисплея не видел.

Думаю можно легко переделать например вот этот драйвер (он написан для STM32F407 и на Standard Peripherals Library) от этого проекта на STM32F103 и HAL. Там просто настройка FSMC и отправка нескольких команд дисплею для ее инициализации.

Добавлено:
Вот еще нашел библиотеку для работы с LCD через FSMC в репозитории CubeMX - STM32Cube_FW_F1_V1.3.0\Drivers\BSP\STM3210E_EVAL\stm3210e_eval_lcd.c


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LCD Ili9481 + Coocox
СообщениеДобавлено: 27 апр 2016, 00:17 
Только пришел

Зарегистрирован: 08 апр 2016, 12:05
Сообщения: 7
Откуда: Петербург
Люди добрые!!!!
Помогите! Кто может сделать рабочий пример?
Очень нужно!
Я отблагодарю любым удобным способом..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LCD Ili9481 + Coocox
СообщениеДобавлено: 01 май 2016, 17:20 
Только пришел

Зарегистрирован: 08 апр 2016, 12:05
Сообщения: 7
Откуда: Петербург
Разобрался!
С инициализацией не сложно все.
Подсобрал свою небольшую библиотеку для вывода на дисплей примитивов (точки, линии, окружности, с заливкой и без).
А с шрифтом не могу разобраться.
Есть у кого пример несложный вывода символа?
Я разберусь и дополню сам.
шрифт любой.
кому нужно могу дать то что сделал


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LCD Ili9481 + Coocox
СообщениеДобавлено: 01 май 2016, 22:24 
Старожил
Аватара пользователя

Зарегистрирован: 30 мар 2015, 23:56
Сообщения: 354
RSV писал(а):
Есть у кого пример несложный вывода символа?

Это секретно.
Show

Show

_________________
Потоковая OS


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LCD Ili9481 + Coocox
СообщениеДобавлено: 12 май 2016, 00:10 
Только пришел

Зарегистрирован: 08 апр 2016, 12:05
Сообщения: 7
Откуда: Петербург
Спасибо большое!
Очень помогли!
Все заработало.
Теперь осталось оптимизировать библиотеку.
Заказал еще таких экранов про запас.
Буду развивать проект.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LCD Ili9481 + Coocox
СообщениеДобавлено: 26 май 2016, 11:56 
Здравствуйте!

Зарегистрирован: 26 май 2016, 11:51
Сообщения: 1
Ну поделитесь наработками.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LCD Ili9481 + Coocox
СообщениеДобавлено: 19 июн 2016, 02:00 
Только пришел

Зарегистрирован: 08 апр 2016, 12:05
Сообщения: 7
Откуда: Петербург
Все не так сложно, т.к. под HAL
Берем КУБ, все конфигурируем под свой проц, потом так..

сначала переменные

Код:
#define LCD_RAM   *(uint16_t *)((uint32_t)0x60020000)  //disp Data ADDR
#define LCD_REG   *(uint16_t *)((uint32_t)0x60000000)    //disp Reg  ADDR


потом некоторые дефайны
Код:
#define LCD_NOOP            0x00   /* No Operation*/
#define LCD_SWRESET             0x01   /* Software Reset */
#define LCD_RDDPM               0x0A   /* Read Display Power Mode */
#define LCD_RDDMADCTL           0x0B   /* Read Display MADCTL */
#define LCD_RDDCOLMOD           0x0C   /* Read Display Pixel Format */
#define LCD_RDDIM               0x0D   /* Read Display Image Format */
#define LCD_RDDSM               0x0E   /* Read Display Signal Mode */
#define LCD_RDDSDR              0x0F   /* Read Display Self-Diagnostic Result */
#define LCD_SPLIN               0x10   /* Enter Sleep Mode */
#define LCD_SLEEP_OUT           0x11   /* Sleep out register */
#define LCD_PTLON               0x12   /* Partial Mode ON */
#define LCD_NORMAL_MODE_ON      0x13   /* Normal Display Mode ON */
#define LCD_DINVOFF             0x20   /* Display Inversion OFF */
#define LCD_DINVON              0x21   /* Display Inversion ON */
#define LCD_GAMMA               0x26   /* Gamma register */
#define LCD_DISPLAY_OFF         0x28   /* Display off register */
#define LCD_DISPLAY_ON          0x29   /* Display on register */
#define LCD_COLUMN_ADDR         0x2A   /* Column address register */
#define LCD_PAGE_ADDR           0x2B   /* Page address register */
#define LCD_GRAM                0x2C   /* GRAM register */
#define LCD_RGBSET              0x2D   /* Color SET */
#define LCD_RAMRD               0x2E   /* Memory Read */
#define LCD_PLTAR               0x30   /* Partial Area */
#define LCD_VSCRDEF             0x33   /* Vertical Scrolling Definition */
#define LCD_TEOFF               0x34   /* Tearing Effect Line OFF */
#define LCD_TEON                0x35   /* Tearing Effect Line ON */
#define LCD_MAC                 0x36   /* Memory Access Control register*/
#define LCD_VSCRSADD            0x37   /* Vertical Scrolling Start Address */
#define LCD_IDMOFF              0x38   /* Idle Mode OFF */
#define LCD_IDMON               0x39   /* Idle Mode ON */
#define LCD_PIXEL_FORMAT        0x3A   /* Pixel Format register */
#define LCD_WRITE_MEM_CONTINUE  0x3C   /* Write Memory Continue */
#define LCD_READ_MEM_CONTINUE   0x3E   /* Read Memory Continue */
#define LCD_SET_TEAR_SCANLINE   0x44   /* Set Tear Scanline */
#define LCD_GET_SCANLINE        0x45   /* Get Scanline */
#define LCD_READ_DDB_START      0xA1   /* Read DDB start */

/* Level 2 Commands */
#define LCD_CMDACCPRTC          0xB0   /* Command Access Protect  */
#define LCD_FRMCTR              0xB3   /* Frame Memory Access and Interface setting  */
#define LCD_DMFMCTR             0xB4   /* Display Mode and Frame Memory Write Mode
setting */
#define LCD_DEVCODERD           0xBF   /* Device code read */
#define LCD_PANEL_DRV_CTL       0xC0   /* Panel Driving Setting */
#define LCD_NORMAL_TIMING_WR    0xC1   /* Display Timing Setting for Normal Mode  */
#define LCD_PARTIAL_TIMING_WR   0xC2   /* Display Timing Setting for Partial Mode  */
#define LCD_IDLE_TIMING_WR      0xC3   /* Display Timing Setting for Idle Mode  */
#define LCD_FR_INV_CTL          0xC5   /* Frame rate and Inversion Control  */
#define LCD_INTERFACE           0xC6   /* Interface Control */
#define LCD_GAMMAWR            0xC8   /* Gamma Setting */
#define LCD_POWER               0xD0   /* POWER CONTROL */
#define LCD_VCOM               0xD1   /* VCOM Control */
#define LCD_NORMAL_PWR_WR       0xD2   /* Power Setting for Normal Mode  */
#define LCD_PARTIAL_PWR_WR      0xD3   /* Power Setting for Partial Mode  */
#define LCD_IDLE_PWR_WR         0xD4   /* Power Setting for Idle Mode  */
#define LCD_NVMEMWR             0xE0   /* NV Memory Write  */
#define LCD_NVMEMCTRL           0xE1   /* NV Memory Control */
#define LCD_NVMEMRD             0xE2   /* NV Memory Status */
#define LCD_NVMEMPRT            0xE3   /* NV Memory Protection  */
#define LCD_EEPROMWR_ENABLE      0xE8   /* EEPROM Write Enable  */
#define LCD_EEPROMWR_DISABLE    0xE9   /* EEPROM Write Disable  */
#define LCD_EEPROMWR         0xEA   /* EEPROM Word Write */
#define LCD_EEPROMRD            0xEB   /* EEPROM Word Read   */
#define LCD_EEPROM_ADR_SET       0xEC   /* EEPROM Address Set */
#define LCD_EEPROM_ERASE        0xED   /* EEPROM Erase */
#define LCD_EEPROM_ERASE_ALL    0xEE   /* EEPROM Erase All  */


Код:
    // Так мы будем писать команды в регистры LCD
     void LCD_WR_REG(uint16_t regval)
     {
        LCD_REG=regval;
     }
//*******************************************************************
     // А так данные..
     void LCD_WR_DATA(uint16_t data)
     {
        LCD_RAM=data;
     }



Инициализация
Код:
// Инициализация дисплея.
    void LCD_Init(void)
    {
       //LCD_FSMC_Config();
         HAL_Delay(50);
       //GPIO_SetBits(GPIOE, GPIO_Pin_1);
       HAL_GPIO_WritePin(GPIOE, GPIO_PIN_1, GPIO_PIN_SET);
       HAL_Delay(20);
       //GPIO_ResetBits(GPIOE, GPIO_Pin_1);
       HAL_GPIO_WritePin(GPIOE, GPIO_PIN_1, GPIO_PIN_RESET);
       HAL_Delay(20);
       //GPIO_SetBits(GPIOE, GPIO_Pin_1);
       HAL_GPIO_WritePin(GPIOE, GPIO_PIN_1, GPIO_PIN_SET);
       HAL_Delay(20);;

       //************* Start Initial Sequence **********//
       LCD_WR_REG(0x11);   //0x11
       HAL_Delay(50);

       LCD_WR_REG(LCD_NORMAL_MODE_ON);   //0x13

       LCD_WR_REG(0xD0);    //(0xD0);
       LCD_WR_DATA(0x07);
       LCD_WR_DATA(0x43);    //0x43  0x42
       LCD_WR_DATA(0x15);    //0x15  0x18

       LCD_WR_REG(LCD_VCOM);    //(0xD1);
       LCD_WR_DATA(0x00);
       LCD_WR_DATA(0x07);//07
       LCD_WR_DATA(0x10);

       LCD_WR_REG(LCD_NORMAL_PWR_WR);    //(0xD2);
       LCD_WR_DATA(0x01);
       LCD_WR_DATA(0x02);

       LCD_WR_REG(LCD_PANEL_DRV_CTL);    //(0xC0);
       LCD_WR_DATA(0x10);
       LCD_WR_DATA(0x3B);
       LCD_WR_DATA(0x00);
       LCD_WR_DATA(0x02);
       LCD_WR_DATA(0x11);

       LCD_WR_REG(LCD_FR_INV_CTL);    //(0xC5);
       LCD_WR_DATA(0x03);

       LCD_WR_REG(LCD_GAMMAWR);    //(0xC8);
       LCD_WR_DATA(0x00);
       LCD_WR_DATA(0x32);
       LCD_WR_DATA(0x36);
       LCD_WR_DATA(0x45);
       LCD_WR_DATA(0x06);
       LCD_WR_DATA(0x16);
       LCD_WR_DATA(0x37);
       LCD_WR_DATA(0x75);
       LCD_WR_DATA(0x77);
       LCD_WR_DATA(0x54);
       LCD_WR_DATA(0x0C);
       LCD_WR_DATA(0x00);

       LCD_WR_REG(0x36);    //(0x2B);   
       LCD_WR_DATA(0x2B);   

       LCD_WR_REG(LCD_PIXEL_FORMAT);    //(0x3A);
       LCD_WR_DATA(0x55);

       LCD_WR_REG(LCD_COLUMN_ADDR);    //(0x2A);
       LCD_WR_DATA(0x00);
       LCD_WR_DATA(0x00);
       LCD_WR_DATA(0x01);
       LCD_WR_DATA(0x3F);

       LCD_WR_REG(LCD_PAGE_ADDR);    //(0x2B);
       LCD_WR_DATA(0x00);
       LCD_WR_DATA(0x00);
       LCD_WR_DATA(0x01);
       LCD_WR_DATA(0xE0);
       HAL_Delay(120);
      LCD_WR_REG(LCD_DISPLAY_ON);    //(0x29);
    }


подключаем так к FMSC

Изображение

далее куча функций типа круг, прямоугольник и прочие примитивы.

вот круг
Код:
// окружность пустая
           void drawCircle(int x, int y, int radius)
           {
              int f = 1 - radius;
              int ddF_x = 1;
              int ddF_y = -2 * radius;
              int x1 = 0;
              int y1 = radius;

              setXY(x, y + radius, x, y + radius);
              LCD_WR_DATA(color);
              setXY(x, y - radius, x, y - radius);
              LCD_WR_DATA(color);
              setXY(x + radius, y, x + radius, y);
              LCD_WR_DATA(color);
              setXY(x - radius, y, x - radius, y);
              LCD_WR_DATA(color);

              while(x1 < y1)
              {
                 if(f >= 0)
                 {
                    y1--;
                    ddF_y += 2;
                    f += ddF_y;
                 }
                 x1++;
                 ddF_x += 2;
                 f += ddF_x;
                 setXY(x + x1, y + y1, x + x1, y + y1);
                 LCD_WR_DATA(color);
                 setXY(x - x1, y + y1, x - x1, y + y1);
                 LCD_WR_DATA(color);
                 setXY(x + x1, y - y1, x + x1, y - y1);
                 LCD_WR_DATA(color);
                 setXY(x - x1, y - y1, x - x1, y - y1);
                 LCD_WR_DATA(color);
                 setXY(x + y1, y + x1, x + y1, y + x1);
                 LCD_WR_DATA(color);
                 setXY(x - y1, y + x1, x - y1, y + x1);
                 LCD_WR_DATA(color);
                 setXY(x + y1, y - x1, x + y1, y - x1);
                 LCD_WR_DATA(color);
                 setXY(x - y1, y - x1, x - y1, y - x1);
                 LCD_WR_DATA(color);
              }

           }



в инициализации подобраны параметры -
Горизонтальное ориент.
Координаты левый верхий угол 0.0

как то так...

в конце получаем типа того

Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LCD Ili9481 + Coocox
СообщениеДобавлено: 20 фев 2017, 17:31 
Только пришел

Зарегистрирован: 10 авг 2016, 13:09
Сообщения: 13
Всем доброго времени суток. Автору большое спасибо за подробное изложение примера. Есть небольшой вопросик. Куда нужно воткнуть ногу "Flash_Cs" дисплея? А второй вопрос : при использовании FSMC из платы идет сигнал RD. К какой ноге этого дисплея его нужно подсоединить?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LCD Ili9481 + Coocox
СообщениеДобавлено: 22 фев 2017, 09:14 
Заглядывает иногда

Зарегистрирован: 09 янв 2013, 21:54
Сообщения: 83
Откуда: Челябинск
desiner
flash_cs - никуда, это не от дисплея, а от опциональной микросхемы flash на его плате.
RD - к LCD_RD. Или, в кривом китайском переводе, LCD_RS.

А может RD и вовсе нету, а LCD_RS это выбор данных/команд, также обозначаемый как D/C, A0 или RS.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LCD Ili9481 + Coocox
СообщениеДобавлено: 06 мар 2017, 23:47 
Только пришел

Зарегистрирован: 10 авг 2016, 13:09
Сообщения: 13
Спасибо, с этим разобрался. RD у меня вообще не распинован, посажен внутри на 1. поэтому с lcd ничего не прочитать.
setXY(x, y + radius, x, y + radius);
LCD_WR_DATA(color);
может быть кто подскажет как реализовать функцию SETXY и какое может быть значение переменной color?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LCD Ili9481 + Coocox
СообщениеДобавлено: 06 мар 2017, 23:56 
Заглядывает иногда

Зарегистрирован: 09 янв 2013, 21:54
Сообщения: 83
Откуда: Челябинск
См в даташите команды 2a, 2b, 2c.

Color скорее всего 16-битное число r5g6b5. Но вообще надо по настройкам смотреть, ширину используемой шины данных и формат передачи.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LCD Ili9481 + Coocox
СообщениеДобавлено: 17 мар 2017, 20:05 
Только пришел

Зарегистрирован: 10 авг 2016, 13:09
Сообщения: 13
Да действительно, немного затупил. У меня сей девайс хорошо запустился на либе emWin.(ссылка на проект в топике темы) чертит круги заполняет квадраты. Но если просто делать на прямую без emWin установку столбцов и строк, то ничего не выходит. Может кто-нибудь поможет?. Подключения по FSMC 16 bit 64к цвета. Пробовал различные варианты инициализации ничего не помогает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LCD Ili9481 + Coocox
СообщениеДобавлено: 24 июл 2017, 12:23 
Здравствуйте!

Зарегистрирован: 02 дек 2016, 15:42
Сообщения: 2
привет
у меня дисплей на контролере HX8357B и совместим с ардуино мега 2560 я так понимаю это аналог Ili9481
может у кого есть библиотека под него и CodeVisionAVR или Atmel Studio 7.0 ???
прошу поделиться


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LCD Ili9481 + Coocox
СообщениеДобавлено: 06 сен 2017, 12:34 
Здравствуйте!

Зарегистрирован: 02 дек 2016, 15:42
Сообщения: 2
у кого то есть библиотека для протеуса для дисплея сконтроллером HX8357B ?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB