Skocz do zawartości

ESP32 IPS 18bit, a LVGL 16bit


Pomocna odpowiedź

Napisano (edytowany)

Mam taki problem, 

Mam sobie wyświetlacz 3.5” na ILI9488 480x320PX IPS który uruchamiam bez problemu na bibliotece LovyanGFX na ESP32S3 (framework Arduino).

I do tego miejsca jak ustawiam kolory na 18bit to jest bajka, wyświetlacz pięknie wyświetla grafikę.

Ale….. instaluje też LVGL 8.4.0, i wtedy czar pryska bo ta sama grafika puszczona przez LVGL jest pozbawiona dynamiki, kolory są bledsze. Problem idealnie pokazuje grafika poniżej.
Problemem jest pewnie to że LVGL jest albo 16/24/32bit i przy obu ustawieniach od razu jest kaszana z kolorami (wyglada jak negatyw z gigantycznym kontrastem).
Przestawienie setColorDepth(16) w wyświetlaczu rozwiązuje problem ale kolory bledną (bo nadmiar jest zamieniany na zera).

7c04e319-3535-4393-8cd2-9e8a26492d15.thumb.jpg.dab9aea9f1e86fe449a3da5be88b4a96.jpgdee87b8f-efb9-4dc5-ab7a-b601ca600c13.thumb.jpg.4926063dca35342185e582bda22ebddd.jpg

 


Szukam  porady od was, w czym może być problem i czy da się go rozwiązać?

main.ino
LGFX_Config.hpp
lv_conf.h

Edytowano przez Bullseye
Aktualizacja.

Jak komplikujesz projekt? W esp idf są ustawienia kolorów w component config, najpewniej albo musisz zamienić rgb na bgr(?) albo zmienić inny parametr chyna RGB888 lub 656

3 godziny temu, _LM_ napisał:

Jak komplikujesz projekt? W esp idf są ustawienia kolorów w component config, najpewniej albo musisz zamienić rgb na bgr(?) albo zmienić inny parametr chyna RGB888 lub 656

Arduino framework więc nie IDF 🙂

pytam o zmianę Lvgl by dostosować do rgb666 wyświetlacza, bo on nie ważne co się na niego poda będzie przerabiać pod swoje więc albo utnie końcówki, albo doda zera - więc musi być 18bit i tyle.

(edytowany)

  

Szkoda że nie mam tego wyświetlacza bo bym przetestował aha i niema być RGB 666 a 565

Porównaj sobie ten kawałek kodu:
 

/* Display flushing */

void my_disp_flush (lv_display_t disp, const lv_area_t area, uint8_t *pixelmap)

{

    uint32_t w = ( area->x2 - area->x1 + 1 );

    uint32_t h = ( area->y2 - area->y1 + 1 );


    if (LV_COLOR_16_SWAP) {

        size_t len = lv_area_get_size( area );

        lv_draw_sw_rgb565_swap( pixelmap, len );

    }


    tft.startWrite();

    tft.setAddrWindow( area->x1, area->y1, w, h );

    tft.pushColors( (uint16_t*) pixelmap, w * h, true );

    tft.endWrite();


    lv_disp_flush_ready( disp );

}

 

Edytowano przez _LM_
  • Lubię! 1

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...