www.mikrocontroller.net

Forum: FPGA, VHDL & Co. LCD von TerAsic mit Cyclone II von Altera


Autor: Plau Sein (radih)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ich verwende das externe Display von Terasic TRDB-LCM mit 
Spezifikationen(TPG051 Spec 1 3) im Anhang

ich habe die demo programme angeschaut(die waren in Verilog) und habe 
nach dem gleichen Schema in vhdl etwas geschrieben. Es funktioniert, 
aber jetzt will ich es richtig verstanden haben. Man verwendet ein 
controller.vhd und ein config.vhd

im controller.vhd wird bis von 0 bis 16 bits gegangen und das 
initialisierungsdata vom config.vhd wird abgelesen

im config.vhd stehen schleifen , die nach und nach 16 bit initdata zum 
controller.vhd schicken.

ich gehe davon aus, dass diese 16 bits etwas mit der spezifikationen aus 
dem TPG051 Spec 1 3. pdf file zu tun haben(seite 17 bis 25)

kann mir einer sagen wie das genau passieren soll.
im demo file fuer color pattern sind folgende 16 bits init data 
vorgegeben:

case lut_index is
    when 0 =>
      lut_data <= "000010" & "00" & "00000010";
    when 1 =>
      lut_data <= "000011" & "00" & "00000001";
    when 2=>
      lut_data <= "000100" & "00" & "00111111";
    when 3=>
      lut_data <= "001001" & "00" & "00100000";
    when 4=>
      lut_data <= "010000" & "00" & "00111111";
    when 5=>
      lut_data <= "010001" & "00" & "00111111";
    when 6=>
      lut_data <= "010010" & "00" & "00101111";
    when 7=>
      lut_data <= "010011" & "00" & "00101111";
    when others=>
      lut_data <= "000000" & "00" & "00000000";
end case;

im controller.vhd werden die bits von vorne abgeselen:

  if (mst < 17) then
  mst <= mst+1;
  end if;
  if (mst < 16) then
    msdata <= idata(15 - mst);
  end if;


danke im voraus

Autor: Rick Dangerus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn es funktioniert, dann schau es Dir doch mal im Simulator an. 
Vielleicht hilft Dir das beim Verständnis.

Rick

P.S.: Kauf Dir mal 'ne Tüte Großbuchstaben.

Autor: Plau Sein (radih)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da hast du mit den Grossbuchstaben recht :)

Nun wegen der Simulation. Ich habe es simuliert und geschaut was da bei 
mir alles passiert und festgestellt, dass sich das Initdata in meinem 
Fall gar nicht veraendert. Es kommt gar nicht zum lut_index=1 oder 2 ...
lut_index bleibt auf 0. Ich nehme an, dass im Demoprogramm lut_index bis 
7 geht, da vermutlich wenn das Display fuer komplexere Sachen benutzt 
wird(DVD Player oder sonstiges), mehr Initdata gebraucht wird.

Wie das Spiel mit dem Initdata funktioneirt ist es mir klar. Ich kann es 
leicht vom VHDL Code mit und ohne Simulation nachvollziehen. Ich 
verstehe nur nicht, wie dieses Initdata gebaut ist.
IM PDF steht die Spezifikation drin, aber ich kann sie nicht 
nachvollziehen.
Z.B. will ich dass das Display im RGB Through Mode empfaengt, also muss 
ich eine Sequenz "10" irgendwann schicken...(da RGB Through bei 2 ist).

Und ich nehme an, dass diese 16 Bits solche Informationen enthalten, 
aber wie die Anordnung der Bits ist, wo meine 2 Bits fuer das Mode 
stehen sollen, wo die andere Bits stehen sollen, weiss ich nicht..

Mein Display so wie das Data jetzt aussieht, muss in Through Mode 
empfangen, aber das Initdata sieht so aus:

lut_data <= "000010" & "00" & "00000010";

10 kommt vor an zwei Stellen. In der Spezifikation aber ist das Mode an 
erster Stelle kodiert. Und wie die andere Konfigurationen jetzt 
eingestellt sind, weiss ich nicht. Deswegen kann ich keine 
Rueckschluesse ziehen.

Autor: Rick Dangerus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mir das .pdf nicht angeschaut und weiß auch nicht, wie Dein 
Display angesteuert werden muß. Aber hier hast Du ein Beispiel 
vorliegen, wie man vhdl (bzw. Code generell) nicht schreiben sollte.

Ich guck bei mir (leider noch zu selten) nach ein paar Tagen nochmal in 
den Code, um Unklarheiten richtig zu kommentieren.

Rick

P.S.: Dein

lut_data <= "000010" & "00" & "00000010";

kannst Du auch so schreiben:

lut_data <= "0000100000000010";

Das ist alles parallel.

Autor: Plau Sein (radih)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dass ich es zusammen schreiben kann ich es mir schon klar...

es nur aus leserlichen Gruenden so geschrieben

aber das ist nicht mein problem :)

und du hast leider nicht ueber mein problem etwas geschrieben

also gute nacht noch :)

Autor: Rick Dangerus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok.

Schau mal auf Seite 16 in Deinem Datenblatt. Dort sieht man das "Format" 
der Konfigurationsdaten: 6 Adressbits, R/W, Hiz, 8 Datenbits.

In Register
R02 landet 0x02 (input data format = through mode, Rest = 0)
R03 langet 0x01 (select interlace mode = non-interlace, Rest = 0)
R04 landet 0x3f (powermäßig alles an, driver = 100%)
R09 landet 0x10 (Gain contrast = 0x10, ca. 0.5)
 usw. usf.

Es hat so ziemlich jedes Bit eine Bedeutung. Deine beiden Dateien sorgen 
dafür, daß das Timing von Seite 16 eingehalten wird und der Controller 
per SPI ein paar neue Konfigurationsinformationen bekommt.

Spiel doch mal ein bisschen an den Werten rum. Mit dem Kontrastregister 
z.B. dürftest Du nichts kaputtbekommen.

Rick

Autor: Plau Sein (radih)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank Rick Dangerus,

Ich frage mich, wieso ich nicht selber drauf gekommen bin :)
Das ist ja so einfach im PDF erklaert. Aber jetzt habe ich es entgueltig 
verstanden

Danke nochmals

Autor: Plau Sein (radih)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"schau mal auf Seite 16 in Deinem Datenblatt. Dort sieht man das 
"Format"
der Konfigurationsdaten: 6 Adressbits, R/W, Hiz, 8 Datenbits."

Wie ich davor gesagt habe, habe ich mit euerer Hilfe verstanden, wie die 
Adressierung von Konfigurationsdata funktioniert.

Aber ich weiss nicht was dieses HiZ 1 Bit bedeutet.
Und R/W ist bei 0 bzw. 1 read oder write ?

Danke

Autor: Rick Dangerus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Aber ich weiss nicht was dieses HiZ 1 Bit bedeutet.
http://de.wikipedia.org/wiki/Tri-State#hochohmiger...

> Und R/W ist bei 0 bzw. 1 read oder write ?
Vermutlich. Aus dem Datenblatt geht es nicht hervor, nur aus Deinem 
Code. Besser wäre sie hätten #R/W geschrieben, das wäre eindeutig.

Rick

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]
  • [vhdl]VHDL-Code[/vhdl]
  • [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.