Скорость работы дисплеев
- Войдите на сайт для отправки комментариев
Втр, 19/04/2016 - 17:35
Всем привет!
Имеется дисплей ILI9340. Многие видели такой или похожий.
Работает нормально. Но скорость полного обновления экрана у него больно уж низкая. Заливка наверное пол-секунды и секунду выполняется.
У NOKIA 108 дисплей на ILI9163C и на нем можно смотреть видео. Да, разрешение всего 160х128, но видео работает без фризов.
В чем подвох? Драйвер быстрее, или в телефон проц мощнее, или библиотеки Ардуино такие медленные?
Скорее всего, библиотеки по-разному написаны.
Плюс скорость заливки зависит от разрешения.
Ещё от интерфеса зависит - последовательный (медленный) или параллельный (быстрый).
Ещё от интерфеса зависит - последовательный (медленный) или параллельный (быстрый).
Как определить какой интерфейс используется?
Можно ли его выбрать програмно?
Явите миру чудо - покажите, с каким дисплеем работаете.
Явите миру чудо - покажите, с каким дисплеем работаете.
http://ru.aliexpress.com/item/1pcs-2-4-inch-New-For-UNO-R2-R3-A137-2-4-TFT-LCD-Shield-Touch/1928136731.html
Так сойдет?
Так сойдет?
Ну, если б Вы ещё и скетч показали ... а если и библиотеку, которой пользуетесь, то было бы полное счастье.
// 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() { }Этот скетч рисует забавные фигурки цветными линиями. На момент написания я особо не вникал в управление цветом и рандомизатор накидал как умел.
Дисплей нормальный, либа фуфло полное, она и тормозит. Правда и в коде у Вас синусы с косинусами - не образчик скорости. Сильней всего тормозня либы проявляется на заливке всего экрана цветом.
Дисплей нормальный, либа фуфло полное, она и тормозит. Правда и в коде у Вас синусы с косинусами - не образчик скорости. Сильней всего тормозня либы проявляется на заливке всего экрана цветом.
А другие библиотеки есть для этого дисплея?
На счет "заливка пол-секунды" я слегка перегнул, но все равно до 25-30 фпс там далеко.
Много всякого есть под луной ;)
Прогнал для интереса код
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 и самописной быстрой либой. Как илюстрация возможности экранчика.