M
mobile-it
Guest
Hi all,
Ik vond een lcd-controller voor gebruik op mijn FPGA.maar als ik probeer om wat tekst te schrijven, toont het de tekst, maar zijn er 2 kleine problemen in.
Ik wil het display van de tekst: "XIOS http://www.fpga.be", maar dit leidt tot (op het LCD-scherm): http:/ "www.fpgf.be XIOS".Kan iemand me helpen?Heel veel dank u!
Code:
library IEEE;
gebruik IEEE.STD_LOGIC_1164.ALL;
gebruik IEEE.STD_LOGIC_ARITH.ALL;
gebruik IEEE.STD_LOGIC_UNSIGNED.ALL;entiteit LCD is
Port (lcd_data: out std_logic_vector (7 Downto 4);
clk: in std_logic;
reset: in std_logic;
lcd_enable: out std_logic;
lcd_rs: out std_logic;
lcd_rw: out std_logic);
end LCD;architectuur gedrag van LCD istype state_type is (opwarmen, setfunc, clear1, clear2, setmode1, setmode2, write1, home1, home2);signaal staat: state_type;attribuut syn_state_machine: Boolean;
attribuut syn_state_machine van de staat: signaal is waar;signaal count: std_logic_vector (3 Downto 0);
signaal af: std_logic; - set hoog zijn, indien gedaan schrijven cyclussignaal char_mode: std_logic_vector (1 Downto 0);- het bepalen van de display
constante N: integer: = 8;
type arr is array (1 tot N) van std_logic_vector (7 Downto 0);
constante display_char1: arr.: = (X "A0", - blanco
x "68", - h
x "74", - t
X "74", - t
X "70", - p
X "3A", -:
X "2F", - /
X "2F"); - /constante display_char2: arr.: = (X "77", - w
x "77", - w
x "77", - w
X "2E", --.
X "66", - f
X "70", - p
X "67", - g
X "61"); - eenconstante display_char3: arr.: = (X "2E", --.
x "62", - b
x "65", - e
X "88", - blanco
X "88", - blanco
X "88", - blanco
X "88", - blanco
X "88"); - blancoconstante display_char4: arr.: = (X "A0", - blanco
X "88", - blanco
x "58", - X
x "49", - I
X "4F", - O
X "53", - S
X "88", - blanco
X "88"); - blancosignaal display_char: arr;beginnen
lcd_rw <= '0 ';
lcd_enable <= clk; - niet clk, - dit is zeer belangrijk!
indien mogelijk niet gepulst, lcd zal niet schrijvenchar_mode_process: proces (char_mode)
beginnen
geval char_mode is
wanneer "00" =>
display_char <= display_char1;
wanneer "01" =>
display_char <= display_char2;
wanneer "10" =>
display_char <= display_char3;
wanneer "11" =>
display_char <= display_char4;
wanneer anderen =>
display_char <= display_char1;
einde geval;
einde processtate_set: proces (clk, reset, afgewerkt)
beginnen
indien reset = '1 'dan
count <= (others => '0 ');
toestand <= opwarmen, - setfunc;
char_mode <= (others => '0 ');elsif (clk'event en clk = '1 ') then
geval staat
wanneer Warmup =>
lcd_rs <= '0 ';
lcd_data <= "0011", - "0000"; - niets doen
Als count = "0111" dan - 0111
count <= (others => '0 ');
state <= setfunc;
anders
count <= count '1 ';
state <= Warmup;
end if;wanneer setfunc =>
lcd_rs <= '0 ';
lcd_data <= "0010";
afgewerkte <= '0 ';Als count = "0010" dan - 0010
count <= (others => '0 ');
state <= clear1;
anders
count <= count '1 ';
state <= setfunc;
end if;wanneer clear1 =>lcd_rs <= '0 ';
lcd_data <= "0000";
state <= clear2;wanneer clear2 =>
lcd_rs <= '0 ';
Als count = "0111" dan
state <= setmode1;
count <= (others => '0 ');
lcd_data <= "1111";
anders
count <= count '1 ';
lcd_data <= "0001";
state <= clear1;
end if;wanneer setmode1 =>
lcd_rs <= '0 ';
lcd_data <= "0000";
state <= setmode2;
afgewerkte <= '0 ';wanneer setmode2 =>
lcd_rs <= '0 ';
lcd_data <= "0110";
state <= write1;wanneer write1 =>
als klaar = '1 'dan
state <= home1;
anders
lcd_rs <= '1 ';
count < count = '1 ';
state <= write1;
ZAAK telling
WHEN "0000" =>
lcd_data <= display_char (1) (7 Downto 4);
WHEN "0001" =>
lcd_data <= display_char (1) (3 Downto 0);
WHEN "0010" =>
lcd_data <= display_char (2) (7 Downto 4);
WHEN "0011" =>
lcd_data <= display_char (2) (3 Downto 0);
WHEN "0100" =>
lcd_data <= display_char (3) (7 Downto 4);
WHEN "0101" =>
lcd_data <= display_char (3) (3 Downto 0);
WHEN "0110" =>
lcd_data <= display_char (4) (7 Downto 4);
WHEN "0111" =>
lcd_data <= display_char (4) (3 Downto 0);
WHEN "1000" =>
lcd_data <= display_char (5) (7 Downto 4);
WHEN "1001" =>
lcd_data <= display_char (5) (3 Downto 0);
WHEN "1010" =>
lcd_data <= display_char (6) (7 Downto 4);
WHEN "1011" =>
lcd_data <= display_char (6) (3 Downto 0);
WHEN "1100" =>
lcd_data <= display_char (7) (7 Downto 4);
WHEN "1101" =>
lcd_data <= display_char (7) (3 Downto 0);
WHEN "1110" =>
lcd_data <= display_char (8) (7 Downto 4);
klaar <= '1 '; - nodig is om laag ingesteld gedaan voordat geldige gegevens is gone
char_mode <= char_mode '1 ';
Wanneer anderen =>
lcd_data <= "0000", - "
END CASE;
end if;
wanneer home1 =>
lcd_rs <= '0 ';
lcd_data <= "0000";
state <= home2;
afgewerkte <= '0 ';
count <= (others => '0 ');
wanneer home2 =>
lcd_rs <= '0 ';
lcd_data <= "0111";
state <= write1;
einde geval;
end if;
einde procesend gedrag;
Ik vond een lcd-controller voor gebruik op mijn FPGA.maar als ik probeer om wat tekst te schrijven, toont het de tekst, maar zijn er 2 kleine problemen in.
Ik wil het display van de tekst: "XIOS http://www.fpga.be", maar dit leidt tot (op het LCD-scherm): http:/ "www.fpgf.be XIOS".Kan iemand me helpen?Heel veel dank u!
Code:
library IEEE;
gebruik IEEE.STD_LOGIC_1164.ALL;
gebruik IEEE.STD_LOGIC_ARITH.ALL;
gebruik IEEE.STD_LOGIC_UNSIGNED.ALL;entiteit LCD is
Port (lcd_data: out std_logic_vector (7 Downto 4);
clk: in std_logic;
reset: in std_logic;
lcd_enable: out std_logic;
lcd_rs: out std_logic;
lcd_rw: out std_logic);
end LCD;architectuur gedrag van LCD istype state_type is (opwarmen, setfunc, clear1, clear2, setmode1, setmode2, write1, home1, home2);signaal staat: state_type;attribuut syn_state_machine: Boolean;
attribuut syn_state_machine van de staat: signaal is waar;signaal count: std_logic_vector (3 Downto 0);
signaal af: std_logic; - set hoog zijn, indien gedaan schrijven cyclussignaal char_mode: std_logic_vector (1 Downto 0);- het bepalen van de display
constante N: integer: = 8;
type arr is array (1 tot N) van std_logic_vector (7 Downto 0);
constante display_char1: arr.: = (X "A0", - blanco
x "68", - h
x "74", - t
X "74", - t
X "70", - p
X "3A", -:
X "2F", - /
X "2F"); - /constante display_char2: arr.: = (X "77", - w
x "77", - w
x "77", - w
X "2E", --.
X "66", - f
X "70", - p
X "67", - g
X "61"); - eenconstante display_char3: arr.: = (X "2E", --.
x "62", - b
x "65", - e
X "88", - blanco
X "88", - blanco
X "88", - blanco
X "88", - blanco
X "88"); - blancoconstante display_char4: arr.: = (X "A0", - blanco
X "88", - blanco
x "58", - X
x "49", - I
X "4F", - O
X "53", - S
X "88", - blanco
X "88"); - blancosignaal display_char: arr;beginnen
lcd_rw <= '0 ';
lcd_enable <= clk; - niet clk, - dit is zeer belangrijk!
indien mogelijk niet gepulst, lcd zal niet schrijvenchar_mode_process: proces (char_mode)
beginnen
geval char_mode is
wanneer "00" =>
display_char <= display_char1;
wanneer "01" =>
display_char <= display_char2;
wanneer "10" =>
display_char <= display_char3;
wanneer "11" =>
display_char <= display_char4;
wanneer anderen =>
display_char <= display_char1;
einde geval;
einde processtate_set: proces (clk, reset, afgewerkt)
beginnen
indien reset = '1 'dan
count <= (others => '0 ');
toestand <= opwarmen, - setfunc;
char_mode <= (others => '0 ');elsif (clk'event en clk = '1 ') then
geval staat
wanneer Warmup =>
lcd_rs <= '0 ';
lcd_data <= "0011", - "0000"; - niets doen
Als count = "0111" dan - 0111
count <= (others => '0 ');
state <= setfunc;
anders
count <= count '1 ';
state <= Warmup;
end if;wanneer setfunc =>
lcd_rs <= '0 ';
lcd_data <= "0010";
afgewerkte <= '0 ';Als count = "0010" dan - 0010
count <= (others => '0 ');
state <= clear1;
anders
count <= count '1 ';
state <= setfunc;
end if;wanneer clear1 =>lcd_rs <= '0 ';
lcd_data <= "0000";
state <= clear2;wanneer clear2 =>
lcd_rs <= '0 ';
Als count = "0111" dan
state <= setmode1;
count <= (others => '0 ');
lcd_data <= "1111";
anders
count <= count '1 ';
lcd_data <= "0001";
state <= clear1;
end if;wanneer setmode1 =>
lcd_rs <= '0 ';
lcd_data <= "0000";
state <= setmode2;
afgewerkte <= '0 ';wanneer setmode2 =>
lcd_rs <= '0 ';
lcd_data <= "0110";
state <= write1;wanneer write1 =>
als klaar = '1 'dan
state <= home1;
anders
lcd_rs <= '1 ';
count < count = '1 ';
state <= write1;
ZAAK telling
WHEN "0000" =>
lcd_data <= display_char (1) (7 Downto 4);
WHEN "0001" =>
lcd_data <= display_char (1) (3 Downto 0);
WHEN "0010" =>
lcd_data <= display_char (2) (7 Downto 4);
WHEN "0011" =>
lcd_data <= display_char (2) (3 Downto 0);
WHEN "0100" =>
lcd_data <= display_char (3) (7 Downto 4);
WHEN "0101" =>
lcd_data <= display_char (3) (3 Downto 0);
WHEN "0110" =>
lcd_data <= display_char (4) (7 Downto 4);
WHEN "0111" =>
lcd_data <= display_char (4) (3 Downto 0);
WHEN "1000" =>
lcd_data <= display_char (5) (7 Downto 4);
WHEN "1001" =>
lcd_data <= display_char (5) (3 Downto 0);
WHEN "1010" =>
lcd_data <= display_char (6) (7 Downto 4);
WHEN "1011" =>
lcd_data <= display_char (6) (3 Downto 0);
WHEN "1100" =>
lcd_data <= display_char (7) (7 Downto 4);
WHEN "1101" =>
lcd_data <= display_char (7) (3 Downto 0);
WHEN "1110" =>
lcd_data <= display_char (8) (7 Downto 4);
klaar <= '1 '; - nodig is om laag ingesteld gedaan voordat geldige gegevens is gone
char_mode <= char_mode '1 ';
Wanneer anderen =>
lcd_data <= "0000", - "
END CASE;
end if;
wanneer home1 =>
lcd_rs <= '0 ';
lcd_data <= "0000";
state <= home2;
afgewerkte <= '0 ';
count <= (others => '0 ');
wanneer home2 =>
lcd_rs <= '0 ';
lcd_data <= "0111";
state <= write1;
einde geval;
end if;
einde procesend gedrag;