Hallo Leute! Ich beschäftige mich seit ein paar Tagen mit dem S1D13700F02-Kontroller. Dieser Kontroller sitzt auf einem Display und steuert 700x100 Bildpunkte an. Leider gibt es dabei kleine Problemchen, die ich gerne mit euch in diesem Post diskutiert hätte. Auf diese Weise kann verhindert werden, dass andere genau dieselben Fehler machen. Es wäre großartig, wenn wir hier so ziemlich alle Fragen klären könnten, die über das Datenblatt hinausgehen. Nun zu meiner ersten Frage: 1: Das Bild befindet sich in dem Doc-File. Die Characters, die ich rausschicke werden spiegelverkehrt angezeigt. Keine Ahnung wie ich das geschafft habe, aber es ist so. Gibt es ein Bit, mit dem ich das Ganze umdrehen kann? 2: Über dem Bild habe ich Pfeile angebracht mit einer entsprechenden Nummer. Der Kontroller steuert drei Treiberbausteine an. Wenn ich den Cursor auf Adresse 0 setze, dann landet er bei Pfeil 1. Wenn ich jetzt Characters rausschicke bewegt sich der Cursor nach links, obwohl ich den Cursor so initialisiert habe, dass er sich nach rechts bewegen müsste. Die Adresse inkrementiert nach jedem Raussenden um 1. Ist nun der Cursor bei 2 angekommen, springt er zu Pfeil 3 und bewegt sich zu 1, ist er dort angekommen, springt er auf 4 und bewegt sich zu 3. Dann springt er in die nächste Zeile auf Pfeil 1. Zusätzlich muss ich erwähnen, dass dieses Display extra für uns gefertigt wurde. Kann es sein, dass es sich hierbei um einen Fertigungsfehler handelt? Danke für eure Hilfe. Tschüss Martin
Martin wrote: > Zusätzlich muss ich erwähnen, dass dieses Display extra für uns > gefertigt wurde. Kann es sein, dass es sich hierbei um einen > Fertigungsfehler handelt? Eher um einen Designfehler. Die Treiber sind nichts anderes als Schieberegister. Fast immer man kann die Schieberichtung umschalten. Es scheint so, als wäre jeweils die Schieberichtung der einzelnen Treiber genau falsch rum. Besorg dir mal die Datenblätter der Treiber und suche nach den Pins die die Richtung bestimmen. Die müssen dann auf den entgegengesetzten Pegel geschaltet werden.
Danke Benedikt! So wie ich jetzt die Textausgabe betrachten kann, haben die noch ein paar Kleinigkeiten mehr falsch gemacht. Eine Frage habe ich noch. Ich habe mir ein paar Treiber gratis downgeloaded. Ich verstehe alle Funktionen bis auf eine: int8 getStatus() { int8 status; l_GLCD_A0=0; DDRC=0; l_GLCD_CS=0; l_GLCD_RDWR=1; delay_us(5); l_GLCD_E=1; delay_us(5); status=l_input_lcd; l_GLCD_E=0; l_GLCD_CS=1; delay_us(5); DDRC=0xFF; return status; } Kann man tatsächlich den Status des Displays abfragen? Ich habe in der Doku auf Seite 69, wo die inirecte Addressierungsbefehle stehen keinen Hinweis gefunden. Ich verwende die 6800 Schnittstelle (indirekt). Diese Funktion wurde von mir getestet und ich erhalte immer 0 zurück. Dann habe ich noch eine Frage: Das Bustiming wird im Datenblatt perfekt beschrieben. In meiner Vergangenheit hatte ich ein LCD-Textdisplay und dort im Datenblatt war das Bustiming ebenso beschrieben. Zusätzlich stand aber bei jedem Befehl separat noch eine Executed Time, die jeder Befehl benötigt. Wenn ich mich jetzt genau an das Bustiming halte, kann ich das Display nicht initialisieren. Wenn ich jedoch nach jedem Commando ca. 500µs warte, dann klappt es. Da ich aber das Display mit der maximalen Geschwindigkeit ansteuern möchte, würde ich gerne wissen ob es für den S1D13700F02 eine ähnliche Executed Time gibt? Danke Leute Tschüss Martin
Martin wrote: > Kann man tatsächlich den Status des Displays abfragen? Ich habe in der > Doku auf Seite 69, wo die inirecte Addressierungsbefehle stehen keinen > Hinweis gefunden. Ich verwende die 6800 Schnittstelle (indirekt). Da A0 Low ist, sollte die Funktion eigentlich das Display RAM auslesen. Das Datenblatt hat da glaube ich einen Fehler: Zum Daten schreiben ist A0 1 und zum lesen ist A0 0. Das macht keinen Sinn. Beim 13505 (der ja der Vorgänger vom 13700 ist) konnte man irgendwo auselsen, ob der Controller gerade von der letzten Zeile zur ersten wechselt. Beim 13700 geht das auch irgendwo, ich finde es nur gerade nicht. Sowas wie ein Busy Flag gibt es aber nicht. > Diese Funktion wurde von mir getestet und ich erhalte immer 0 zurück. Vermutlich weil du eben das Display RAM liest. > Dann habe ich noch eine Frage: > Das Bustiming wird im Datenblatt perfekt beschrieben. > In meiner Vergangenheit hatte ich ein LCD-Textdisplay und dort im > Datenblatt war das Bustiming ebenso beschrieben. > Zusätzlich stand aber bei jedem Befehl separat noch eine Executed Time, > die jeder Befehl benötigt. Beim 13700 gibt es sowas nicht, da dieser sehr viel schneller ist als die alten 44780. Schaust du im Datenblatt auch im richtigen Timing Diagramm (es gibt 2: eines für mit WAIT und eines für ohne WAIT Pin). Ohne Wait Pin ist das Bustiming ziemlich langsam (die Zeiten gehen je nach Takt des 13700 in den µs Bereich !)
Ich habe die richtigen Timingdiagramme 6800-Indirect-Interface. Aber zur Sicherheit möchte ich es euch vorrechnen. Im Display befindet sich ein 40MHZ-Quarz. z.B. die Read-Cycle-Time Symbol t10 TS = System-Clock-Period. t10min=10*Ts+2 (for a write cycle followed by a read cycle) 1/40MHZ=25ns T10min=10*25+2=252ns Ich muss aber nach jedem Befehl 200us warten, damit ich das Display überhaupt initialisieren kann. Keine Ahnung warum. Danke für eure großartigen Antworten. Schönes Wochenende. Tschüss Martin
Martin wrote: > 1/40MHZ=25ns > > T10min=10*25+2=252ns OK, das passt. > Ich muss aber nach jedem Befehl 200us warten, damit ich das Display > überhaupt initialisieren kann. > > Keine Ahnung warum. Kann ich nicht nachvollziehen, bei mir funktionierte es immer problemlos. Irgendwas passt da an der Hardware oder der Software nicht, normal ist das auf jedenfall nicht. Versucr mal herauszufinden, nach welchen Befehlen du solange warten musst.
Hallo Benedikt! Ich habe mir jetzt die OSZI-Kurven angesehen und die sind sehr großzügig bemessen. Zu Beginn mach ich einen Reset von 5ms und warte nach dem Auftauchen aus dem Reset wieder 5ms. Ich habe das Ganze jetzt ausgetestet und der einzige Befehl, bei dem ich so lange warten muss ist der System-Setup-Befehl, dem 8 Data-Bytes folgen. Damit es funktioniert muss ich Folgendes machen. Den Befehl raussenden (1Byte), danach 200µs warten und dann die 8 Daten-Bytes hinterhersenden. Wenn ich z.B. nach dem Raussenden des Befehls (1 Byte), gleich die 8 Daten-Bytes hinterhersende und dann warte, funktioniert nichts. Ich bin für jeden Tipp dankbar. Tschüss Martin
Ich habs ! Du bist auf die Gemeinheiten der Epson LCD Controller reingefallen: Man sollte die Kommentare die im ganzen Datenblatt verteilt sind lesen... Note 1. If the S1D13700F02 is in power save mode (at power up or after a POWER SAVE command), the SYSTEM SET command will exit power save mode. After writing the SYSTEM SET command and its 8 parameters, the S1D13700F02 will be in normal operation. 2. When using a crystal, after writing SYSTEM SET command wait 3ms or more to allow the internal clock to become stable before writing the remaining eight parameters.
Hallo Benedikt K.! Wenn man mit Antiquitäten arbeitet, so wie ich, dann darf man sich nicht wundern, wenn so ein Hinweis im Datenblatt noch nicht Fuß gefasst hat. Das neuere Datenblatt enthält diesen Hinweis. Ich danke dir vielmals. Das bedeutet, dass ich nicht 200µs warten muss, sondern 3ms. Somit sind alle Unklarheiten beseitigt. Tschüss Martin
Martin wrote: > Wenn man mit Antiquitäten arbeitet, so wie ich, dann darf man sich nicht > wundern, wenn so ein Hinweis im Datenblatt noch nicht Fuß gefasst hat. > > Das neuere Datenblatt enthält diesen Hinweis. Das ist so bei Epson. Teilweise sind die bei Version 1.5 oder mehr, damit zumindest mal die gröbsten Fehler draußen sind. > Ich danke dir vielmals. Das bedeutet, dass ich nicht 200µs warten muss, > sondern 3ms. Die 3ms sind die Zeit, die der Quarz maximal benötigt um anzuschwingen. In der Praxis ist der Wert (je nach Quarz) um einiges kleiner.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.