Problem mit TFT (ST7735S basierent)

OP #6145001
Lesenswert?

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
Angehängte Dateien:
Gast #6145085
Lesenswert?

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.
Gast #6145131
Lesenswert?

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
}
OP #6145156
Lesenswert?

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
OP #6163920
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren