Problem mit TFT (ST7735S basierent)

OP #6145001
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
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
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
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
#6145674
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.
OP #6163920
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

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.