Forum: Mikrocontroller und Digitale Elektronik kein Init von TFT Newhaven NHD-7.0-800480CTXI


von Andreas W. (andy_w)


Lesenswert?

Hallo,
ich habe bei Digikey das TFT NHD-7.0-800480CTXI#-T von Newhaven 
bestellt. Es hat eine Auflösung von 800*480 Pixeln und einen Touchscreen 
(resistive). Dazu gibt es zwei Datenblätter, einmal für das ganze 
Display und eines für den dort verwendeten Controller SSO1963. Der 
Controller hängt über einen 8-Bit Bus mit CS#, D/C#, RD# und WR# am 
Prozessor, außerden gibt es noch einen Resetanschluß RST# (alle low 
active). Im Datenblatt für das ganze Display ist auch ein Codebeispiel 
für die Initialisierung angegeben. Dieses habe ich übernommen, mußte nur 
den Code etwas umschreiben, da ich als Prozessor den NXP1769 verwende, 
da werden die Ports anders angesprochen.

Mit dem Oszilloskop konnte ich nachvollziehen, daß die Buszugriffe 
hardwaremäßig korrekt ablaufen, Commands und Daten (werden mit D/C# 
unterschieden) werden auch richtig adressiert. Aber leider rührt sich 
das Display überhaupt nicht. Ich kann keinerlei Pixel setzen, das 
Display zeigt nicht die geringste Reaktion. Nur das Backlight geht, aber 
das hat mit dem Display selber ja nichts zu tun, der Touchscreen ist 
ebenfalls vollkommen davon getrennt und wird bis jetzt noch nicht 
benutzt. Auch ein langsamer Zugriff im Debugger und mit zusätzlichen 
Delays hat nichts verändert.

Hat jemand schon zufällig so ein Display mal in Betrieb genommen, 
zumindest ein TFT von Newhaven? Ein funktionierender Code von der 
Init-Routine würde mich interessieren, der bei Newhaven tut es 
offensichtlich nicht. Ach, ja, nach dem Init habe ich das DIsplay mit 
Commando 0x29 auch eingeschaltet, aber ohne Erfolg. Die Suchfunktion hat 
leider erst einmal nichts passendes gefunden.

Gruß
Andy_W

von Andreas H. (ahz)


Lesenswert?

Huhu

Ich hatte einen ähnlichen Effekt (aber auf einem völlig anderen 
Display).
Da hatte ich ein par Delays während der Initialisierung nicht 
eingehalten.

Hast Du sowas gecheckt ?

Viel Erfolg
Andreas

von Andreas W. (andy_w)


Lesenswert?

Hallo,
ich habe die Delays alle probeweise verlängert, selbst beim Bustiming 
zwischen jeden Schritt, bei dem sich ein Steuerpin ändert war ein Delay 
drin. Aber leider zeigte auch das keine Wirkung.

Es ist schon blöde, wenn noch gar nichts funktioniert, man hat keinerlei 
Hinweise, was da falsch sein könnte. Die Datenblätter und der 
Beispielcode widersprechen sich auch zum Teil, PLL wird eingeschaltet, 
bevor die Teilerfaktoren gesetzt werden (laut Datenblatt muß das anders 
herum gemacht werden), es wird ein Kommando verwendet, das im Datenblatt 
nur "reserved" ist und die Frequenz für den Pixelclock (!= PLL Frequenz) 
paßt auch nicht zu den verwendeten Parametern. Der Pixelclock kommt auch 
gar nicht hardwaremäßig vom Displaycontroller zum eigentlichen Display, 
es sollten ca. 31MHz sein (oder 21.25MHz nach meiner Rechnung), mit dem 
Skope ist aber nichts zu messen.

Ich hatte auch schon zwei leicht unterschiedliche Beispielprogramme 
gefunden, ich habe inzwischen alle Möglichkeiten durchprobiert (z.B. 
auch die Teilereinstellung für die PLL vor dem Einschalten der PLL), 
immer noch ohne jeden Erfolg, das Display zeigt keinerlei Reaktion.

Gruß
Andy_W

von m.n. (Gast)


Lesenswert?

Andreas W. schrieb:
> Es ist schon blöde, wenn noch gar nichts funktioniert, man hat keinerlei
> Hinweise, was da falsch sein könnte.

Ohne mir Display/Controller angesehen zu haben: die 1. Kontrolle besteht 
im Zurücklesen der zuvor beschriebenen Register. Damit kannst Du den 
'sauberen' Buszugriff überprüfen.

von Andreas H. (ahz)


Lesenswert?

m.n. schrieb:
> Ohne mir Display/Controller angesehen zu haben: die 1. Kontrolle besteht
> im Zurücklesen der zuvor beschriebenen Register. Damit kannst Du den
> 'sauberen' Buszugriff überprüfen.

Guter Hinweis. Ich bin (ganz naiv) davon ausgegangen, dass der TE das 
getan hat.

