ST7793, Wie initialisiere ich korrekt?

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • ST7793, Wie initialisiere ich korrekt?

      Ich entschuldige mich für den schlechten Text, ich spreche kein Deutsch, daher verwende ich eine automatische Übersetzung.

      Ich habe einige Displays gekauft. ILI9488 und ST7793.
      ILI9488 konnte ich dank des Codes von Herrn Hkipnik verwenden.

      Aber das ST7793-Display kann ich nicht richtig initialisieren. Ich habe den Code von Arduino verwendet (OPENSMART_TFT und Adafruit_GFX). Aber der Bildschirm ist immer noch unverändert.
      Vielleicht kann mir jemand die richtigen Befehle zur Aktivierung dieses Controllers nennen?

      ST7793.zip
    • Auch das hat Herr Hkipnik schon gelöst.

      Quellcode

      1. Sub Lcd_init()
      2. Lcd_reset = 0
      3. Waitms 150
      4. Lcd_reset = 1
      5. Waitms 150
      6. Call Lcd_write_command(&H11)
      7. Call Lcd_write_command(&H3a)
      8. Call Lcd_write_data(&H55)
      9. #if Lcd_mode = 1
      10. Call Lcd_write_command(&H36)
      11. Call Lcd_write_data(&H00)
      12. #elseif Lcd_mode = 2
      13. Call Lcd_write_command(&H36)
      14. Call Lcd_write_data(&H70)
      15. #elseif Lcd_mode = 3
      16. #elseif Lcd_mode = 4
      17. #endif
      18. Call Lcd_write_command(&H21) '20
      19. Call Lcd_write_command(&H13)
      20. Call Lcd_write_command(&H29)
      21. End Sub
      Alles anzeigen
      Ich habe nur eine Version für Spi-Betrieb. Die Forensuche schon bemüht? Notfalls selber umschreiben.
      Die Commands &H11(Sleep Mode off) + &H29(Display on) alleine sollten schon was zeigen.
    • Schön, dann kann die HW schonmal als Fehler ausgeschlossen werden. :thumbsup:

      Alexander-Dan schrieb:

      der Datenbus ist parallel.
      Weiß Bascom das auch? Daher die Frage nach dem Code. Deine "Lcd_write_command " und "Lcd_write_data" müssen entsprechend angepaßt werden. Oder das Display auf Seriell umgestellt werden. (Falls möglich) Das wäre jedoch dämlich, solange genügend Pinns zur Verfügung stehen. Und Seriell erheblich langsamer läuft . a_448_c66dc889
    • Ja, ich habe den Code umgeschrieben, so dass er den parallelen Datenbus steuert.

      Hier ist das Display selbst: aliexpress.com/item/32956967893.html

      Ich kann den Datenbusmodus nicht ändern, alles ist unter dem Display versteckt.

      111.png


      ps
      Ich werde am Wochenende versuchen, einen Mehrkanal-Logger anzuschließen, die Geschwindigkeit des AVR-Mikrocontrollers zu reduzieren, die Arduino-Firmware zu laden und die Initialisierungssignale zu sehen. Schade, dass der Logger nur 8 Kanäle hat, dann muss ich schummeln und die gleichen Signale dreimal aufzeichnen. 8)
      Auf diese Weise kann ich die Befehle sehen, die der AVR an das Display sendet. a_67_e210de67

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Alexander-Dan ()

    • vielleicht übersetzt die Software meine Nachrichten nicht gut, ich verstehe kein Deutsch und kann die Qualität der Übersetzung nicht überprüfen...

      Meine Entwicklungsplatine und das Display werden mit 3,3 V von einem separaten Regler versorgt.

      Die Beschreibung der Stifte befindet sich auf der Leiterplatte dieses Displays.
      Der funktionierende Code befindet sich in der Arduino-Bibliothek und initialisiert das Display korrekt. Mit dem Arduino-Code funktioniert diese Anzeige korrekt.

      IMG_20220120_110024.jpg
    • Das Init eines ganz anderen chip sieht bei mir etwa so aus

      Quellcode

      1. !sbi portb,6 'set enable
      2. !out portd,r17 '0
      3. Waitus 10
      4. !cbi portb,6 'reset Enable (Übernahme 0)
      5. Waitus 20
      6. !sbi portb,6 'set enable
      7. !sbi portd,5 '2
      8. Waitus 10
      9. !cbi portb,6 'reset Enable (Übernahme 2)
      Die Wait sind laut Datenblatt nicht nötig und werden auch nach dem Init nicht mehr gebraucht. Aber ohne sie weigerte er sich zu funktionieren. Der Spi Code braucht viel länger die einzelnen Daten zu senden, vielleicht ist es Deinem 7793 auch zu schnell ohne Pausen?
    • Ich verstehe Sie. Ja, ich bin mir dieses Problems bewusst. Ich hatte dieses Problem bei der Arbeit mit einem anderen Bildschirm. Ich habe eine kleine Pause NOP direkt in die Bibliothek dieser Anzeige eingefügt, damit die Anzeige korrekt funktioniert.

      Ich änderte die Einstellungen des Mikrocontrollers und stellte eine niedrige Geschwindigkeit von 1 bis 8 MHz ein (fuses), aber das Problem blieb bestehen.
    • Alexander-Dan schrieb:

      und stellte eine niedrige Geschwindigkeit von 1 bis 8 MHz ein (fuses), aber das Problem blieb bestehen
      Sind das nicht die Momente wo man schreiend aus dem Fenster springen will? a_67_e210de67
      Man weiß genau das es viel schneller kann und dennoch kein Mux a_166_29aea317
      Ich bin die Androinos mal durchgegangen (kann ich superschlecht) Ich denke dort wird er wie ein HX8347 behandelt? Sie nutzen dort ca 70Byte fürs Init?

      Quellcode

      1. 0x2E, 0x89, 0x29, 0x8F, 0x2B, 0x02, 0xE2, 0x00, 0xE4, 0x01, 0xE5, 0x10,
      2. 0xE6, 0x01, 0xE7, 0x10, 0xE8, 0x70, 0xF2, 0x00, 0xEA, 0x00, 0xEB, 0x20,
      3. 0xEC, 0x3C, 0xED, 0xC8, 0xE9, 0x38, 0xF1, 0x01,
      4. // skip gamma, do later
      5. 0x1B, 0x1A, 0x1A, 0x02, 0x24, 0x61, 0x25, 0x5C,
      6. 0x18, 0x36, 0x19, 0x01, 0x1F, 0x88, TFTLCD_DELAY, 5, // delay 5 ms
      7. 0x1F, 0x80, TFTLCD_DELAY, 5, 0x1F, 0x90, TFTLCD_DELAY, 5, 0x1F, 0xD4,
      8. TFTLCD_DELAY, 5, 0x17, 0x05,
      9. 0x36, 0x09, 0x28, 0x38, TFTLCD_DELAY, 40, 0x28, 0x3C,
      10. 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0xEF, 0x06, 0x00, 0x07, 0x00,
      11. 0x08, 0x01, 0x09, 0x3F};
      Alles anzeigen
      Wie viele hast Du versucht?
      Meinem 7735 reichen 6 Byte (c11,w120,c3A,d05,c36,dB0,c29) c=command,d=Data,w=waitms
      Das Ili9341 brauchte auch 6 Byte (c11,w10,c29,w10,c36,d88,c3A,d55)
    • Pluto25 schrieb:

      Sind das nicht die Momente wo man schreiend aus dem Fenster springen will?
      Ich weiß, was Sie meinen. ;(

      Ich habe etwa ein Dutzend Optionen geprüft, die von 5-7 Byte bis 25 (wenn ich mich richtig erinnere) reichen.
      Ich kann Ihnen meine Varianten später mitteilen.

      Ich habe versucht, die Parameter, die ich benötige, aus dem Arduino zu ziehen, aber ich kenne die Programmiersprache C nicht und der Code dort ist kompliziert, da er eine universelle Pin-Verdrahtung für verschiedene Versionen der Arduino-Debug-Boards hat. Es gibt verschiedene Ports für verschiedene Produkte. Ich habe ein paar Tage gebraucht, um herauszufinden, wo und was in den 6 Dateien gespeichert ist.
      Ich hasse jetzt C und seine Syntax und seine Idee, alle Befehle in verschiedene Dateien zu verteilen.Ich schreibe seit fast 30 Jahren in Pascal und BASIC-ähnlichen Sprachen und arbeite seit einigen Jahren mit industrielle speicherprogrammierbare Steuerungen.


      Daher ist es für mich sehr frustrierend, das Chaos in wahnsinnig langen Befehlen zu sehen... :evil:
    • Alexander-Dan schrieb:

      in den 6 Dateien
      Ich komm auf 76 Dateien plus 17 Dateien in der Adafruit_TFTLCD_Library-1.0.3 die scheinbar für das init zuständig ist. ?(

      Alexander-Dan schrieb:

      seine Idee, alle Befehle in verschiedene Dateien zu verteilen
      Diese "Unart" kennt Bascom auch (inc,lib,lbx), vermutlich für Leute mit 3 oder mehr Monitoren :D
      Die Pinnbelegung ist jedoch klar? Hier war es sehr hilfreich per Uart einzelne Befehle oder Daten aus zu geben. (z.B. set portb 2E zum testen der Belegung oder CS/WR
      und cmd 36/data 88 zum testen der Routinen und des Displays)