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


von Plau S. (radih)


Angehängte Dateien:

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

von Rick Dangerus (Gast)


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.

von Plau S. (radih)


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.

von Rick Dangerus (Gast)


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.

von Plau S. (radih)


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 :)

von Rick Dangerus (Gast)


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

von Plau S. (radih)


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

von Plau S. (radih)


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

von Rick Dangerus (Gast)


Lesenswert?

> Aber ich weiss nicht was dieses HiZ 1 Bit bedeutet.
http://de.wikipedia.org/wiki/Tri-State#hochohmiger_Zustand_.28Z.29

> 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

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
Noch kein Account? Hier anmelden.