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
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.
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.
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.
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 :)
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
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
"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
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.