Bonjour,
J'essaye depuis un petit bout de temps de faire fonctionner un écran LCD d'une carte Xilinx Spartan 3A (controlé par un PicoBlaze) en mode 8 bits sans beaucoup de résultats. La séquence d'initialisation n'a pas l'air de bien se passer et j'arrive pas à comprendre pourquoi.
Voici le code VHDL que j'ai fait pour l'initialisation:
process(clk)
variable cpt : integer:=0;
variable temp : integer:=1000000;
begin
if clk='1' and clk'event then
if reset='1' then
cpt:=0;
endtemp<='0';
reset<='0';
end if;
if cpt=temp then
endtemp<='1';
else
cpt:=cpt+1;
end if;
case etat is
when s0 =>
if endtemp='1' then
rs<='0';
rw<='0';
lcd_bus(7 downto 4)<="0011";
reset<='1';
etat<=s1;
flag<='0';
end if;
when s1 => -- s1 and s2 handle the enable signal pulses
if flag='0' then
temp:=2;
flag<='1';
end if;
if endtemp='1' then
enable<='1';
reset<='1';
etat<=s2;
flag<='0';
end if;
when s2 =>
if flag='0' then
temp:=25;
flag<='1';
end if;
if endtemp='1' then
enable<='0';
reset<='1';
etat<=nextstate;
flag<='0';
end if;
when s3 => -- 8 bit mode
if flag='0' then
temp:=250000;
flag<='1';
end if;
if endtemp='1' then
rs<='0';
rw<='0';
lcd_bus(7 downto 4) <="0011";
reset<='1';
etat<=s1;
nextstate<=s4;
flag<='0';
end if;
when s4 =>
if flag='0' then
temp:=7000;
flag<='1';
end if;
if endtemp='1' then
rs<='0';
rw<='0';
lcd_bus(7 downto 4)<="0011";
reset<='1';
etat<=s1;
nextstate<=s5;
flag<='0';
end if;
when s5 =>
if flag='0' then
temp:=3000;
flag<='1';
end if;
if endtemp='1' then
reset<='1';
etat<=s6;
flag<='0';
end if;
-- Function Set
when s6 =>
rs<='0';
rw<='0';
lcd_bus<="00111000";
reset<='1';
etat<=s1;
nextstate<=s7;
flag<='0';
-- Entry Mode Set
when s7 =>
if flag='0' then
temp:=2000;
flag<='1';
end if;
if endtemp='1' then
rs<='0';
rw<='0';
lcd_bus<="00000110";
reset<='1';
etat<=s1;
nextstate<=s8;
flag<='0';
end if;
-- Display On/Off
when s8 =>
if flag='0' then
temp:=2000;
flag<='1';
end if;
if endtemp='1' then
rs<='0';
rw<='0';
lcd_bus<="00001111"; -- Display On / Blinking cursor
reset<='1';
etat<=s1;
nextstate<=s9;
flag<='0';
end if;
-- Clear Display
when s9 =>
if flag='0' then
temp:=2000;
flag<='1';
end if;
if endtemp='1' then
rs<='0';
rw<='0';
lcd_bus<="00000001";
reset<='1';
etat<=s1;
nextstate<=s10;
flag<='0';
end if;
when s10 =>
if flag='0' then
temp:=85000;
flag<='1';
end if;
if endtemp='1' then
reset<='1';
etat<=s11;
flag<='0';
end if;
______________________________ ______________________________ _____
Si qqn a une idée sur ce qui va pas, et surtout la patience de lire le code, ce serait sympa de me donner un petit coup de main. Je suis débutant en VHDL et un peu à la ramasse.
Je vous remercie.
-----