mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik TFT parallel ansteuerung


Autor: Dominik D. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Gute Morgen zusammen,

leider konnte ich weder im Internet noch hier noch im Datenblatt eine 
zufriedenstellende Antwort auf mein Problem finden.


Kurze Vorgeschichte: Ich soll in meiner Diplomarbeit ein Display 
ansteuern um dort einige Informationen als auch Bilder an zu zeigen.
Die erste Lösungsversuch wurde jetzt mit einem Display von Display3000 
(2,1") angesetzt, stellte sich jedoch insbesondere bei größeren Grafiken 
(50 x 60 pixel, a 16bit Farbwerte) als zu langsam herraus.

Mein zweiter Lösungsansatz zielt nun auf ein 2,2" Display von "Display 
Elektronik" ab (DEM 240320A TMH-PW-N), dieses besitzt bereits auf dem 
Modul einen HIMAX "HX8346" Grafikcontroller.

Aus dem Datenblatt konnte ich bereits entnehmen das der Controller via 
8/9/16/18 Bit parallel oder auch seriell via SPI angesteuert werden 
kann.

Aus performance gründen wollte ich das Display mit Hilfe eines Freescale 
S12XE mit einem 18bit parallel Bus ansteuern.

Wenn ich mir das jetzt so im Datenblatt anschaue (siehe 
Grafikcontrollerdaten HX8346-A.pdf) muss ich wenn ich Daten in das GRAM 
schreiben möchte erst die Startadresse (Coloumn, Row) in ein internes 
Register schreiben und anschließende die Grafikdaten übertragen.

Mein eigentliches Problem für das ich noch keine zufriedenstellende 
Lösung gefunden habe ist: Wie binde ich den 18Bit Parallel Bus an?

Einfach 18 GPIO Pins zu nehmen wird wahrscheinlich zu langsam sein.
Das "External Bus Interface" hilft mir hier wahrscheinlich auch nicht 
weiter da ich ja nicht wie bei einem Speicher einen Adressbus und einen 
Datenbus bzw einen gemeinsammen Adress und Datenbus habe.

Hat jemand eine Idee 18 Leitungen möglichst schnell an einen µC anbinde?


vielen dank

gruß
Dominik


Ps. ein leider nicht ganz vollständiges Datenblatt gibt es unter
http://www.microtipsusa.com/download/HX8346-A_DS_T_v01.pdf

Autor: Joerg Wolfram (joergwolfram)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es wird wahrscheinlich schneller sein, "nur" einen 16-Bit Bus zu 
benutzen. Vielleicht lässt sich das externe Memory-Interface nutzen, 
ansonsten mittels "std PORTA" lassen sich z.B. Daten gleichzeitig an 
PORTA und PORTB ausgeben, dann noch kurz mit den Steuerleitungen wackeln 
und fertig.

Gruss Jörg

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim AVR könntem man sogar ggf den Adressbus +ALE dafür mißbrauchen :)
Weiß nicht ob das bei deinem µC auch geht, dann würde sich aber 16bit 
Interface anbieten.
"Lesen" von einer Adresse wäre dann = schreiben auf das Display.

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde dir auch eine Lösung a la Läubi vorschlagen:

Gucke, ob dein Prozessor ein externes Speicherinterface hat. Wenn ja:
Blende es in den ext. Speicherbereich ein. Es ist sinnvoller, die 
Datenbusbreite des Displays exakt so groß zu wählen, wie die es 
Prozessors. Lesen/Schreiben geht dann schneller als wenn du alle 
Steuersignal mit Hand setzen musst, nur um 18bit zugleich zu habhen.

So schreibt die Software in das "externe" RAM, und die Daten landen 
derweil im Display.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das Display hat 320x240 in RGB, das sind 230 kByte. ich denke das man 
die schnell genug an so ein Disp bekommt wenn man 16 GPIO benutzt. Bei 
1Mhz Datenrate ist das eine 1/10 Sekunde.

Autor: Dominik D. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Gut 16Bit Parallel gehen auch es müssen nicht die 18Bit sein.

Ich hab mal im Datenblatt nachgeschaut:
Der S12 besitzt sowas wie ein "External Bus Interface" welches wohl 
eigentlich gedacht ist um einen externen Speicher anzusprechen.

Im vergleich zu einem Ateml (At90CAN128) sind beim S12 jedoch Adressen- 
und Datenbus seperat rausgeführt also nicht gemultiplext.

Wenn ich das richtig verstehe würde ich jetzt einfach die Adressleitung 
offen lassen und die 16 Bit breite Datenleitung einfach an den 16 Bit 
Bus des Grafikcontrollers anschließen.

Eine Übertragung eines Bildes würde dann grob so aussehen.
1. Chipselect "NCS" des Displays auf low setzen
2. DNC_SCL auf low setzten um die nachfolgenden Daten als COMMAND
   zu kennzeichnen.