@TE Hast Du das mal gecheckt ?

Viele Grüße
Andreas

von Andreas W. (andy_w)


Lesenswert?

Hallo,
so, endlich kann ich wieder an der Schaltung messen. Ein Zurücklesen 
habe ich jetzt auch implementiert, es funktionierte aber auch nicht. Per 
Debugger halte ich genau an der Stelle an, bei der CS# = 0 (Chip 
select), D/C# = 1 (select data register), RD# = 0 und WR# = 1 ist. Und 
dann stellte ich fest, daß CS# an einem anderen, unbenutzten Port 
angelötet war als ich dachte und der war immer high... Wohlweislich habe 
ich die Prozessorplatine erst einmal als Fädelplatine realisiert, weil 
ich schon ahnte, daß die Schaltung noch nicht gleich richtig sein wird.

Nun zeigt sich immerhin schon was auf dem Display, wenn auch nicht so, 
wie ich es erwarte. Aber nun kann man schon etwas mehr machen und muß 
wohl auch an den Init-Parametern spielen, mal sehen, wann ich weiteres 
herausbekommen habe.

Gruß
Andy_W

von Andreas H. (ahz)


Lesenswert?

Andreas W. schrieb:
> Und
> dann stellte ich fest, daß CS# an einem anderen, unbenutzten Port
> angelötet war als ich dachte und der war immer high...

Und ich dachte, sowas passiert nur mir ;-)

Aber wenn das Display erst mal zuckt, ist das ja schon ein Schritt in 
die richtige Richtung :-)

Grüße
Andreas

von Andreas W. (andy_w)


Lesenswert?

Hallo,
so etwas weiter herumprobiert. Schreiben und zurücklesen der 
Controllerregister funktioniert einwandfrei, die Buszugriffe 
funktioniren jetzt offensichtlich. Aber leider funktioniert das Display 
noch immer nicht so, wie es sollte. Schreibe ich den ganzen 
Framespeicher abwechselnd mit einer einheitlihen Farbe voll (z.B. 
Rot/Blau abwechselnd), müßte eigentlich der Bildschirm von oben nach 
unten mit der jeweils neuen Farbe gefüllt werden, da das Vollschreiben 
des Framespeichers relativ lange dauert (knapp 1s). Stattdessen blendet 
aber die Farbe im ganzen Bildschirm allmählich von der alten zur neuen 
über. Schreibe ich Testbilder, haben alle Zeilen den gleichen Inhalt und 
zwar etwa den Mittelwert aller geschriebenen Zeilen, man sieht imme nur 
senkrechte Streifen.

Außerdem wird nur der linke Bereich von ca. 600*480 Pixeln angesprochen, 
die restlichen ca. 200 Pixel rechts bleiben komplett weiß. Das Display 
selbst hat 800*480 Pixel Auflösung.

Egal, was ich an der Initialisierungsroutine auch ändere und variiere, 
die Funktion ändert sich nur marginal. Vor allem gelingt es mit nicht, 
unterschiedliche Zeilen darzustellen. Kennt jemand so ein Phänomen bei 
TFT-Displays und hat herausbekommen, was die Ursache dafür ist? So 
langsam befürchte ich, daß ich ein defektes Display geliefert bekommen 
habe.

Die Verbindung vom Controller zum eigentlichen Display enthält außer den 
Pixeldaten nur noch einen Pixelclock und ein EN-Signal, das bei 
sichtbaren Pixeln high und sonst low ist. Das EN-Signal sieht korrekt 
aus, jede Zeile ca. 35µs lang, davon ca. 28µs high, ca. alle 17ms eine 
längere low-Phase für den VSYNC. Die Zeiten sind nur schnell geschätzt, 
das Signal sieht aber erst einmal korrekt aus.

Das Supportforum von Newhaven hilft nicht wirklich weiter, ca. 80-90& 
aller Anfragen bleiben unbeantwortet und die anderen sind oft knapp und 
allgemein gehalten, gehen kaum auf das jeweilige Proble ein. Inzwischen 
habe ich im Datenblatt eine Emailadresse gefunden, die sich zumindest 
etwas nach technischem Support anhört, ob ich aber dort auf meine 
Anfrage eine Antwort erhalte, weiß ich nicht...

Gruß
Andy_W

von Andreas H. (ahz)


Lesenswert?

Andreas W. schrieb:
> Stattdessen blendet
> aber die Farbe im ganzen Bildschirm allmählich von der alten zur neuen
> über. Schreibe ich Testbilder, haben alle Zeilen den gleichen Inhalt und
> zwar etwa den Mittelwert aller geschriebenen Zeilen, man sieht imme nur
> senkrechte Streifen.

Die Bits/Pixel sind korrekt im Controller eingestellt ?

Andreas W. schrieb:
> Außerdem wird nur der linke Bereich von ca. 600*480 Pixeln angesprochen,
> die restlichen ca. 200 Pixel rechts bleiben komplett weiß.

