Программирование BASCOM
Меню сайта
Категории каталога
Мои статьи [115]
Наш опрос
Оцените мой сайт
Всего ответов: 1292
Главная » Статьи » Мои статьи

Подключаем дисплеи c контроллером ILI9325
На контроллере ILI9325 выпускаются дисплеи размером  2,4 и 2,8 дюйма, разрешение 240х320. 



Интерфейс параллельный, 8- и 16-бит, что позволяет довольно быстро отображать информацию.

Для управления будем использовать выводы

WR (строб записи данных)

RS (D/C- выбор команда/данные).

Чтение из дисплея не используем, поэтому вывод RDподключаем к плюсу.

Вывод CS (выбор кристалла) также не используем, поэтому его заземляем.

При желании использовать шину данных для обмена еще и с другими периферийными устройствами (например клавиатурой, дополнительным дисплеем), то можно выводом CSосуществлять выбор дисплея.

Разъем стандартный большой, рассчитан на подключение к платам Arduino.

Библиотека написана с применение режима Config Submode = New, что упростило подключение библиотеки. 

Кроме того, в этом случае неиспользуемые подпрограммы не компилируются, нет необходимости в указании "Call" для вызова подпрограмм и скобок для параметров.

Подробнее в тестовых примерах.

Для 8-битного интерфейса применяем вариант ILI9325 library.inc.

Для 16-битного - вариант ILI9325 16bitlibrary.inc.

Для конвертирования картинок в 16-битный BIN-файл можно воспользоваться утилитами Image2Lcd или Pic2Bin (в архиве). В SPI-Flash картинки можно записать программатором BlackCat.

При написании библиотеки особое внимание уделялось скорости ее работы (с некоторым ущербом для ее размера), т.к. разрешение 240х320 довольно велико  для 8-разрядного МК. 

На видео тестовый пример из архива, работающий на частоте 8МГц. При 16МГц или 32МГц (для AtXmega) скорость будет соответственно в 2 и 4 раза выше.

 

Видео с 8-битным интерфейсом: 


Видео с 16-битным интерфейсом:


 

Библиотека работает только с самим дисплеем. Для Тачскрина и Кардридера потребуются отдельные библиотеки. 

 

MrShilov, 2014.


Категория: Мои статьи | Добавил: bascom (01.02.2014) | Автор: Radan
Просмотров: 19783 | Комментарии: 13
Всего комментариев: 131 2 »
12 K()X5968  
0
Доброе время суток!
У меня проблемы с этим дисплеем: Чтобы дисплей завелся приходится несколько раз дергать питание, после запуска успешно работает некоторое время (3-20 секунд) и отрубается- экран очищается, приобретает сероватый оттенок. Чтобы запустить его по новой опять же надо передернуть несколько раз питание. Контроллер Atmega1284 с внешним кварцем на 14Мц.
Дисплей и контроллер запитаны от 4 вольт (знаю что много) конденсаторы по питанию дисплея и контроллера установлены, длина проводов между дисплеем и контроллером примерно 7см.. Подскажите- в какую сторону копать?
Вот видео этого глюка:

Заранее спасибо!

11 slawek3000  
0
Privіt nie mene Tak problemem s funktsієyu udusił bryazkotu i Lcd_negative 1 natisnіt vіdobrazhennya okazję zastanawiać: Yak tse Mauger Buti najlepszy?
https://www.youtube.com/watch?v=6HEn_mPDsuY

10 LEX  
0
Всем привет!
Подскажите пожалуйста где найти библиотеку для ILI9327. Китайцы делают симпатичный дисплей 3.5 дюйма но не могу пока найти как его в Баскоме заставить работать. http://ru.aliexpress.com/item/3-5-inch-TFT-Touch-LCD-Screen-Display-Module-For-Arduino-UNO-R3-HIGH-QUALITY-Free /1786048346.html

9 kestrel  
0
для forter
туда куда вы указываете, я ходил
там автор явно указывает на 8-ми битный режим работы
меня интересует 16-ти битный

8 forter  
0
Уважаемый 7kestrel!
Если пройдете по ссылке  
http://avrproject.ru/publ/chasy_budilnik_po_motivam_quot_neobychnykh_chasov_quot/1-1-0-156 то сможете обнаружить подпрограммы для дисплея с контроллером S6D1121, правда, там они не
не оформлены отдельной библиотекой

7 MrShilov8745  
0
Если дадите дисплей.

6 forter  
0
Все - таки вопрос с инициализацией SSD1289 остался.
В вашем коде совсем немного команд инициализации, все остальные установки контроллера дисплея остаются по умолчанию?

13 kadrum  
0
Могу предложить свой вариант инициализации 16-бит под STM32F1:

Кодvoid Write_Command(unsigned int command){  int temp;
GPIOB->BSRR = TFT_RD; GPIOB->BRR = TFT_RS; TFT_DP1 = (TFT_DP1 & 0xE000) | (command & 0x1FFF); // reset 13 - 15 bits TFT_DP2 = (TFT_DP2 & 0xE3FF) | ((command >> 3) & 0x1C00); // reset all pins, but 13-15 
  GPIOB->BRR = TFT_WR; GPIOB->BSRR = TFT_WR;}
