Hallo,
ich brauche eure Hilfe,
bekomme das Dispay mit dem Chip ST7789V nicht ans laufen.
Den u.g. Initialisierungscode kommt vom Displayliefgerant.
Ich möchte zum Anfang einfach mal nur ein paart Pixels setzen.....
Ja ich weiß, es gibt libs, aber ich möchte erst mal sehen, ob das Display überhaut etwas macht.
Die Hintergrundbeleuchtung geht an. Sonst passiert aber nichts auf dem Display. Hier der Code:
RAMWR ist ein Command und sollte nicht als Data gesendet werden.
Ich bin gerade fertig mit dem Schreiben eines Treibers für einen ST7735, der braucht als Initialisierung nur: SLPOUT, INVOFF, DISPON, NORON.
Deine
1
lcdput (0xe0 ,0xd0); // Resister, Data
2
…
Orgie ist höchstwahrscheinlich sowohl unnötig, als auch fehlerhaft.
Nach GMCTRP1 und GMCTRP2 Command kommen normalerweise ganze Säcke voller Daten. Am Stück! Nicht Byteweise.
Ist das dann so richtig:
_CS auf low
0xb2 als command senden
5 Byte (0x0c....0x33) als Data senden
_CS auf high
Zumindest beim ST7735 muss CS nicht dynamisch gesetzt werden.
Es reicht wenn man CS zum Anfang des Jahres auf Low setzt und im Anschluss kontinuierlich CMDs und DATA sendet. Gegen Silvester dann CS wieder auf High.
Zumindest beim ST7735 muss CS nicht dynamisch gesetzt werden.
Es reicht wenn man CS zum Anfang des Jahres auf Low setzt und im
Anschluss kontinuierlich CMDs und DATA sendet. Gegen Silvester dann CS
wieder auf High.
Das kann man zwar so machen, spart aber kaum Zeit und erschwert im Fehlerfall die Fehlersuche ganz erheblich, da CS nicht nur als ChipSelect dient, sondern auch die Controller-interne State-Machine in einen definierten Zustand zwingt.
Daher ist es best-Practice CS lt. Datenblatt zu verwenden.
Jaaaaa, ich weiß worauf du hinaus willst. Das Problem ist aber das man erst den kompletten SPI FIFO bzw. dessen Entleerung abwarten muss bevor man CS hoch hebt. Das kann sich als durchaus lästig erweisen wenn man etwas wirklich Schnelles bauen möchte.
Deshalb lohnt es sich über einen Zwischenweg nachzudenken, eine komplette Zeichenoperation bestehend aus einem Sack voller CMDs und DATA zusammen zu fassen und diese Sequenz in /CS und CS zu kapseln.
Das Beste aus beiden Welten sozusagen.
Hallo,
vielen Dank für die bisherigen Hinweise, die ich versucht habe umzusetzen.
Hier ist der neue Code. Leider immer noch keine Reaktion im Display....
Bitte um weitere Hinweise.
Das Problem ist aber das man
erst den kompletten SPI FIFO bzw. dessen Entleerung abwarten muss bevor
man CS hoch hebt.
Hättest du das nicht schon letzte Woche schreiben können? ;-)
Hab gerade angefangen einen Textausgabe für ILI9341 auf einem STM32 zu schreiben (gibts schon, aber ich will es selber lernen).
Dabei bin ich über 2h genau an diesem Problem festgehangen: Auf dem DSO habe ich mir den Anfang der SPI-Kommunikation angesehen - passt eigentlich alles.
Bis irgendwann mal zum Ende der Sequenz gescrollt habe und dort auf CS gestoßen bin.
Die Klammern gehören bei Funktionen immer direkt ohne Leerzeichen an den Namen.
Wirst du nach Zeichanzahl bezahlt? Schon mal was von einem Array gehört?
Das löst zwar nicht dein Problem, verbessert deinen Programmierstil aber sichtbar. Eher so.
Danke Falk.
Ja stimmt. Wollte nur erst mal "quick and dirty" sehen, ob das Display überhaupt etwas macht, um Layoutfehler auszuschließen.
Jetzt ist es ansprechbar, dann kommt Optiomierung.
Ist aber Unfug! Man muss nicht für jedes Byte einen komplette CS-Zyklus durchlaufen, schon gar nicht, wenn du bei jedem CS Wechsel 1ms wartest!
Warum machst du nicht das Offensichtliche?
Habe auch die Wartezeit von 1 ms auf 20us reduziert.
Naja, ein Workaround. Was für einen Controller hast du? Und an welcher Schnittstelle hängt dein LCD? SPI oder UART im SPI Modus? Man kann das Ende der Übertragung in einem Register abfragen, dann ist die Wartezeit immer minimal.
Komisch ist, dass die Sache mit dem !SPI2STATbits.SPITBE (Transmit
Puffer nicht Empty) nicht funktioniert..
Der Puffer/FIFO kann durchaus schon leer sein während die Hardware noch die letzten Bits raus schiebt. Beim RP2040 nehme ich gerne das SPI busy flag um das zu erkennen.
Der Puffer/FIFO kann durchaus schon leer sein während die Hardware noch
die letzten Bits raus schiebt.
Ja das ist genau so eine Falle, in die man reintappen kann.
Und wenn man dann wie beim Display kaum Diagnosemöglichkeiten hat und LCD einfach keine Reaktion von sich gibt, kann das schnell frustrierend werden.....