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

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
// IMPORTANT: Adafruit_TFTLCD LIBRARY MUST BE SPECIFICALLY
// CONFIGURED FOR EITHER THE TFT SHIELD OR THE BREAKOUT BOARD.
// SEE RELEVANT COMMENTS IN Adafruit_TFTLCD.h FOR SETUP.

#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_TFTLCD.h> // Hardware-specific library

// The control pins for the LCD can be assigned to any digital or
// analog pins...but we'll use the analog pins as this allows us to
// double up the pins with the touch screen (see the TFT paint example).
#define LCD_CS A3 // Chip Select goes to Analog 3
#define LCD_CD A2 // Command/Data goes to Analog 2
#define LCD_WR A1 // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0

#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin

// When using the BREAKOUT BOARD only, use these 8 data lines to the LCD:
// For the Arduino Uno, Duemilanove, Diecimila, etc.:
//   D0 connects to digital pin 8  (Notice these are
//   D1 connects to digital pin 9   NOT in order!)
//   D2 connects to digital pin 2
//   D3 connects to digital pin 3
//   D4 connects to digital pin 4
//   D5 connects to digital pin 5
//   D6 connects to digital pin 6
//   D7 connects to digital pin 7
// For the Arduino Mega, use digital pins 22 through 29
// (on the 2-row header at the end of the board).

// Assign human-readable names to some common 16-bit color values:
#define	BLACK   0x0000
#define	BLUE    0x001F
#define	RED     0xF800
#define	GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF

Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
// If using the shield, all control and data lines are fixed, and
// a simpler declaration can optionally be used:
// Adafruit_TFTLCD tft;


void setup()
{
  tft.reset();

  uint16_t identifier = tft.readID();
  tft.begin(identifier);

  int       a, b,    x1, y1, 
                w = (320),
                h = (240);
                  tft.setRotation(1);
float x2, y2, x3, y3, z2, z3;
long c ;
  tft.fillScreen(BLACK);
   x1 = 160;
   y1 = 120;
    for ( a=1; a<=5; a++){
        for ( b=1; b<=5; b++){
   delay (500);
     tft.fillScreen(BLACK);
  
    for (int i=0; i<=360; i+=1){
     
      z2 = 3.14 * i / 180;
      z3 = 3.14 * (i+4) / 180;
      x2 = 160+80*sin(5*z2)*cos(a*z2);
      x3 = 160+80*sin(5*z3)*cos(a*z3);
      y2 = 120+80*cos(5*z2)*sin(b*z2);
      y3 = 120+80*cos(5*z3)*sin(b*z3);
c = random (16, 65000);

  
  tft.drawLine(x1, y1, x3, y3, c);
  x1=x2;
  y1=y2;
  
  
    }
    }
}
}
void loop()
{
}

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

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

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

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

Logik пишет:

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

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

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

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

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

 

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

   int m1 = millis();
 for(byte i=100;i;i--)
 {
    tft.fillScreen(0x0020);

 }
    int m2 = millis();
    char s[10];
    ltoa(m2-m1,s,10);
       tft.drawString(0, 0,s, RED,1); 
 delay(3000);       

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