void Write_Data(unsigned int data){  int temp;
GPIOB->BSRR = TFT_RD; GPIOB->BSRR = TFT_RS; TFT_DP1 = (TFT_DP1 & 0xE000) | (data & 0x1FFF); // reset 13 - 15 bits TFT_DP2 = (TFT_DP2 & 0xE3FF) | ((data >> 3) & 0x1C00); // reset all pins, but 13-15 
GPIOB->BRR = TFT_WR; GPIOB->BSRR = TFT_WR; }
void Write_Command_Data(unsigned int command,unsigned int data){   Write_Command(command);   Write_Data(data);}

void TFT_Init(void)
{
// GPIOx->BRR - установить бит GPIO в 0
// GPIOx->BSRR - установить бит GPIO в 1         
TFT_DP2 = 0;
        GPIOB->BSRR = TFT_RD;
        GPIOB->BSRR = TFT_RST;
        delay_ms(5); //5
        GPIOB->BRR = TFT_RST; 
        delay_ms(15); //15
        GPIOB->BSRR = TFT_RST;
        delay_ms(15); //15
////        GPIOB->BRR = TFT_CS; // аппаратно подтянут к 0  

        Write_Command_Data(0x0000,0x0001); 
        Write_Command_Data(0x0003,0xA8A4); 
        Write_Command_Data(0x000C,0x0000); 
        Write_Command_Data(0x000D,0x800C); 
        Write_Command_Data(0x000E,0x2B00); 
        Write_Command_Data(0x001E,0x00B7); 
        Write_Command_Data(0x0001,0x2B3F); 
        Write_Command_Data(0x0002,0x0600); 
        Write_Command_Data(0x0010,0x0000); 
        Write_Command_Data(0x0011,0x6070); 
        Write_Command_Data(0x0005,0x0000); 
        Write_Command_Data(0x0006,0x0000); 
        Write_Command_Data(0x0016,0xEF1C); 
        Write_Command_Data(0x0017,0x0003); 
        Write_Command_Data(0x0007,0x0233); 
        Write_Command_Data(0x000B,0x0000); 
        Write_Command_Data(0x000F,0x0000); 
        Write_Command_Data(0x0041,0x0000); 
        Write_Command_Data(0x0042,0x0000); 
        Write_Command_Data(0x0048,0x0000); 
        Write_Command_Data(0x0049,0x013F); 
        Write_Command_Data(0x004A,0x0000); 
        Write_Command_Data(0x004B,0x0000); 
        Write_Command_Data(0x0044,0xEF95); 
        Write_Command_Data(0x0045,0x0000); 
        Write_Command_Data(0x0046,0x013F); 
        Write_Command_Data(0x0030,0x0707); 
        Write_Command_Data(0x0031,0x0204); 
        Write_Command_Data(0x0032,0x0204); 
        Write_Command_Data(0x0033,0x0502); 
        Write_Command_Data(0x0034,0x0507); 
        Write_Command_Data(0x0035,0x0204); 
        Write_Command_Data(0x0036,0x0204); 
        Write_Command_Data(0x0037,0x0502); 
        Write_Command_Data(0x003A,0x0302); 
        Write_Command_Data(0x003B,0x0302); 
        Write_Command_Data(0x0023,0x0000); 
        Write_Command_Data(0x0024,0x0000); 
        Write_Command_Data(0x0025,0x8000); 
        Write_Command_Data(0x004f,0x0000); 
        Write_Command_Data(0x004e,0x0000); 
        Write_Command(0x0022);
}


// функция заливки для проверки
void TFT_Fill(unsigned int color)
{
  unsigned int i,j;

TFT_Set_Address(0,32,239,319);

  Write_Data(color);
  for(i = 0; i <= 319; i++)
  {
    for(j = 0; j <= 239; j++)
    {
        GPIOB->BRR = TFT_WR;
        GPIOB->BSRR = TFT_WR;
    }
  }
}

5 forter  
0
Понял!
Спасибо за код.

4 MrShilov8745  
0
Первый дисплей 8-битный, второй - 16-битный. Переключение не поддерживается.
Для тачскрина по прерыванию выставляем флаг:
Touch_int:
   Touch_flag = 1
Return
В основном цикле проверяем его и по результату опрашиваем.
Здесь установки и подпрограмма:  http://rusfolder.com/39807016

3 forter  
0
Ну вот у Вас приведены два видео. Одно показывает работу в 8 - и битном режиме, второе в 16 - и битном режиме. Разрядность шины выбирается контроллером дисплея. Отсюда вопрос - что на плате дисплея надо соединить (или разомкнуть), чтобы работать с дисплеем в 8 или 16 битном режиме?
И еще вопрос (пока сам не проверил) - при инициализации дисплея с контроллером SSD1289 Вы используете ну очень уж укороченную процедуру этой самой инициализации. Достаточно этих 7 или (сейчас не помню) 10 команд?
Ну, и напоследок, для тачскрина для  такой ориентации дисплея как у Вас, не разрабатывали программу? Вдруг - да! В таком случае, может быть, поделитесь кодом?

1-10 11-12
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Поиск
Друзья сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Copyright Radan Studio © 2024