Ich versuche ein 1.77'' TFT anzusteuern. Es ist ein 160*128 64k Display von AzDelivery. Lt Doku ist ein ST7735S Controller verbaut. Die Initialisierung mache ich gleich wie die Adafruit lib, die SPI Ansteuerung per HW SPI. SPI sollte korrekt implementiert sein da das Display auf DISPON reagiert und ich den Display Inhalt z.B mit INVON invertieren kann. Ich bekomme es allerdings nicht hin in den Displayspeicher zu schreiben. Das Display zeigt nur zufällig gesetzte Pixel an egal was ich mache. Lt der Adafruit Terminologie sollte es ein sog. GREENTAB Display sein und tatsächlich habe ich auch eine Schutzfolie mit grüner Markierung. Das bedeutet dass der Bilschirm Speicher einen Offset von 2 Pixel in x Richtung und 1 Pixel in y Richtung hat. Nach meinem Verständniss des Controllers sollte es reichen per CASET und RASET ein Window zu definieren und dann mit RAMWR das Frame Memory zu füllen. Da passiert aber bei mir nichts. Im Anhang die LA Ausgabe dort hab ich einfach statt der Farbe einen Zähler ausgegeben um die Anzahl der Schreibzugriffe zu kontrollieren. Der läuft bis 0x4FFF was auch der Anzal der Pixel (160 x 128) entspricht. Da der Fehler vermutlich vor dem Bildschirm sitzt, kennt jemand dieses Verhalten? Thomas
Thomas Z. schrieb: > Da der Fehler vermutlich vor dem Bildschirm sitzt, kennt jemand dieses > Verhalten? Wenn du deinen Code zeigst dann können sie geholfen werden.
Der angehängte asm-Code funktioniert. Vielleicht hilft dir das ja.
hier mein gekürzter c code. Basis war wie gesagt die Adafruit lib sowie ein AVR Beispiel hier aus dem Forum. Das ganze läuft im Moment auf eine CH559. SPI Clock Speed ist im Moment noch auf lngsame 62.5 kHz gestellt. Thomas
Thomas Z. schrieb: > hier mein gekürzter c code. Im Logik-Analysator ist festzustellen dass dein CS dauernd low ist. Versuche mal für jedes CMD und Datum einen neuen CS Zyklus auszuführen. Ich fürchte der Display-Controller braucht zum Erkennen von DC (Data/Command) bzw. für dessen Wechsel jeweils eine neue CS-Flanke.
Arduinoquäler schrieb: > Versuche mal für jedes CMD und Datum einen neuen > CS Zyklus auszuführen. Das sollte natürlich auch bei der Initialisierung geschehen. Der Rest schaut ganz plausibel aus.
Arduinoquäler schrieb: > Versuche mal für jedes CMD und Datum einen neuen > CS Zyklus auszuführen. Ich meinte das in etwa so:
1 | /* SPI general support functions */
|
2 | void writecommand(uint8_t cmd) |
3 | {
|
4 | tft_cmd(0); |
5 | spiselect(0); // CS aktiv erst nach C/D |
6 | tft_write(cmd); |
7 | spiselect(1); |
8 | }
|
9 | |
10 | void writedata(uint8_t dat) |
11 | {
|
12 | tft_cmd(1); |
13 | spiselect(0); // CS aktiv erst nach C/D |
14 | tft_write(dat); |
15 | spiselect(1); |
16 | }
|
17 | |
18 | void spistreampixel(uint16_t color) |
19 | {
|
20 | tft_cmd(1); |
21 | spiselect(0); // CS aktiv erst nach C/D |
22 | tft_write(color >> 8); |
23 | tft_write(color & 0xff); |
24 | spiselect(1); |
25 | |
26 | }
|
Arduinoquäler schrieb: > Arduinoquäler schrieb: >> Versuche mal für jedes CMD und Datum einen neuen >> CS Zyklus auszuführen. > > Ich meinte das in etwa so: danke ich probier das gerade aus... Lt. Datenblatt sollte das nicht notwendig sein, schadet aber auch nicht. Ich werde berichten. @Thomas F: ich bin leider icht firm in AVR ASM werde das aber trotzdem studieren.. Danke Thomas
Thomas Z. schrieb: > ich bin leider icht firm in AVR ASM werde das aber trotzdem studieren.. KEin Problem, sieh dir erst mal das LCD-init an. Das muss passen. Dein Code hat das lange Init mit allen möglichen Parametern, braucht man aber üblicherweise nicht. Mein Code hat nur die nötigen Parameter um das Display zu starten. Das kannst du ja mal vergleichen.
so hier das Update. Da ich das Display ums verrecken nicht ans laufen bekommen habe, hab ich das Ganze erst mal beiseite gelegt. Verschiedene Variaanten mit CS haben nichts gebracht, und die Verdrahtung hab ich zig mal überprüft. Irgendwann bin ich dann zum Schluss gekommen, dass mein TFT wohl doch einen Schuss hat. Nachdem ein neues Display eingetroffen ist hab ich das nochmal probiert. Hat sofort funktioniert. Fehlerursache ist vermutlich ein nicht funktionierender /CD Pin Die Folge war, dass ich zwar CMDs absetzen konnte, aber nur solche die keine Parameter brauchen auch korrekt vom Display verarbeitet wurden. Danke an alle die versucht haben zu helfen. Thomas
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
