Hallo,
ich möchte ein TFT mit einem Epson S1D13748 ansteuern. Ich nutze dazu
Routinen, die ich auch für ein RAM (auch auf der Platine) verwende
(diese funktionieren auch soweit). Mein Ozsi sagt mir, dass die Daten
korrekt am Chip ankommen, der gibt aber keinen Ton von sich. Der
Oszillator läuft, aber selbst die asynchronen Register liefern immer nur
0x0000 zurück. Ich habe schon versucht die Powersave und PLL
Controlregister zu beschreiben, leider bringt das aber auch nicht den
gewünschten Erfolg.
Gibt es vielleicht einen Trick bei den Controllern, den ich übersehen
habe ?
Grüße
Stampede
Monolog geht weiter:
Was ich auch nicht ganz verstehe: Wenn die asyncronen Register immer
verfügbar sind, dann doch auch bevor ich die PLL etc. konfiguriert habe.
Wenn dann da aber steht dass ich x Takte ein Signal anlegen muss, woher
soll ich wissen, wie lange das ist ? Ich kann doch nicht auf gut Glück
da mal was reinschreiben und hoffen, dass es geht. Wer hat sich sowas
bloß ausgedacht?
Stampede wrote:
> Was ich auch nicht ganz verstehe: Wenn die asyncronen Register immer> verfügbar sind, dann doch auch bevor ich die PLL etc. konfiguriert habe.
Ja.
> Wenn dann da aber steht dass ich x Takte ein Signal anlegen muss, woher> soll ich wissen, wie lange das ist ?
Wo steht das?
Passt der eingestellte Busmodus zum verwendeten?
Hallo Benedikt,
schön, dass einer antwortet. Ich habe das Indirect 80 Interface gewählt,
Datenformat Big Endian.
Das Interface sieht so aus wie auf Seite 44 des DB:
http://vdc.epson.com/index.php?option=com_docman&task=cat_view&gid=186&Itemid=99
Wenn man sich da beispielsweise t7 und t8 anschaut, weiß ich nicht wie
lang die sein sollen. Habe den Controller mal so langsam gemacht wie mir
möglich, da ist T(read low) über 1,5µs, die high time ist ca. 1µs. Das
entspräche einem Takt von 1 MHz, eingestellt durch die PLL habe ich
58MHz. Aber ob das gelingt weiß ich nicht, denn ich kriege ja kein
Feedback über die Register. Als CLKI nehme einen Oszilator mit 8Mhz (der
läuft auch). Nach dem aktivieren der PLL warte ich 1ms, aber bringt
alles nichts. Die Leitungen gammeln alle auf low...
Ich sitze da schon den ganzen Tag vor und ich weiß einfach nicht mehr
weiter >:(
Stampede wrote:
> schön, dass einer antwortet. Ich habe das Indirect 80 Interface gewählt,> Datenformat Big Endian.
Welchen µC verwendest du? Irgendwas von Motorola? Die meisten anderen
haben nämlich Little Endian.
> Wenn man sich da beispielsweise t7 und t8 anschaut, weiß ich nicht wie> lang die sein sollen.
Stimmt. Das Timing gilt wohl für die synchronen Register. Bei den
Asynchronen dürfte das Timing nur durch irgendwelche Gatterlaufzeiten
begrenzt sein, also um einiges unkritischer sein.
Die Datenblätter von Epson sind leider nicht so ganz perfekt...
Ich lese gerne das "REG[0002h] Product Information Register 1" aus, und
verwende diese Info als Selbsttest des Busses.
Vorher muss das "Power Save Mode Enable" Bit gelöscht werden, aber das
hast du ja schon drin.
Ich nutze einen PIC32, dort das PMP Modul für die IO Zugriffe. Da bietet
sich Big Endian und 80 INterface an.
>Ich lese gerne das "REG[0002h] Product Information Register 1" aus, und>verwende diese Info als Selbsttest des Busses.
Genau das versuche ich ja verzweifelt. Aber da ist alles 0.
Vorher rufe ich das hier auf:
Es scheint mir so, als würde das der Kontroller gar nicht reagieren. Der
versucht an keiner Stelle mal einen Pin auf high zu ziehen. Das PMP
Modul sollte richtig konfiguriert sein, schließlich läuft der RAM damit
(mit Latches und allem drum und dran).
Hardware schon 10 Mal kontrolliert, ich kann einfach keinen Fehler
finden...
Hast du noch ne Idee ?
Grüße
Stampede
Stampede wrote:
> Hast du noch ne Idee ?
Ich sags mal so:
Nachdem ich die Hardwarefehler alle beseitigt hatte, und die Software
das Bustiming richtige machte, und nachdem der Power Save Mode
abgeschaltet war, lief bei mir bisher jeder Epson Contoller.
Bist du wirklich sicher, dass der PIC32 Big Endian auf dem externen Bus
verwendet?
Benedikt K. wrote:
> Stampede wrote:>>> Hast du noch ne Idee ?>> Ich sags mal so:> Nachdem ich die Hardwarefehler alle beseitigt hatte, und die Software> das Bustiming richtige machte, und nachdem der Power Save Mode> abgeschaltet war, lief bei mir bisher jeder Epson Contoller.>> Bist du wirklich sicher, dass der PIC32 Big Endian auf dem externen Bus> verwendet?
So, Datenformat litte endian, timing so lahm wie irgend geht, CNF alle
low, Powersave sollte off sein (obwohl die asynchronen ja angeblich so
gehen), aber gleiches Bild. Das Statusregister 2 bleibt 0, andere
Register auch.
Hardware hab ich mal in den Anhang gepackt, sollte meines Erachtens auch
ok sein. Ich weiß einfach nicht weiter .... oder übersehe ich einfach
etwas ?
Ich werde morgen mal den 36 Kanal Logikanalyser auf der Arbeiten
dranwerfen, vielleicht gibt das Aufschluss.
Gruß
Stampede
Zitat aus dem Datenblatt:
After power-on, an active low hardware reset pulse, which is two
external clock cycles
(CLKI) in length, must be input to the S1D13748B00 RESET# pin. All
registers, including
the Clock Configuration registers (REG[000Eh] ~ REG[0018h]) are reset by
a hardware
reset. After releasing the RESET# signal, the Clock Configuration
registers are immediately
accessible.
Wenn ich davon ausgehe, dass der Quarzoszillator ein paar ms zum Starten
braucht, denke ich nicht dass das RC Glied Reset solange auf Low hält.
Keine Ahnung ob es daran liegt, aber versuch mal Reset etwas länger bzw.
später auf Low zu ziehen, damit der 13748 wirklich 2 Takte während Reset
erhält.
So, es geht nun, der Kontroller spricht. Hatte einen durch eine zu hohe
PLL Spannung zerschossen. Aber das Gerätsele geht weiter: Was muss in
die Register 0x40 und 0x42 (LCD1 Horizontal Total Register und LCD1
Horizontal Display Period Register) ? In das eine würde ich passen für
640 Pixel beschreiben, aber das andere? Hat da jmd mal ne kurze
Erklärung ?
Oder was soll das sein, Register 0x46: Horizontal Pulse Width in pixels
? Pulseweite wird für mich in sek gemessen.... verstehe ich grad gar
nicht...
Gruß
Stampede
Hans W. schrieb:
> In das eine würde ich passen für 640 Pixel beschreiben,
Ja.
> aber das andere? Hat da jmd mal ne kurze Erklärung ?
Das ist die gesamte Bildbreite inkl. Zeilenrücklauf wie das bei CRTs
hieß.
Bei 640x480 liegt der übliche Wert um die 800, genaueres sollte im
Datenblatt vom TFT stehen.
> Oder was soll das sein, Register 0x46: Horizontal Pulse Width in pixels> ? Pulseweite wird für mich in sek gemessen.... verstehe ich grad gar> nicht...
Für den Controller sind Pixel die Zeitbasis. Bei 640x480 beträgt der
Pixeltakt meist 25,1MHz. Ein Pixel entspricht daher etwa 40ns. Auch
dieser Wert sollte im Datenblatt des TFTs zu finden sein.
Aha, jetzt kommen wir der Sache langsam näher.
Auf der Seite 17 scheint mir die relevanten Informationen zu stehen.
Danke, das hilft mir schon mal weiter. Melde mich wenn ich nicht
weiterkomme...
Das IC ist echt der Wahnsinn:
Das Statusregister (0x2) lässt sich korrekt auslesen, bei allen anderen
(asyncronen) Registern kommt nur 0x0 raus, obwohl für den Defaultzustand
was ganz anderes angegeben ist. Ich verstehe das Teil einfach nicht !
Hallo,
ich muss diesen alten Thread nochmal aktivieren, es tut sich wieder was.
Die Kommunikation geht nun einwandfrei, der Chip sitzt nun auf einer
neuen Platine.
Zum Problem:
Die Einstellungen für die Displaytakte sind mir einfach noch nicht ganz
klar. Irgendetwas ist da auch nicht ok, denn es treten 2 Fehler auf:
1. Das Display flaktert in der linken Hälfte deutlich, rechts ist das
nicht der Fall.
2. Die Backgroundfarbe lässt sich nicht korrekt einstellen. Wenn ich das
entsprechende Register auf max. Rot setzte kommt so ein Blau raus, bei
max. Blau so ein Rostbraun.
Das lässt mich darauf schließen, dass die Daten nicht richtig beim LCD
ankommen (HSYNC falsch etc.)
Ich habe die Register wie folgt initialisiert:
1
setReg(0x0040,(horTotal/8)-1);// LCD1 Horizontal Total (FPLINE Period) Register
2
setReg(0x0042,(DISP_HOR_RESOLUTION/2)-1);// LCD1 Horizontal Display Period Register
3
setReg(0x0044,0x0009);// LCD1 Horizontal Display Period Start Position Register
setReg(0x0052,0x0000);// LCD1 Vertical Pulse (FPFRAME) Start Position Registe
Im Detail:
Der Pixeltakt ist auf 27.5MHz eingestell, was laut DB des LCD ok ist
0x40: LCD1 Horizontal Total: horTotal = 844, laut DB typ 750 bis 850
0x42: LCD1 Horizontal Display Period Register: DISP_HOR_RESOLUTION = 640
0x44: LCD1 Horizontal Display Period Start Position Register: 9, da
erlaubter Minimalwert ?
0x46: LCD1 Horizontal Pulse (FPLINE) Register: 0x1E = 30 Takte ?
0x48: LCD1 Horizontal Pulse (FPLINE) Start Position Register 0x64 = 144
?? Stimmt das?? Takte ab gültigem Framebeginn?
0x4A: LCD1 Vertical Total (FPFRAME Period) Register: horTotal = 525
0x4C: LCD1 Vertical Display Period Register: DISP_VER_RESOLUTION = 480
0x4E: LCD1 Vertical Display Period Start Position Register: 0 ???
0x50: LCD1 Vertical Pulse (FPFRAME) Register: 6 ?
0x52: LCD1 Vertical Pulse (FPFRAME) Start Position Register: 0 ?
Bei den Werten ohne "?" denke ich mal, dass die stimmen. Aber bei den
anderen? Kann mir da jmd helfen?+
Sonst sollten die Register passen, habe dem LCD entsprechend 24Bit RGB
eingestellt.
Gruß
Stampede