Скорость работы дисплеев

UnrealBlack
Offline
Зарегистрирован: 19.04.2016

Всем привет!

Имеется дисплей ILI9340. Многие видели такой или похожий.

Работает нормально. Но скорость полного обновления экрана у него больно уж низкая. Заливка наверное пол-секунды и секунду выполняется.

У NOKIA 108 дисплей на ILI9163C и на нем можно смотреть видео. Да, разрешение всего 160х128, но видео работает без фризов.

В чем подвох? Драйвер быстрее, или в телефон проц мощнее, или библиотеки Ардуино такие медленные?

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Скорее всего, библиотеки по-разному написаны.

Плюс скорость заливки зависит от разрешения.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Ещё от интерфеса зависит - последовательный (медленный) или параллельный (быстрый).

UnrealBlack
Offline
Зарегистрирован: 19.04.2016

Jeka_M пишет:

Ещё от интерфеса зависит - последовательный (медленный) или параллельный (быстрый).

Как определить какой интерфейс используется?

Можно ли его выбрать програмно?

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Явите миру чудо - покажите, с каким дисплеем работаете.

UnrealBlack
Offline
Зарегистрирован: 19.04.2016

Yarik.Yar пишет:

Явите миру чудо - покажите, с каким дисплеем работаете.

http://ru.aliexpress.com/item/1pcs-2-4-inch-New-For-UNO-R2-R3-A137-2-4-TFT-LCD-Shield-Touch/1928136731.html

Так сойдет?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

UnrealBlack пишет:

Так сойдет?

Ну, если б Вы ещё и скетч показали ... а если и библиотеку, которой пользуетесь, то было бы полное счастье.

UnrealBlack
Offline
Зарегистрирован: 19.04.2016
01// IMPORTANT: Adafruit_TFTLCD LIBRARY MUST BE SPECIFICALLY
02// CONFIGURED FOR EITHER THE TFT SHIELD OR THE BREAKOUT BOARD.
03// SEE RELEVANT COMMENTS IN Adafruit_TFTLCD.h FOR SETUP.
04 
05#include <Adafruit_GFX.h>    // Core graphics library
06#include <Adafruit_TFTLCD.h> // Hardware-specific library
07 
08// The control pins for the LCD can be assigned to any digital or
09// analog pins...but we'll use the analog pins as this allows us to
10// double up the pins with the touch screen (see the TFT paint example).
11#define LCD_CS A3 // Chip Select goes to Analog 3
12#define LCD_CD A2 // Command/Data goes to Analog 2
13#define LCD_WR A1 // LCD Write goes to Analog 1
14#define LCD_RD A0 // LCD Read goes to Analog 0
15 
16#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin
17 
18// When using the BREAKOUT BOARD only, use these 8 data lines to the LCD:
19// For the Arduino Uno, Duemilanove, Diecimila, etc.:
20//   D0 connects to digital pin 8  (Notice these are
21//   D1 connects to digital pin 9   NOT in order!)
22//   D2 connects to digital pin 2
23//   D3 connects to digital pin 3
24//   D4 connects to digital pin 4
25//   D5 connects to digital pin 5
26//   D6 connects to digital pin 6
27//   D7 connects to digital pin 7
28// For the Arduino Mega, use digital pins 22 through 29
29// (on the 2-row header at the end of the board).
30 
31// Assign human-readable names to some common 16-bit color values:
32#define BLACK   0x0000
33#define BLUE    0x001F
34#define RED     0xF800
35#define GREEN   0x07E0
36#define CYAN    0x07FF
37#define MAGENTA 0xF81F
38#define YELLOW  0xFFE0
39#define WHITE   0xFFFF
40 
41Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
42// If using the shield, all control and data lines are fixed, and
43// a simpler declaration can optionally be used:
44// Adafruit_TFTLCD tft;
45 
46 
47void setup()
48{
49  tft.reset();
50 
51  uint16_t identifier = tft.readID();
52  tft.begin(identifier);
53 
54  int       a, b,    x1, y1,
55                w = (320),
56                h = (240);
57                  tft.setRotation(1);
58float x2, y2, x3, y3, z2, z3;
59long c ;
60  tft.fillScreen(BLACK);
61   x1 = 160;
62   y1 = 120;
63    for ( a=1; a<=5; a++){
64        for ( b=1; b<=5; b++){
65   delay (500);
66     tft.fillScreen(BLACK);
67   
68    for (int i=0; i<=360; i+=1){
69      
70      z2 = 3.14 * i / 180;
71      z3 = 3.14 * (i+4) / 180;
72      x2 = 160+80*sin(5*z2)*cos(a*z2);
73      x3 = 160+80*sin(5*z3)*cos(a*z3);
74      y2 = 120+80*cos(5*z2)*sin(b*z2);
75      y3 = 120+80*cos(5*z3)*sin(b*z3);
76c = random (16, 65000);
77 
78   
79  tft.drawLine(x1, y1, x3, y3, c);
80  x1=x2;
81  y1=y2;
82   
83   
84    }
85    }
86}
87}
88void loop()
89{
90}

Этот скетч рисует забавные фигурки цветными линиями. На момент написания я особо не вникал в управление цветом и рандомизатор накидал как умел.

Logik
Offline
Зарегистрирован: 05.08.2014

Дисплей нормальный, либа фуфло полное, она и тормозит. Правда и в коде у Вас синусы с косинусами - не образчик скорости. Сильней всего тормозня либы проявляется на заливке всего экрана цветом.

UnrealBlack
Offline
Зарегистрирован: 19.04.2016

Logik пишет:

Дисплей нормальный, либа фуфло полное, она и тормозит. Правда и в коде у Вас синусы с косинусами - не образчик скорости. Сильней всего тормозня либы проявляется на заливке всего экрана цветом.

А другие библиотеки есть для этого дисплея?

На счет "заливка пол-секунды" я слегка перегнул, но все равно до 25-30 фпс там далеко.

Logik
Offline
Зарегистрирован: 05.08.2014

Много всякого есть под луной ;) 

 

Прогнал для интереса код

01  int m1 = millis();
02for(byte i=100;i;i--)
03{
04   tft.fillScreen(0x0020);
05 
06}
07   int m2 = millis();
08   char s[10];
09   ltoa(m2-m1,s,10);
10      tft.drawString(0, 0,s, RED,1);
11delay(3000);      

Получил 7271. Т.е. экран перерисовывается за 72мсек или пошти 14ФПС. Но это на STM32 и самописной быстрой либой. Как илюстрация возможности экранчика.