Go Down

Topic: "Terminal-Style"-Durchlauf auf TFT (Read 1 time) previous topic - next topic

pascalts

Guten Morgen!

Ich habe an meinem Arduino ein TFT-Display (per TFT Libary)und möchte gern im Stile eines Terminals die Daten ausgeben, welche ich per Serial erhalte. Soweit schaffe ich das, ich kann die Daten auslesen und auf dem Display darstellen (der "Text" ist in einem char-Array gespiechert). Auch kann ich die Daten, bis das Display das erste mal voll ist, Zeile für Zeile darstellen. Dann käme der Punkt, an dem alles eine Zeile nach ober rückt... die erste Zeile müsste verworfen werden und die letzte Zeile neu geschrieben werden. Dazu muss jede Zeile neu übertragen werden - nur fällt mir auf Teufel komm raus nichts ein, wie ich das anstelle... Hat jemand sowas schon mal getan?

Über Hilfe wäre ich erfreut! Ich benötige nur ein Grundgerüst... sagen wir für 3 Zeilen. Dann kann ich es umbauen für meine 15 oder 16 Zeilen...

Danke!

gregorss

... nur fällt mir auf Teufel komm raus nichts ein, wie ich das anstelle... Hat jemand sowas schon mal getan?
Gemacht habe ich sowas noch nicht. Aber ich würde wohl so vorgehen, dass ich das Display in Form eines zweidimensionalen Feldes (Array) handhabe. Ungefähr so:

char display[][20];

wobei 20 in diesem Fall die Zahl der Zeichen pro Zeile darstellt und display[0][0] ist das erste Zeichen links oben.

Wenn eine Zeile „nach oben gescrollt" wird, werden die Inhalte der Zeilen (= eine der zwei Dimensionen) „umkopiert". Also so ungefähr:

Zeile[0] bekommt, was in Zeile[1] steht,
Zeile[1] bekommt, was in Zeile[2] steht,
Zeile[2] bekommt, was in Zeile[3] steht,
usw.

Erst wenn alles ordentlich sortiert ist, wird es zum Display übertragen.

HTH

Gregor
Nicht lange fackeln, lass' Backen wackeln! (Seeed)

jurs

#2
Feb 04, 2016, 11:47 am Last Edit: Feb 04, 2016, 11:48 am by jurs
Dann käme der Punkt, an dem alles eine Zeile nach ober rückt... die erste Zeile müsste verworfen werden und die letzte Zeile neu geschrieben werden. Dazu muss jede Zeile neu übertragen werden - nur fällt mir auf Teufel komm raus nichts ein, wie ich das anstelle... Hat jemand sowas schon mal getan?
Ob alle Zeilen neu übertragen werden müssen, hängt von der Art des Displays ab, und ob es einen eigenen Bildschirmspeicher hat und ob und wie Du diesen Bildschirmspeicher ansteuern kannst, oder nicht.

Für Bildschirme mit eigenem Bildschirmspeicher gibt es im allgemeinen Steuerbefehle, um Teile der Anzeige zu verschieben, ohne dass dafür neue Daten übertragen werden müssen. Mit so einem Display wäre es zum Beispiel möglich, den Bildspeicher insgesamt um eine Zeilenhöhe nach oben zu verschieben, und dann einfach nur unten die neue Zeile auszugeben.

Wenn das Display keinen solchen eigenen Bildschirmspeicher oder keine geeigneten Verschiebebefehle für den Bildschirmspeicher hat, mußt Du eben alle Zeilen neu schreiben (was natürlich sehr viel länger dauert).

pascalts

#3
Feb 04, 2016, 12:13 pm Last Edit: Feb 04, 2016, 12:29 pm by pascalts
Okay, also es handelt sich um folgendes Display: http://www.banggood.com/1_8-Inch-Serial-SPI-TFT-LCD-Display-Module-With-Power-IC-SD-Socket-p-909802.html (Mit einem Anderen Platinenlayout, aber sonst gleich). Vielleicht geht da das Hardware-Scrolling? Es sollte ein ST7735 Chip sein...

Wenn ich in dessen Datenblatt sehe http://www.displayfuture.com/Display/datasheet/controller/ST7735.pdf (Seite 83) sehe ich immerhin was zum Thema... "ST14 Horizontal Scroll Status (Not Used) '0'
INVON Inversion Status '1' = On, "0" = Off"

jurs

#4
Feb 04, 2016, 12:43 pm Last Edit: Feb 04, 2016, 01:15 pm by jurs
Wenn ich in dessen Datenblatt sehe http://www.displayfuture.com/Display/datasheet/controller/ST7735.pdf (Seite 83) sehe ich immerhin was zum Thema... "ST14 Horizontal Scroll Status (Not Used) '0'
INVON Inversion Status '1' = On, "0" = Off"
Ich habe mal kurz gegoogelt, und konnte dabei keine Hinweise darauf finden, dass der ST7735 Grafikcontroller ein vertikales Hardwarescrolling unterstützt. Bei dem bleibt Dir wohl nur übrig, die Daten komplett lokal auf dem Arduino zu puffern und das Display jedesmal vollständig neu zu beschreiben.

Ein Grafikcontroller für 1.8" TFTs mit vertikalem Hardwarescrolling scheint der S6D02A1 Chip zu sein.

Aber dann brauchst Du natürlich erstmal ein TFT mit diesem Grafikcontroller und dann eine Library, die das Hardwarescrolling auch unterstützt.

Die etwas mehrdeutige Angabe in dem von Dir gezeigten Link deutet darauf hin, dass Dein TFT über diesen Controller verfügen könnte.

In dem Fall sollte die beiliegende, modifizierte Adafruit-Library, das vertikale Scrollen unterstützten.

Jedenfalls ist das in diesem Youtube-Video so zu sehen:
https://www.youtube.com/watch?v=9wanPViSbaM

pascalts

Nun, das sieht ja schon mal gut aus. Heute nach der Arbeit werde ich das mal probieren... Test & fail würde ich sagen - im schlimmsten Fall passiert nichts.

Habe ja nun schon rausgefunden, dass ich per TFT.println("kjbhlbhöubhöubhubh") auch auf das TFT schreiben kann, das war mir bisher entgangen und würde mein Program auch ein wenig verkürzen...

Ich werde berichten.

Go Up