2,4" TFT LCD Touch Display MicroPython Bibliothek anhand eines Datenblatts umschreiben

  • Hallo,

    Edit: Dieser Beitrag ist noch nützlich für die Informationen des Displays. Ansonsten geht es ab #2 weiter. Ich möchte das Display an den ESP32 anschließen.

    ich dachte nach dem letzten Display, komme ich dieses mal selbst zugerecht, die Enttäuschung nach 5 Stunden ist groß.

    Heute kam dieses Display. Das Display hat zwei Chips. Für die Anzeige selbst ILI9341 und für die Touchfunktion XPT2046.

    AZDelivery hat normal immer Datenblätter und Anschlussbeschreibungen auf der Homepage, bei mir ist das aber leider nichts zum runterladen:

    Dann bietet AZDelivery zum Glück kostenlose Bücher für ihre Produkte an. Habe ich heruntergeladen, geöffnet und gelesen "Dieses Buch wird gegenwärtig überarbeitet und ist in Kürze wieder zur Verfügung" und mehr steht nicht drin. Sehr ärgerlich :@

    Ich habe lange gesucht und viele ähnliche Displays gefunden, aber wieder mit anderen Bezeichnungen der Pins. Bei meinem letzten Display hat mir @__deets__ geraten "Du machst dir zu viel Kopp" als ich wegen den Bezeichnungen gefragt habe. Ich meine das habe ich so weit auch verstanden. Jetzt kommt das Aber.

    Ich habe folgende Pin-Bezeichnungen am Display, die noch offen sind:

    LCD_WR

    LCD_RD

    LCD_D0

    LCD_D1

    LCD_D2

    LCD_D3

    LCD_D4

    LCD_D5

    LCD_D6

    LCD_D7

    SD_SS

    SD_DI

    SD_D0

    SD_SCK

    Das Display hat einen SD-Karten Slot. Ich weis nicht ob ich diesen brauche, aber ich denke die SD Bezeichnungen werden dafür da sein.

    Was sollen mir die LCD-Pins sagen? Woher weis ich was die für einen GPIO Pin benötigen?

    Ich möchte das Display an einen Pi-zero anschließen und damit erste Erfahrungen sammeln.

    Könnt ihr mir bitte weiter helfen?

    Gerade gefunden, dass das Display nicht über SPI angesteuert wird und von daher nicht für den Pi geeignet ist?

    Eventuell könnte ich es noch für den ESp32 verwenden?

    Vielen Dank und Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

    2 Mal editiert, zuletzt von Dennis89 (19. Dezember 2020 um 19:03)

  • 2,4" TFT LCD Touch Display MicroPython Bibliothek anhand eines Datenblatts umschreiben? Schau mal ob du hier fündig wirst!

  • Ich versuche nun verzweifelt das Display an den ESP32 anzuschließen.

    Bis jetzt habe ich es so:

    LCD_RST -> PIN19

    LCD_CS -> PIN 16

    LCD_RS -> PIN 5

    Abgesehen von der Stromversorgung ist der Rest noch offen. Ich nutze Micropython und habe dazu dieses Display Modul und für die Touch-Funktion das hier ausgewählt.
    Bevor es an die Touch-Funktion geht, will ich erstmal etwas auf das Display schreiben. Bei den Display-Modulen sind Beispiel-codes dabei, hier ein Ausschnitt:

    Code
            spi = SPI(1, baudrate=40000000, sck=Pin(23), mosi=Pin(22))
            display = Display(spi, dc=Pin(5), cs=Pin(16), rst=Pin(19))

    Meine drei Angeschlossenen Pins habe ich schon angepasst, aber was an meinem Display ist MOSI und SCK?

    Wenn man gar keine Ahnung hat, wird man auch nach stundenlangen Suchen nicht schlauer.

    Danke für eure Hilfe.

    Edit: Hier noch das Datenblatt des Displays, da sind die Pins auch beschrieben, nur mir sagt das gar nichts und brachte mir beim googln auch nichts.

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Pass auf, dass Du das Display auf 3.3V einstellst, der ESP verträgt keine 5V an seinen GPIO.

    Hier findest Du schon mal etwas, vielleicht kannst Du es nutzen: Arduino Project Hub

    Ach so,

    Micropython

    wirst Du Dir eher abschmatzen können, wenn Du nicht zufällig etwas vorbereitetes findest.

  • Hallo und Danke für deine Antwort.

    Pass auf, dass Du das Display auf 3.3V einstellst, der ESP verträgt keine 5V an seinen GPIO.

    Mein ESP32 Board hat einen GPIO-PIN mit der Beschriftung 5V von dort geht ein Kabel zum Display mit der Beschriftung 5V. Dann hat das ESP32 Board und das Display jeweils einen Pin mit der Beschriftung 3V3 diese habe ich auch verbunden, genauso wie die Masse. Ist das nicht richtig?

    Der Link hilft mir leider nicht weiter, es ist zwar beschrieben was die Pins bedeuten, das steht auch in meinem Datenblatt, nur ich kann damit nichts anfangen. In meinem Code-Ausschnitt muss ich die Pins für 'sck' und 'mosi' eintragen. Diese Bezeichnungen stehen aber nicht auf meinem Display, statt dessen sind noch diese Pins unbelegt:

    LCD_WR

    LCD_RD

    LCD_D0

    LCD_D1

    LCD_D2

    LCD_D3

    LCD_D4

    LCD_D5

    LCD_D6

    LCD_D7

    Ich weis das WR der 'write controll Pin' ist und RD der 'read controll Pin'. Die übrigen sind 8-Bit data bus Pins. Mein Problem ist das ich diese Informationen für den Anschluss des Displays nicht anwenden kann und auch nicht weis welche Pin-Nummer danach in meinem Code für bspw. 'sck' einzutragen ist.

    wirst Du Dir eher abschmatzen können, wenn Du nicht zufällig etwas vorbereitetes findest.

    Hier auf Github habe ich Module für das Display und Micropython gefunden.

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Ich guck mir ja Videos aus Prinzip nicht an, beim durchscrollen sehe ich doch das:

    Das scheint mir, als obs beschrieben wäre. Aber ganz ehrlich, ich kann Dir da momentan nur wenig weiterhelfen.

  • Danke für deine Antwort.

    Ich hatte mir das Video auch angeschaut und habe versucht das zu Übertragen. Allerdings sind die Pins auf meinem Display anders bezeichnet. 'IRQ' ,'DIN' zum Beispiel habe ich nicht. Mit Elektronik habe ich auch noch nie wirklich was zu tun gehabt, um das irgendwie logisch übertragen zu können.

    Auf diese GitHub Seite bin ich gekommen, da mein Display die gleichen Module ILI9341 und XPT2046 hat.

    Trotzdem Danke für deine Bemühungen. :thumbup:

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Moin Dennis89,

    Für die Anzeige selbst ILI9341

    hast du mal in das Datenblatt des IC's nachgesehen, ob das Teil den 4-Pinmodus kann. So wie die Displays mit HD44780.

    Wenn ja, dann könnte man eine Wandlerplatine mit PCF8574 drauf. Macht dann i2C- 8Kanal.

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Hey Bernd666, Danke für deine Antwort.

    Ich habe das Datenblatt mal mit den Begriffen "Pin", "four", "4"und "modus" durchsucht, das brachte leider kein Ergebnis mit dem man auf einen 4-Pinmodus schliessen könnte.

    Da dieser User ein Display mit ILI9341 und XPT2046, wie mein Display auch hat, an einen ESP32 angeschlossen hat, muss das doch auch übertragbar sein. (?)

    Edit: Habe hier (endlich) ein Schaltbild gefunden, das meinem Display entspricht. So habe ich es angeschlossen. Allerdings hat mein ESP32-Board kein TX2 und RX2, dafür TX und RX. Wenn dann alles angeschlossen ist, kann Thonny und Arduino IDE sich nicht mehr mit dem Board verbinden. Wenn ich nur die zwei Kabel von TX und RX trenne, dann geht die Verbindung wieder. Weis einer was da los ist und wie das anzuschließen ist?


    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

    Einmal editiert, zuletzt von Dennis89 (19. Dezember 2020 um 21:09)

  • Die Verbindung zum Host geschieht nunmal per UART - und du hast den jetzt doppelt belegt. Das geht halt nicht. Der ESP *hat* aber 3 UARTS (0, 1, 2). UART2 ist zb auf GPIO16/17 verfuegbar.

  • Wieder einmal Hallo @__deets__ :)

    Unglaublich was du alles weist , vielen Dank:thumbup:

    Das bedeutet die Verbindung zwischen Laptop und ESP32 läuft über UART 0 und wenn ich die Pins LCD_D0 und LCD_D7 des Displays an die GPIO 16 und 17 anschliesse, kommuniziert mein DIsplay mit dem ESP32 über UART 1?

    Edit: Ich wollte noch erwähnen, dass wenn ich das Display wie beschrieben angeschlossen habe, die Verbindung zwischen ESP32 und PC wieder vorhanden ist.

    Wenn ja, dann muss ich in den Beispiel-Skripten den "mosi" und "sck" Pin angeben. Davon habe ich leider keine Bezeichnung auf den Displaypins, woher weis ich welcher Pin das ist?

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Nicht UART1. UART2.

    Und MOSI und SCK gehoeren doch zum SPI-Interface, und sollten von dem UART nicht betroffen sein. Da gibt es dann doch keine Abweichung, oder was ist da das Problem?

  • Sorry, da habe ich mir nur vertippt, UART 2 meinte ich.

    Ich habe mein Display jetzt so angeschlossen, mit der Ausnahme, dass der LCD_D0 Pin des Displays auf GPIO17 angeschlossen ist und der LCD_D7 Pin des Displays auf GPIO 16 angeschlossen ist.

    Ich möchte das Display mit micropython steuern und habe auf GitHub diese Bibliothek dazu gefunden. Ich habe die ILI9341.py und XPT2046.py Dateien schon auf dem ESP32. DIe Erste ist für die Display-Anzeige, die Zweite ist für die Touchfunktion.

    Ich würde gerne eine von den Demo-Dateien auf dem ESP32 abspielen. In diesen Dateien muss man die Pinbelegung angeben. Hier der Teil der Demo Datei:

    Python
    def test():
        """Bouncing box."""
        try:
            # Baud rate of 40000000 seems about the max
            spi = SPI(1, baudrate=40000000, sck=Pin(14), mosi=Pin(13))
            display = Display(spi, dc=Pin(14), cs=Pin(27), rst=Pin(26))
            display.clear()

    'rst' und 'cs' kann ich angeben, diese Bezeichnung habe ich so auf an meinen Display-Pins. 'dc' steht nicht auf dem Display. In einem anderen Thema hast du mir mal gesagt 'dc' ist 'rs' und ein Pin auf dem Display wurde mit 'rs' bezeichnet. Somit kann ich diese drei Pins in dem Code angeben.

    Mein Problem ist jetzt, das ich nicht weis was ich für 'sck' und 'mosi' angeben soll?

    Auf Github wird das Display auch mit einem ESP32 gesteuert. Also passen die Demo-Dateien nicht zur UART-Verbindung zwischen Display und Microcontroller?

    Jetzt habe ich gerade einige Fragezeichen im Kopf und ich weis jetzt nicht wie ich weiters vorgehen soll. Andere Bibliotheken? Das Display anders anschliessen? Der oben gezeigte Anschlussplan war der einzigste den ich zu diesem Display gefunden habe.

    Danke und Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Hallo Thomas H Danke für deine Links, diese Seiten hatte ich schon durch. Leider helfen sie mir für mein beschriebenes Problem nicht weiter. Vielleicht habe ich auch "nur" eine Denkblockade oder übersehe etwas offensichtliches.

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Ich habe mir das nochmal angeschaut, und so wie ich aus deinem Link das hier lese "You can also connect the ILI9341 using only 4 IO pins (not this model), but the refresh/painting speed is not comparable.", dann gehe ich davon aus, dass es eben genau nicht moeglich ist, dieses Display im seriellen Modus zu betreibenn. Du musst also eine parallele Ansteuerung herstellen. Damit sind die Pins quasi egal, sie muessen nur frei sein.

  • Danke für deine Antwort.

    Das bedeutet, dass ich für sck und mosi jeweils eine freie Pin-Nummer in das Programm eintrage?

    Das habe ich jetzt gemacht und habe die Pins ausprobiert, die noch frei sind (sind ja nicht mehr viele) und erhalte immer diese Meldung:

    Code
    E (409340) spi: SPI2 already claimed by spi master.
    Traceback (most recent call last):
      File "<stdin>", line 109, in <module>
      File "<stdin>", line 81, in test
    OSError: SPI host already in use

    In diesem Code-Ausschnitt:

    Code
        try:
            # Baud rate of 40000000 seems about the max
            spi = SPI(1, baudrate=40000000, sck=Pin(15), mosi=Pin(2))
            display = Display(spi, dc=Pin(14), cs=Pin(27), rst=Pin(26))
            display.clear()

    habe ich aus Verzweiflung das die '1' gegen eine '2' getauscht. Ich dachte damit kann ich auf SPI2 zugreifen. Danach kamen Fehlermeldungen und ich konnte mit Thonny nicht mehr auf den ESP32 zugreifen. Er ist jetzt neu geflasht, das Display ist angeschlossen wie in der Abbildung aus dem Link und 'dc', 'cs' und 'rst' sind richtig eingetragen.

    Egal welche nicht besetzten Pins ich für 'sck' und 'mosi' eintrage, ich erhalte die oben gezeigte Fehlermeldung. Die Zeile 81 ist genau die in der 'sck' und 'mosi' definiert werden.

    Habe ich dich jetzt falsch verstanden oder mangelt es an logischem denken bei mir?

    Was ich auch nicht verstehe, ich habe, ohne die Stromversorgung, 13 Pins angeschlossen und in dem Programm werden nur 3 bzw. 5 definiert. Woher weis der Rest was er zu tun hat?

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Egal welche nicht besetzten Pins ich für 'sck' und 'mosi' eintrage, ich erhalte die oben gezeigte Fehlermeldung. Die Zeile 81 ist genau die in der 'sck' und 'mosi' definiert werden.

    Du kannst nicht einfach irgendwas da eintragen. ESP haben nur einen Hardware SPI (GPIO12/13/14/15 + evt. weitere CS), weitere SPI Bus musst Du in Software nachstellen. Mehrere Geräte am SPI bekommst Du per zusätzlichen CS (GPIO ist hier egal) angesprochen. Ist das in Deinem Programm überhaupt so angelegt?

    Edit: Ich war der irrigen Annahme, es handele sich um einen ESP8266. Dieser besitzt tatsächlich nur einen HW SPI.

  • Der ESP32 hat zwei SPI-Busse - HSPI und VSPI. Manchmal ist einer davon mit einem SPI-Ram vorbelegt, aber das ist bei dir glaube ich nicht der Fall.

    Aber SPI kommt hier GARNICHT ins Spiel. Das ist der Punkt. Das Interface ist ein 8-Bit-Parallel Interface, mit 2 oder so Steuerleitungen. Damit musst du also komplett anders umgehen. Code, der SPI vorraussetzt, wird damit nicht funktionieren. Du kannst den bestenfalls umschreiben auf Parallel, wenn er gut genug abstrahiert ist, weil er zB sowas wie self.set_register(register, value) hat - das kann man dann umschreiben auf parallel, und dem Aufrufer ist das egal.

  • Vielen Dank für die Bemühungen.

    Wenn ich ehrlich zu mir selbst bin, glaube ich nicht dass ich in der Lage bin das Programm umzuschreiben. Wenn ich die Suche mit "register" über den Code laufen lasse, wird nichts gefunden.

    Wenn ich das richtig sehe habe ich jetzt 3 Optionen. Code umschreiben, nicht Micropython nutzen oder ein anderes Display besorgen?

    Wenn ich ein Touch-Display für das ESP32-Board haben möchte und ich es mit Micropython ansprechen möchte, dann muss ich beim Kauf auf SPI achten?

    Wenn ich mit allem richtig liege, werde ich mich nach einem anderen Display umschauen müssen. Ich muss noch so viel Python lernen, da macht es für mich kein Sinn planlos eine andere ganz unbekannte Sprache anzufangen.

    Ärgerlich da ich beim Kauf so unachtsam war.

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Die Methode nennt sich write_cmd statt register, aber macht prinzipiell schon genau das was ich meine. Du musst da halt das Datenblatt tief studieren, wie ein Byte da über die Leitung gehoben wird.

    Nachtrag: Das Interface ist auch nicht besonders schwierig. Ab Seite 27 wird das wie ich finde sehr gut beschrieben. Man legt das gewuenschte Byte an D0-D7 an, und toggelt WR. RS (im Datenblatt D/CX) bestimmt, ob es sich um ein Kommando-Byte oder um ein Datenbyte handelt. Und das war's auch schon. CS kann die ganze Zeit LOW bleiben, und RST muss mal zu Beginn auf L gezogen und dann auf H bleiben.

    Einmal editiert, zuletzt von MistyFlower59469 (23. Dezember 2020 um 13:48)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!