Forum: Mikrocontroller und Digitale Elektronik spi_lcd_touch Example von ESP-IDF auf CYD unter Vscode/ESP-IDF


von Christoph K. (chriskuku)


Angehängte Dateien:

Lesenswert?

Ich habe folgende Konfiguration:
VScode, ESP-IDF und als Hardware ein CYD (Cheap Yellow Display) und 
versuche, die spi_lcd_touch aus den
1
~/esp/v5.2/esp-idf/examples/peripherals/lcd/spi_lcd_touch

Beispielen zum Laufen zu bekommen.

Konfiguriert sind:
1
#
2
# Example Configuration
3
#
4
CONFIG_EXAMPLE_LCD_CONTROLLER_ILI9341=y
5
# CONFIG_EXAMPLE_LCD_CONTROLLER_GC9A01 is not set
6
CONFIG_EXAMPLE_LCD_TOUCH_ENABLED=y
7
# CONFIG_EXAMPLE_LCD_TOUCH_CONTROLLER_STMPE610 is not set
8
CONFIG_EXAMPLE_LCD_TOUCH_CONTROLLER_XPT2046=y
9
# end of Example Configuration

Die Graphik wird (s. Bild) scheint um 90° gedreht. Die Touchkoordinaten
scheinen auch nicht richtig zu sein. Nehme an, das muß man noch 
kalibrieren. Aber vorrangig ist erstmal, daß die Graphikausgabe richtig 
erscheint. Das Beipiel baut auf lvgl auf. Eigentlich hat mir dieses lvgl 
zuviel Overhead und ist zu kompliziert. Was Einfaches (TFT basierend) 
wäre mir eigentlich lieber.

Hat jemand das Beispiel schon auf CYD laufen?

: Bearbeitet durch User
von J. S. (jojos)


Lesenswert?

da passen vermutlich die Orientierung in lvgl und im Treibercode nicht 
zusammen.
lvgl braucht einen Buffer mit Displaybreite * min. 10 Zeilen. Hier ist 
als Displaybreite die schmale Seite definiert. Der TFT Controller wurde 
aber für landscape initialisiert. Wenn das so sein soll, dann also Höhe 
und Breite in lvgl drehen. Das geht da über defines die in einem config 
header gesetzt werden oder per Compileroptionen übergeben werden.
lvgl braucht zwar viel Platz für Code, kann dafür auch viel. Und ist 
trotzdem schnell weil nur die nötigen Teile einer Darstellung 
aktualisiert werden.

von Christoph K. (chriskuku)


Lesenswert?

Danke, J.S.. Habe inzwischen auf dem Kanal auf Discord erfahren, daß das 
CYD, das ich habe (cyd2usb), einen anderen Displaytyp (nicht ILI9341 und 
auch nicht den GC9A01) braucht, sondern ST7789. Das Konfigurationsmenu 
bietet aber nur die beiden Ersteren an. Jetzt überlege ich, ob ich 
lerne, wie man den Konfigurator konfiguriert, oder ob ich die Treiber 
händisch in das Projekt hineinkopiere. Alles nicht so einfach.

: Bearbeitet durch User
von Christoph K. (chriskuku)


Angehängte Dateien:

Lesenswert?

Es stellt sich aber heraus, nachdem ich den ST7789 Treiber in dem 
Beispiel zum laufen bekommen habe, daß das nicht den Fehler behebt. War 
also Irrweg meinerseits erst mal. Werde mal in die lvgl-Initialisierung 
schauen, wie Du vorschlägst.

EDIT: läuft:
1
In der spi_lcd_touch_example_main.c:
2
3
// The pixel number in horizontal and vertical
4
#if CONFIG_EXAMPLE_LCD_CONTROLLER_ILI9341
5
#define EXAMPLE_LCD_H_RES              320
6
#define EXAMPLE_LCD_V_RES              240

(neues Foto, weil ich noch eine Farbinversion von vorherigen 
Experimenten drin hatte)

: Bearbeitet durch User
von Christoph K. (chriskuku)


Angehängte Dateien:

Lesenswert?

Ich setze hier mal auf diesen Thread auf, weil Thema noch stimmt und die 
äußeren Voraussetzungen dieselben sind.

Auch wenn lvgl einen ziemlichen Overhead mit sich bringt, so wollte ich 
doch damit erst mal weitermachen.

Zunächst einmal wollte ich den Hintergrund der Demo-App ändern.

Hatte dazu den Code etwas abgeändert:
1
  ESP_LOGI(TAG, "Display LVGL Meter Widget");
2
    /*Change the active screen's background color*/
3
   //  BGR (not RGB) 
4
    //lv_obj_set_style_bg_color(lv_scr_act(), lv_color_hex(0x101010), LV_PART_MAIN);
5
    //lv_obj_set_style_bg_color(lv_scr_act(), lv_color_hex(0x202000), LV_PART_MAIN);
6
     lv_obj_set_style_bg_color(lv_scr_act(), lv_color_hex(0x121900), LV_PART_MAIN);
7
    //example_lvgl_demo_ui(disp);
8
    //lvgl_my_demo();
9
10
11
     while (1) {
12
        // raise the task priority of LVGL and/or reduce the handler period can improve the performance
13
        vTaskDelay(pdMS_TO_TICKS(10));
14
        // The task running lv_timer_handler should have lower priority than that running `lv_tick_inc`
15
        lv_timer_handler();
16
    }
17
}

Mit dieser RGB-Einstellung gibt es auf dem Display die in Bild 1 
ersichtlichen Streifen. 0x101010 (dunkleres grau) gibt einen häßlichen 
dicken Streifen durch die Bildmitte.

Im cyanfarbenen flackern die Störungen periodisch (vielleicht im 10ms 
Takt?) Der graue Streifen flackert am Rand auch leicht. Ich weiß jetzt 
nicht, ob das Display dauernd beschrieben wird. Kann natürlich am 
unterliegenden freeRTOS liegen.

Ich versuche mal, das Vscode-Projekt hochzuladen.

von Christoph K. (chriskuku)


Angehängte Dateien:

Lesenswert?

Versuch, das Projekt hochzuladen... scheint geklappt zu haben.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.