Easyelectronics.ru

Электроника для всех
Текущее время: 21 июн 2018, 11:25

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



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • 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
Сообщения: 353
Откуда: дальнее надмосковье
Есть много примеров для старой библиотеки, а вот для 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
Сообщения: 428
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
Сообщения: 14
Всем доброго времени суток. Автору большое спасибо за подробное изложение примера. Есть небольшой вопросик. Куда нужно воткнуть ногу "Flash_Cs" дисплея? А второй вопрос : при использовании FSMC из платы идет сигнал RD. К какой ноге этого дисплея его нужно подсоединить?


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

Зарегистрирован: 09 янв 2013, 21:54
Сообщения: 102
Откуда: Челябинск
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
Сообщения: 14
Спасибо, с этим разобрался. 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
Сообщения: 102
Откуда: Челябинск
См в даташите команды 2a, 2b, 2c.

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


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

Зарегистрирован: 10 авг 2016, 13:09
Сообщения: 14
Да действительно, немного затупил. У меня сей девайс хорошо запустился на либе 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 часов


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

Сейчас этот форум просматривают: jenya77


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

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

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