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.