Dann häng' einen Logikanalysator dran und vergleiche. Wenn Du SPI via
Bitbang machst, sollte exakt dasselbe passieren wie bei hw-spi.
Tut es das nicht, ist was faul. Und darauf wird das Display reagieren.
... und ich habe schon "üble" Displays gehabt, die nicht schnell genug nach einem abgeschlossenen SPI-Transfer wieder bereit waren und ich mußte hier 2 "NOP" danach einfügen (leider). Hatte ich mit ILI9341 und ILI9225.
Ich würde zuerst prüfen, ob bei HW-SPI der Takt (SCK) nicht zu hoch eingestellt ist.
(Wenn ich mich richtig erinnere, kann der ili9341 lt. Datenblatt max. 10MHz)
Ich schaue in das Datenblett, wenn ich spezielle Informationen benötige - z.B. Spi-Mode.
Der code geht ja mit anderen ili-Displays, ist also in Ordnung.
Ich brauche das display nur für die Anzeige von Daten. Das geht auch per bitbang und die Hintergrundfarbe ist ziemlich egal.
Ich werde also den code mit einem anderen lcd-modul - wegen des schnellen hw-spi - weiterentwickeln und - wenn alles fertig ist - auf das bitbang-modul umstellen.
Ich meine damit, dass Du einfach mal das Datenblatt liest...
Ich schaue in das Datenblett, wenn ich spezielle Informationen benötige
z.B. Spi-Mode.
Und ich auch, wenn etwas nicht funktioniert.
Der code geht ja mit anderen ili-Displays, ist also in Ordnung.
Offensichtlich ja nicht.
Schau Dir einfach mal an, was ich gepostet habe.
Im Register 0Bh (RDDMADCTL) gibt es nämlich Bits, die das Verhalten des Displays je nach Verschaltung einstellen.
Zum einen ist das die Orientierung, die ja bei Dir nicht wie gewünscht ist sowie die Farbe.
Für letzteres also das Bit D3:
0 RGB (When MADCTL B3=’0’)
1 BGR (When MADCTL B3=’1’)
Für Ersteres die Bits D6 sowie D7.
Und zum Schluß nochmal die Grundregel schlechthin:
RTFM!
Ich würde zuerst prüfen, ob bei HW-SPI der Takt (SCK) nicht zu hoch
eingestellt ist.
(Wenn ich mich richtig erinnere, kann der ili9341 lt. Datenblatt max.
10MHz)
Ja, so steht das tatsächlich im DB.
Aber: ILI9341, die weitaus mehr abkönnen, scheinen doch sehr verbreitet zu sein. So verbreitet, dass diverse Hersteller solcher Displays in den jeweils gelieferten Libs eben diese teils deutlich höheren Taktraten standardmäßig benutzen. Das würden sie nicht tun, wenn das zu einer hohen Rücklaufer-Quote führen würde...
Beim Schreiben sind z.B. 80MHz als Standard recht verbreitet anzutreffen, wenn die Quelle ein (richtiger) Raspi ist.
Ich selber benutze solche TFTs allerdings meistens an einem Pi Pico, aber auch da ist mir noch kein Display untergekommen, was die 80Mhz schreibend nicht abkann. Zum Lesen allerdings muss man deutlich runtertakten, sonst kommt nur Gurkensalat raus. 40Mhz ist auch immer noch etwas kitzlig (gelegentliche Einzelbitfehler im MSB), deswegen benutze ich zum Lesen nur 20MHz. Das läuft stabil.
Im Register 0Bh (RDDMADCTL) gibt es nämlich Bits, die das Verhalten des
Displays je nach Verschaltung einstellen.
die werden in der ini alle abgearbeitet und richtig eingestellt. Da gehe ich wegen einem abweichend arbeitenden ili - das mglw. irgendwas anderes ist- nicht ran. Das kostet Zeit und bringt eh nichts. Die ini ist genau wie im Datenblatt beschrieben. Sonst würden die anderen ilis nicht funktionieren.
perfekte Darstellung auf dem lcd - nur in blau/rotation/bitbang
Zeig den Code der Display Initialisierung.
Wenn es so wie oben beschrieben nicht klappt könnte eventuell die Einstellung genau dieser Parameter im einen Fall schiefgehen, die Parameter stehen in dem bereits oben erwähnten MADCTL. Eine mögliche Ursache dafür wäre dass das unmittelbar davor verschickte Kommando im Controller noch nicht fertig ist und daher das Schreiben von MADCTL ins Leere läuft.
In meiner ersten Anwort in diesem Thread habe ich Dir geraten, das ganze mit einem Logikanalysator anzusehen.
Denn ganz offensichtlich IST da ein Unterschied.
Deine Macros enthalten keinerlei Zeitbezug, d.h. die rauschen so schnell durch, wie es der Controller halt hinbekommt. Das wiederum dürfte einen sehr stark vom Takt der Hardware-SPI-Schnittstelle abweichenden Takt zur Folge haben.