Über ALLE Zeilen ?
Check mal die Front-Porch Einstellungen (falls der Controller sowas hat. 
Ich kenn das ding leider nicht).

Grüße
Andreas

von m.n. (Gast)


Lesenswert?

Andreas W. schrieb:
> Die Verbindung vom Controller zum eigentlichen Display enthält außer den
> Pixeldaten nur noch einen Pixelclock und ein EN-Signal

Wieviele 'Pixelclocks' werden im EN-aktiv Zustand ausgegeben? Etwa nur 
640?

von Andreas H. (ahz)


Lesenswert?

Sag mal, NORMAL_MODE (also NICHT PARTIAL_MODE) hast Du aber eingestellt 
?

Grüße
Andreas

von Andreas W. (andy_w)


Lesenswert?

Hallo,
Frontporch, Backporch und Synclänge habe ich für horizontal und vertikal 
diverse Einstellungen ausprobiert, von knapp (ca. 850*500 Pixel Brutto) 
bis großzügig (ca. 1200*600 Pixel Brutto). Mit Brutto meine ich Pixel 
pro Zeile incl. der Porches und des Syncs, analog für alle Zeilen. Das 
hat aber nur geringfügigen Einfluß gehabt, prinzipiell blieben die 
Fehler. Der Pixelclock hat gemessene knapp 30MHz, d.h. in den 28µs 
sichtaren Teil der Zeile sind wohl tatsächlich 800 Takte, nicht ca. 600. 
Wie gesagt, die Zeiten sind nur grob mit dem Analogskop gemessen, es 
sind aber definitiv mehr als ca. 600 Takte. Den Normal-Mode habe ich 
testweise auch noch explizit eingeschaltet, obwohl der als Defaultwert 
nach dem Reset sowieso vorhanden ist, das hat erwartungsgemäß nichts 
geändert, war schon im Normalmode.

Ich werde heute Abend dann mal abwechselnd weiße und schwarze Zeilen 
schreiben und mit dem Skop die Datenleitungen zum Display ansehen, die 
müßten ja abwechselnd high und low sein, wenn sie richtig aus dem 
Controller kommen. Sind die Daten richtig, läuft der Controller korrekt 
und das Display hat eine Macke, ansonsten heißt es weiter suchen...

Ich werde auch mal die kurze Flachbandleitungsverbindung zwischen 
Controller und Display durchklingeln, das ist so eine dünne biegsame, 
die lediglich in den Steckern eingeklemmt wird, wer weiß, wie 
zuverlässig die Kontakte sind oder ob das Kabel richtig montiert wurde.

Gruß
Andy_W

von Andreas W. (andy_w)


Lesenswert?

Hallo,
letzte Tests haben ergeben: die RGB-Daten, die ich in einen rechteckigen 
Bildbereich schreibe, lese ich auch exakt wieder zurück (nur 6Bit, die 2 
LSB bleiben bei meinen Funktionen beim Schreiben unberücksichtigt und 
beim Lesen werden die auf 0 gesetzt). Und wenn ich die Zeilen 
abwechselnd schwarz und weiß beschreibe, kann ich mit dem Skop sehen, 
daß die Daten auch so an das Display gehen. Der Controller funktioniert 
also offensichtlich. Nur das Display nicht... Ich befürchte, das ist 
defekt. Ich hoffe, das passiert nicht, wenn es längere Zeit Power hat 
und der Controller noch nicht initialisiert ist, was ja beim Flashen des 
Prozessors ja der Fall ist.

Jetzt kann ich nur noch Kontakte durchklingeln, ansonsten bleibt die 
Frage, ob ich noch ein Display kaufen soll, die Reklamation wird 
bestimmt stressig bei Digikey werden, da ich das Display schon ziemlich 
lange bei mir herumliegen hatte, ich mußte ja erst einmal eine 
mechanische Halterung bauen, die Frontplatte dafür bearbeiten, eine 
Adapterplatine für die drei Displayanschlüsse (Controller, LDE 
Hintergrundbeleuchtung und Touchscreen) auf einen Flachbandkabelanschluß 
(konventionell mit 2-reihigen Steckern im 2.54mm-Raster) löten und 
schließlich habe ich auch noch die Versuchsplatine für den Prozessor mit 
Fädeldraht gelötet. Das dauert eben seine Zeit...

Andererseits ist das Gesamtprojekt, ein digitaler Surroundvorverstärker 
in professioneller Qualität so teuer, daß so ein Display nicht mehr sooo 
sehr ins Gewicht fällt... Wenn das Projekt fertig ist (vielleicht in 
einem Jahr oder so...) stelle ich das hier sicher auch mal vor, wenn 
auch nicht in sämtlichen Details für Schaltpläne, Sourcen und VHDL-Files 
für die FPGAs. Aber Teile davon durchaus, auf jeden Fall auch z.B. den 
Treiber für das Display, wenn er denn endlich mal läuft ;-)

Gruß
Andy_W

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.