mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Das Wunder der Technik S1D13700F02 Grafik-LCD-K


Autor: Martin (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 !)

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.