3. Schreiben von 0x22 ins Indexregister
4. DNC_SCL wieder auf high setzten
5. 16 Bit Daten auf den Datenbus legen in dem man an irgend eine externe
   Adresse schreibt.
6. Kennzeichnen der gültigen Daten mittels E_NWR
7. ...
8. ...


Die Steuersignale müsste ich dann aber immer noch von Hand setzten.


@Gast
Woher hast du die 1Mhz? ich konnte nirgends finden wie schnell so ein 
Port umschalten kann.
1/10s wären immer noch 100ms was für mich heißt ich erkenne den 
Bildaufbau (Flimmern ect.)+


Im Anhang noch der Auszug aus dem Datenblatt für das External Bus 
Interface

gruß

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also du kannst das dann doch 18bit breit anschließen.
du nuzt einfach noch 2bit der Adresse als "daten" + 1 bit der Adress für 
Kommand/Daten umschaltung
wenn du einen Wert A = 18 bit schreiben willst mußt du dann
 16bit von A an die Externe Adresse von
X...X(Anfang belibig)1/0(für schreiben lesen...)aa(die beiden restlichen 
bits der Daten). Dann den schreibimpuls des Displays an den 
Schreibimpuls des controllers, dan nimmt dir der kontroller die Sache 
ab, du stuerst den dann halt durch shcreiben der Daten an die "richtige" 
Adresse.

Hoffe das sit verständlich wie ich das meine ;)

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>enn ich das richtig verstehe würde ich jetzt einfach die Adressleitung
>offen lassen und die 16 Bit breite Datenleitung einfach an den 16 Bit
>Bus des Grafikcontrollers anschließen.

Würde ich anders tun:
die 16bit Daten so wie du geschrieben hast, aber:
ich würde die Leitungen RE und WE des Controllers (low aktiv) über eine 
Logik (wahrsch. NOR) so ändern, dass damit direkt RW_NRD und E_NWR (was 
sind das für scheißnamen?) angesteuert werden können. A1..A22, oder 
einige davon, würde ich über ein Adresskomparator legen und an NCS 
klemmen. A0 würde ich an DNC_SCL anklemmen, zur Unterscheidung der 
(vier) Register.

Das gibt folgenden VOrteil:
>1. Chipselect "NCS" des Displays auf low setzen
>2. DNC_SCL auf low setzten um die nachfolgenden Daten als COMMAND
>   zu kennzeichnen.
>3. Schreiben von 0x22 ins Indexregister
>4. DNC_SCL wieder auf high setzten
>5. 16 Bit Daten auf den Datenbus legen in dem man an irgend eine externe
>   Adresse schreibt.
>6. Kennzeichnen der gültigen Daten mittels E_NWR

Das wird dann automatisch gemacht, wenn du per Software 
Lese/Schreibbefehl auf das scheinbar vorhandene externe Ram zugreifst. 
In einem Takt, und nicht, wie bei dir, in sechs.

Autor: Dominik D. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

hat etwas länger gedauert bis ich wieder antworte, aber ich musste 
erstmal klären ob ich das mit dem Display jetzt so angehen kann wie ich 
wollte.

Folgender stand bis jetzt:
Ich soll in der nächsten Zeit einen ersten Prototypen erstellen auf dem 
die ganze Displaygeschichte und noch einige andere Sachen getest werden 
sollen.
Um möglichst keine Änderungen am Layout mehr vornehmen zu müssen würde 
ich euch bitte mal über das Bild im Anhang zu schauen.

Natürlich fehlen noch die Versorgungsleitungen und diverse andere Pins 
aber die sind ja hier unwichtig.

Ach ja vielleicht noch wichtig: Ich möchte das Display im M68 Modus 
benutzen, da passen die Steuersignale besser zu dennen des Freescales.

gruß
Dominik

Autor: Dominik D. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Mist ganz vergesesn hier noch die Pinbelegung des Grafikcontrollers und 
des S12XE

Autor: Dominik D. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann mir dazu keiner was sagen?

Autor: Karl M. (movex)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es kommt evt. auch eine andere Lösung in Frage, das Display über den 
Xgate Coprozessor anzusteuern. Es gibt dazu auch zwei Aplication Notes, 
AN3219 und AN3493 mit Codebeispielen. Vorteil, man kann beliebige IO 
pins nehmen und so evt. ein kleineres Package wählen. Prinzipiell kann 
man so auch ohne die CPU zu belasten ein 18-bit Interface ertsellen.

Die Grenze für die IO Pins beim aktuellen S12 liegt bei ~8 Mhz. Das war 
jedenfalls die Taktrate dich ich beim Einbinden eines MFR4310 an den S12 
erreicht hatte.

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.