Forum: Mikrocontroller und Digitale Elektronik Problem mit TFT (ST7735S basierent)


von Thomas Z. (usbman)


Angehängte Dateien:

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

von Arduinoquäler (Gast)


Lesenswert?

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.

von Thomas F. (igel)


Angehängte Dateien:

Lesenswert?

Der angehängte asm-Code funktioniert.
Vielleicht hilft dir das ja.

von Thomas Z. (usbman)


Angehängte Dateien:

Lesenswert?

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

von Arduinoquäler (Gast)


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.

von Arduinoquäler (Gast)


Lesenswert?

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.

von Arduinoquäler (Gast)


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
}

von Thomas Z. (usbman)


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

von Thomas F. (igel)


Lesenswert?

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.

von Thomas Z. (usbman)


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

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
Noch kein Account? Hier anmelden.