Ich habe ein 1,8" TFT-Farbdisplay von Banggood. Es ist sehr schön mit den lebendigen Farben.
Die Bildschirmaktualisierung ist jedoch langsam. Ich bin durch die SPI-Geschwindigkeit von 1 MHz begrenzt. Daraus ergibt sich eine Aktualisierungsrate von:
160 Pixel x 128 Pixel x 16 Bit/Pixel ÷ 1 MHz = 0,33 s pro Frame
Tatsächlich ist es sogar noch niedriger, da der Teensy LC nach jedem Byte für etwa 1 Zyklus stoppt und zwischen den SPI-Transaktionen ein Overhead entsteht. Es sind also eher 0,5 s pro Frame oder 2 fps, was sehr auffällig ist. Es ist eher eine Wischanimation von links nach rechts (siehe Bild unten).
Also meine Frage ist:
Aktualisieren
Hier ist ein Bild von der Unterseite des Boards.
Nicht viel zu sehen:
Der interessante Teil ist wahrscheinlich zwischen der Platine und dem Display versteckt.
TSCYCR , Serieller Taktzyklus (Lesen) beträgt 150 ns. Das sind 6,6 MHz. Aber erwarten Sie keine Wunder von einem SPI-Display. (Es könnte bei 10 MHz gut funktionieren)
Die Software sollte optimiert werden, um die geringste Anzahl von Pixeln pro Aktualisierung zu aktualisieren.
Es gibt noch ein paar Dinge, die Sie tun können:
- Reduzieren Sie die Farbtiefe.
- Verwenden Sie ein längeres Wort. (zB: 16 statt 8 Bit)
- Stellen Sie sicher, dass die SPI-Routine, falls sie blockiert, so kurz wie möglich ist. Warten Sie nicht, bis der Spi fertig ist, warten Sie, bis der Spi für ein neues Wort bereit ist.
Wenn Sie eine schnelle Anzeige wünschen, besorgen Sie sich eine parallele mit Bildpuffer, auf der Sie Operationen ausführen können.
Ich habe das beste Ergebnis (über 30 fps) mit der TFT_eSPI-Bibliothek https://github.com/Bodmer/TFT_eSPI erzielt , wo der Inhalt in ein Sprite gepuffert wird. Die in der Config-Datei eingestellte Baudrate funktionierte einwandfrei (auf meinem Board). Dieser Code lief auf einem ESP32, der mit dem Display verbunden war.
#define SPI_FREQUENCY 40000000
Es funktioniert jetzt richtig. Auf einem Teensy LC läuft er mit 16 MHz, auf einem Teensy 3.2 mit 18 MHz. Beides sind die maximalen SPI-Taktraten für diese Boards.
Es stellte sich heraus, dass es sich um ein Softwareproblem handelte. Das Hauptproblem war, dass ich DMA nicht richtig deaktiviert hatte. Es würde dann bei der nächsten SPI-Übertragung zu früh eingreifen, dh es würde mit dem ersten Byte der Übertragung beginnen, obwohl es mit dem zweiten Byte beginnen sollte. Dies brachte ein paar Dinge durcheinander und ließ das Gerät auf das letzte zu übertragende Byte warten.
Ich verstehe immer noch nicht wirklich, warum es bei niedrigeren Frequenzen funktionierte, aber bei höheren scheiterte.
Chris Stratton
Kodo
nächster Hack
Kodo
nächster Hack
Kodo
Kuba hat Monica nicht vergessen