www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Problem bei LCD Ansteuerung


Autor: Markus Mühlbacher (kexxs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich muss für ein Schulprojekt einen LCD Display ansteuern. In meinen 
Projekt lese ich von einer Kamera Signale ein, bearbeite sie am FPGA 
Board und gebe sie auf einem Monitor aus.

Hitachi Display:

http://docs-europe.electrocomponents.com/webdocs/0...

Am Anfang versuchte ich es auf einen herkömmlichen VGA Monitor, das hab 
ich zusammengebracht, ich veränderte die Ansteuerung damit es den LCD 
gerecht wird. Danach traten die Probleme auf. Also muss das Problem 
direkt bei der LCD Ansteuerung liegen, und nicht bei der Initialisierung 
der Kamera.

Ich schaffe es ein Bild auszugeben, jedoch friert das Bild ein(es zeigt 
nur den ersten Frame der von der Kamera aufgenommen wurde an), danach 
wird der Display immer mehr weiß, bis das Ursprungsbild nicht mehr zu 
erkennen ist, und nur noch ein weißes Bild zu sehen ist.

Wenn ich einen Software Reset auslöse, ist wieder der erste Frame, der 
von der Kamera nach dem Reset ausgenommen wurde zu sehen, und das Bild 
beginnt wieder Weiß zu werden.

Ich bin schon leicht verzweifelt weil ich schon das Meiste ausprobiert 
habe, jedoch ist mir noch unklar, welchen genauen Zweck das Signal PCI 
hat. Vielleicht liegt es auch an den horizontal Sync und vertical Sync.

Hier mein Programm für Displayansteuerung, die Kamerasignal wurden für 
Testzwecke durch fixe Signal ersetzt.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity Displayausgabe is
port(
    clk  : in std_logic;
     enable : in std_logic;
     data6_in : in std_logic_vector(5 downto 0);
     data6_in_sram : in std_logic_vector(5 downto 0);
       red_out1   : out std_logic;
     red_out2   : out std_logic;
     red_out3   : out std_logic;
     red_out4   : out std_logic;
     red_out5   : out std_logic;
     red_out0   : out std_logic;
       green_out1 : out std_logic;
     green_out2 : out std_logic;
     green_out3 : out std_logic;
     green_out4 : out std_logic;
     green_out5 : out std_logic;
     green_out0 : out std_logic;
       blue_out1  : out std_logic;
     blue_out2  : out std_logic;
     blue_out3  : out std_logic;
     blue_out4  : out std_logic;
     blue_out5  : out std_logic;
     blue_out0  : out std_logic;
     pci : out std_logic;
     vctrl : out std_logic;
     dtmg : out std_logic;
     hc_signal : out std_logic_vector(8 downto 0);
     vc_signal : out std_logic_vector(8 downto 0);
     hs_out    : out std_logic
);

end Displayausgabe;

architecture Behavioral of Displayausgabe is

signal horizontal_counter : std_logic_vector (8 downto 0);
signal vertical_counter : std_logic_vector (8 downto 0);
signal clkcount : std_logic_vector (3 downto 0);
signal clkdiv8 : std_logic;
signal Linelength : std_logic_vector(8 downto 0);
signal Columlength : std_logic_vector(8 downto 0); 
signal Counter : std_logic_vector(18 downto 0); 

begin

process(clk)

begin

if rising_edge(clk) then


  if (enable = '1' and vertical_counter = "0000000000")  then
  
  vctrl <= '0'; 
  dtmg <= '0';
  hs_out <= '0';

  horizontal_counter <= "000000000";
  
  

  else 

  vctrl <= '1'; 
  Linelength <= "010110001" ; --177
  Columlength <= "010010000"; --144
    
  horizontal_counter <= horizontal_counter+"0000000001";
   
    if (horizontal_counter="100010001") then --273
    horizontal_counter <= "000000000";
    vertical_counter <= vertical_counter + '1';
    end if;
   
    if vertical_counter = "101000111" then -- 327 
    vertical_counter <= "000000000";
   
    pci <= '0' ;
    horizontal_counter <= "000000000";
    end if;
    
    
    
    
    if (horizontal_counter > "000000000" )
      and (horizontal_counter < "11111100" ) -- 252
    then
      hs_out <= '1';
    else
    hs_out <= '0';
    end if;

  
  vc_signal <= vertical_counter;
    
    if (horizontal_counter > "000000001" )and (horizontal_counter < "011110011" )    then-- zwichen 1 und 243 sing genau 240 
 
      dtmg <= '1';
    pci <= '1';
    hc_signal <= horizontal_counter - "000000001";  -- dient zum Ansteuern des Dualport ram für diese 
    
    else
      dtmg <= '0';
    pci <= '0';
    
    hc_signal <= "000000000";
    end if;


    green_out5 <= '0'; -- MSB
    green_out4 <= '0';
    green_out3 <= '0';
    green_out2 <= '0';
    green_out1 <= '0';
    green_out0 <= '0';
  
    blue_out5 <= '0'; -- MSB
    blue_out4 <= '0';
    blue_out3 <= '0';
    blue_out2 <= '0';
    blue_out1 <= '0';
    blue_out0 <= '0';
  
    red_out5 <= '1'; --MSB
    red_out4 <= '0';
    red_out3 <= '1';
    red_out2 <= '0';
    red_out1 <= '1';
    red_out0 <= '0';
    
        end if;
  end if;
end process;
end Behavioral;
 


Hoffe auf baldige Antworten.

Mit freundlichen Grüßen Kexxs

Autor: Roger Steiner (edge)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Markus Mühlbacher wrote:
> Ich schaffe es ein Bild auszugeben, jedoch friert das Bild ein(es zeigt
> nur den ersten Frame der von der Kamera aufgenommen wurde an), danach
> wird der Display immer mehr weiß, bis das Ursprungsbild nicht mehr zu
> erkennen ist, und nur noch ein weißes Bild zu sehen ist.

Deine DTMG generierung ist nicht ganz richtig, du musst waehrend der 
vblank time DTMG deaktivieren, sonst kann das LCD den vsync nicht 
zurueckgewinnen.

> Hier mein Programm für Displayansteuerung, die Kamerasignal wurden für
> Testzwecke durch fixe Signal ersetzt.

warum nimmst du fuer die RGB daten keine vektoren?

Falls du lust hast, ich hab einen test timing generator angehaengt, 
allerdings fuer ein kleineres Hitachi Display, du musst nur die Werte 
vom Datenblatt uebernehmen und den clock divider auf SYSCLK/PIXELCLK 
setzen.

Cheers, Roger

Autor: Markus Mühlbacher (kexxs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Roger war wirklich das Problem, mit DTMG und VSYNC, wäre schon 
fast verzweifelt^^

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.