Vhdl'de Lcd'ye değişken yazdırmak.

Başlatan vitruvius, 06 Mayıs 2012, 13:47:16

vitruvius

Merhaba, elimde Spartan-3E Starter Kit var. Buradaki Lcd'ye istediğim yazıları yazdırabiliyorum, fakat bir türlü bir değişkeni yazdıramadım. Lcd için Turkplc hocamızın kodunu kullanıyorum. Ayrı olarak da kendi tasarladığım bir butona her bastığımda değeri "1" artan bir integer değerim var. Ben bu integer değerini, yani butona kaç kere bastığımı lcd'de görmek istiyorum.

Tüm kod aşağıda:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity tplcdvebuton is
port (
		 buton : in std_logic;
		 led : out std_logic_vector(7 downto 0);
		 clk : in std_logic;		 
		 DB : out  STD_LOGIC_VECTOR (7 downto 4); 
       LCD_E :out STD_LOGIC;
       LCD_RS :out STD_LOGIC;
       LCD_RW :out STD_LOGIC
);
end tplcdvebuton;

architecture Behavioral of tplcdvebuton is
--------------- Buton ve Debounce için Kullanılan Signal'ler ----------------
signal counter : integer range 0 to 15000000;
signal buton_b : std_logic;
signal buton_g : std_logic;
signal sayac : integer range 0 to 8;
signal ledg : std_logic_vector(7 downto 0);
-----------------------------------------------------------------------------

--------------- Lcd için Kullanılan Signal'ler ------------------------------
Signal StopTimer:std_logic;
Signal DATA : STD_LOGIC_VECTOR (7 downto 0);
-----------------------------------------------------------------------------

begin
	led <= ledg;

	process(clk) -- Debounce
    begin
        if(clk'event and clk='1') then
            if(buton_b <= '1') then
            counter<=counter+1;
            buton_g<='0';
            elsif(buton='1') then
            buton_b<='1';
            end if;
                if(counter=15000000) then --300ms
                counter<=0;
                buton_b<='0';
                    if(buton='1') then
                    buton_g<='1';
                    end if;
                end if;
        end if;
    end process;
    
    process(clk) --Sayaç
    begin
		if(clk'event and clk='1') then
			if(buton_g='1') then
			sayac<=sayac+1;
					if(sayac=8) then
					sayac<=0;
					end if;
			end if;
		end if;
    end process;
    
    process(sayac)
    begin
        case sayac is
            when 0 => ledg <= "00000000";
            when 1 => ledg <= "00000001";
            when 2 => ledg <= "00000010";
            when 3 => ledg <= "00000100";
            when 4 => ledg <= "00001000";
            when 5 => ledg <= "00010000";
            when 6 => ledg <= "00100000";
            when 7 => ledg <= "01000000";				
            when others => ledg <= "10000000";
        end case;
   end process;
	
	------------------------------------- LCD ------------------------------------
	process (clk)
    variable say1:integer;
    variable say2:integer;
    begin
    if (clk'EVENT and clk='1') then
    if (StopTimer='0') then 
    say1:=say1+1;
    end if;				
        if (say1>50000) then	--1 KHZ
        say1:=0;
        say2:=say2+1;
            case say2 is
            when 90=>
                LCD_RW<='0';
                LCD_RS<='0'; --CMD
                DB<="0011";
            when 99=>LCD_E<='1';
            when 100=>LCD_E<='0';
            when 115=>LCD_E<='1';
            when 116=>LCD_E<='0';
            when 121=>LCD_E<='1';
            when 122=>LCD_E<='0';
            when 127=>DB<="0010";
            when 128=>LCD_E<='1';
            when 129=>LCD_E<='0';

            
            when 149=>DATA<=X"28";
            when 150=>DB<=DATA(7 downto 4);
            when 151=>LCD_E<='1';			
            when 152=>LCD_E<='0';
            when 153=>DB<=DATA(3 downto 0);
            when 154=>LCD_E<='1';
            when 155=>LCD_E<='0';			
            DATA<=X"08";

            when 156=>DB<=DATA(7 downto 4);
            when 157=>LCD_E<='1';			
            when 158=>LCD_E<='0';
            when 159=>DB<=DATA(3 downto 0);
            when 160=>LCD_E<='1';
            when 161=>LCD_E<='0';				
                DATA<=X"01"; 
            when 162=>
                DB<=DATA(7 downto 4);
            when 163=>LCD_E<='1';			
            when 164=>LCD_E<='0';
            when 165=>DB<=DATA(3 downto 0);
            when 166=>LCD_E<='1';
            when 167=>LCD_E<='0';	
                DATA<=X"06";
            when 168=>
                DB<=DATA(7 downto 4);
            when 169=>LCD_E<='1';			
            when 170=>LCD_E<='0';
            when 171=>DB<=DATA(3 downto 0);
            when 172=>LCD_E<='1';
            when 173=>LCD_E<='0';
                DATA<=X"0C";
            when 174=>
                DB<=DATA(7 downto 4);
            when 175=>LCD_E<='1';			
            when 176=>LCD_E<='0';
            when 177=>DB<=DATA(3 downto 0);
            when 178=>LCD_E<='1';
            when 179=>LCD_E<='0';			
            
            when 180=>LCD_RS<='1'; --Chr
                DATA<=X"54"; --T
            when 181=>
                DB<=DATA(7 downto 4);
            when 182=>LCD_E<='1';			
            when 183=>LCD_E<='0';
            when 184=>DB<=DATA(3 downto 0);
            when 185=>LCD_E<='1';
            when 186=>LCD_E<='0';	
				
                DATA<=X"55"; --U
            when 187=>
                DB<=DATA(7 downto 4);
            when 188=>LCD_E<='1';			
            when 189=>LCD_E<='0';
            when 190=>DB<=DATA(3 downto 0);
            when 191=>LCD_E<='1';
            when 192=>LCD_E<='0';	
				
                DATA<=X"52"; --R
            when 193=>
                DB<=DATA(7 downto 4);
            when 194=>LCD_E<='1';			
            when 195=>LCD_E<='0';
            when 196=>DB<=DATA(3 downto 0);
            when 197=>LCD_E<='1';
            when 198=>LCD_E<='0';
				
                DATA<=X"4B"; --K
            when 199=>
                DB<=DATA(7 downto 4);
            when 200=>LCD_E<='1';			
            when 201=>LCD_E<='0';
            when 202=>DB<=DATA(3 downto 0);
            when 203=>LCD_E<='1';
            when 204=>LCD_E<='0';
				
                DATA<=X"50"; --P
            when 205=>
                DB<=DATA(7 downto 4);
            when 206=>LCD_E<='1';			
            when 207=>LCD_E<='0';
            when 208=>DB<=DATA(3 downto 0);
            when 209=>LCD_E<='1';
            when 210=>LCD_E<='0';
				
                DATA<=X"4C"; --L
            when 211=>
                DB<=DATA(7 downto 4);
            when 212=>LCD_E<='1';			
            when 213=>LCD_E<='0';
            when 214=>DB<=DATA(3 downto 0);
            when 215=>LCD_E<='1';
            when 216=>LCD_E<='0';
				
                DATA<=X"43"; --C
            when 217=>
                DB<=DATA(7 downto 4);
            when 218=>LCD_E<='1';			
            when 219=>LCD_E<='0';
            when 220=>DB<=DATA(3 downto 0);
            when 221=>LCD_E<='1';
            when 222=>LCD_E<='0';
				
					 --DATA std_logic_vector ve sayac integer oldugu için sayac'ı da vector yaptım.
					 DATA<=(conv_std_logic_vector((sayac+48),8));
				when 223=>
                DB<=DATA(7 downto 4);
            when 224=>LCD_E<='1';			
            when 225=>LCD_E<='0';
            when 226=>DB<=DATA(3 downto 0);
            when 227=>LCD_E<='1';
            when 228=>LCD_E<='0';
            
            when 3000=>--StopTimer<='1';
            when others=>
            end case;
        
        end if;
    end if;
    end process;

end Behavioral;


Can alıcı nokta olan:
DATA<=(conv_std_logic_vector((sayac+48),8));
kısmında sayac'ı 0 ile toplayıp yazdırmak istedim. Böyle yapınca ekranda 0 yazır fakat butona bastığımda bu değer değişmiyor. Bu arada ledlerde değişim oluyor.

yamak

Monitöre koordinat bilgisi yazdırmak için yazdığım bi kod vardı onu örenk alabilirsin.
      first_digit_ascii_x1<=std_logic_vector(conv_unsigned((48+first_digit_x1),7));
      second_digit_ascii_x1<=std_logic_vector(conv_unsigned((48+second_digit_x1),7));
      third_digit_ascii_x1<=std_logic_vector(conv_unsigned((48+third_digit_x1),7));
      first_digit_ascii_y1<=std_logic_vector(conv_unsigned((48+first_digit_y1),7));
      second_digit_ascii_y1<=std_logic_vector(conv_unsigned((48+second_digit_y1),7));
      third_digit_ascii_y1<=std_logic_vector(conv_unsigned((48+third_digit_y1),7));

vitruvius

Çözemedim hocam sorunu. Sizin burada first_digit_x1 dediğiniz signalin türü ne?

yamak

türü integer.Hangi kısmını anlayamadın.

vitruvius

Anlayamadığım kısmı benim kodumdaki sıkıntı  :) Bende DATA değeri lcd'ye gönderdiğim değer ve std_logic_vector( 7 downto 0). sayac da butona bastığımda değeri artan bir integer. Buna 48 ekleyip std_logic_vector'e çeviriyorum, ama ekranda sürekli 0 gözüküyor. Siz niye arada bir de unsigned'a dönüşüm yaptınız?

yamak

Onun bi nedeni yok aslında o zamanlar integer dan std_logic_vectore dönüşümün o şekilde olduğunu görümüştüm bi yerde.:)  Ama sen direkt
first_digit_ascii_x1<=conv_std_logic_vector((48+first_digit_x1),7); şeklinde yapabilirsin.

vitruvius

Hocam aynı şeyi yapmıyor muyuz? Siz first_digit_ascii_x1 değerine ek bir işlem yapıyor musunuz, direkt mi yolluyorsunuz?

DATA<=(conv_std_logic_vector((cnt+48),7)); yaptığımda 0'ı ekrana yazıyor ama butona bastığımda yeni değeri gözükmüyor. Halbuki sağlama amaçlı sayac'ın değerini ledlerde de gösteriyorum ve butona bastığımda led kısmında bir sıkıntı olmuyor. İstediğim gibi çalışıyor.

yamak

stop timer diye bi sinyalin var o sinyal say2 3000 olduğunda 1 oluyo bir daha 0 olmuyo gibi. Ya da ben mi göremedim.

vitruvius

Hocam 3000 olduğunda 1 olmuyor, yorum yazılmış o kısma. Yani ben ellemedim, turkplc öyle yapmış.

Bu arada signal sayac : integer range 0 to 8 :=3; yaptım. Lcd'de 3'ü görüyorum ama yine artmıyor. Acaba stoptimer'la alakalı bir durum mudur bu?

yamak

bence onunla alakalı %90 çünkü en başta bi kere o kod çalışyıo daha çalışmıyo. butona her bastığında her bastığında stop timer ı tekrar 0 yap. Ama bunu sadece bi process in içnde yap.Yani stop timer ın değerini sadece bi process içinde değiştir. Yoksa hata alırsın.say2 nin değerini sürekli olarak tanımladığın bi sinyale yükle.. mesela şöyle bi process olabilir.
process
begin
if clk'event and clk='1' then
if say2_signal=3000 then
stop_timer='1';
elsif buton_g='1' then
stop_timer='0';
end if;
end process;

vitruvius

#10
Hocam bu yapı programın sağlığı açısından pek iyi olmadı, ama en azından değer 1 kere arttı  :) Sağlığı açısından iyi olmadı diyorum çünkü normalde kiti ilk açtığımda lcd'de bir demo oynuyor ve ben fpga'e bir şey yükleyince (lcd'de yazı yazdırıyorsam) hemen yazı ekrana geliyor. Bu şekilde ben butona basana kadar lcd'deki demo kilitleniyor. Butona bastığımda benim yazdığım yazı ekrana geliyor ve 3 olan değeri 4 olarak görüyorum. Ancak bu sefer de 4'te kalıyor. Bunun üzerinde çalışmalıyım şimdi.

Bu arada şu şekilde yaptım:

Lcd için olan signal'ler kısmına bir ek;
Signal say2_signal : integer range 0 to 5000;


Bu da sizin dediğiniz process:
process(clk)
	begin
		if(clk'event and clk='1') then
			if(say2_signal=3000) then
			StopTimer<='1';
			elsif(buton_g='1') then
			StopTimer<='0';
			end if;
		end if;
	end process;


Bu arada Lcd kısmındaki en altta bulunan when 3000=>--StopTimer <='1'; kısmı hala yorum şeklinde.

yamak

Bir de şöyle bi durum var lcd ni konfigurasyon ayarları her seferinde tekrar yapılıyo onun tek sefer yapılmasın bi sağlayıp dener misin?

vitruvius

Denerim hocam, bir de bu stoptimer ne işe yarıyor ki? Onu da silsem sıkıntı olur mu?

yamak

Sürekli olarak aynı işlemlerin yapılmamsı için.Ekrana bit kere TURKPLC yazıyo duruyo.Bu kod senin yapmak istediğinden biraz farklı yani burada bir kere bilgi gönderiliyo o kadar. Ama sen her butona bastığında karakter göndereceğin için şu kısmın bir kere çalışması gerkeiyo.
                LCD_RW<='0';
                LCD_RS<='0'; --CMD
                DB<="0011";
            when 99=>LCD_E<='1';
            when 100=>LCD_E<='0';
            when 115=>LCD_E<='1';
            when 116=>LCD_E<='0';
            when 121=>LCD_E<='1';
            when 122=>LCD_E<='0';
            when 127=>DB<="0010";
            when 128=>LCD_E<='1';
            when 129=>LCD_E<='0';

            
            when 149=>DATA<=X"28";
            when 150=>DB<=DATA(7 downto 4);
            when 151=>LCD_E<='1';			
            when 152=>LCD_E<='0';
            when 153=>DB<=DATA(3 downto 0);
            when 154=>LCD_E<='1';
            when 155=>LCD_E<='0';			
            DATA<=X"08";

            when 156=>DB<=DATA(7 downto 4);
            when 157=>LCD_E<='1';			
            when 158=>LCD_E<='0';
            when 159=>DB<=DATA(3 downto 0);
            when 160=>LCD_E<='1';
            when 161=>LCD_E<='0';				
                DATA<=X"01"; 
            when 162=>
                DB<=DATA(7 downto 4);
            when 163=>LCD_E<='1';			
            when 164=>LCD_E<='0';
            when 165=>DB<=DATA(3 downto 0);
            when 166=>LCD_E<='1';
            when 167=>LCD_E<='0';	
                DATA<=X"06";
            when 168=>
                DB<=DATA(7 downto 4);
            when 169=>LCD_E<='1';			
            when 170=>LCD_E<='0';
            when 171=>DB<=DATA(3 downto 0);
            when 172=>LCD_E<='1';
            when 173=>LCD_E<='0';
                DATA<=X"0C";
            when 174=>
                DB<=DATA(7 downto 4);
            when 175=>LCD_E<='1';			
            when 176=>LCD_E<='0';
            when 177=>DB<=DATA(3 downto 0);
            when 178=>LCD_E<='1';
            when 179=>LCD_E<='0';			
            
            when 180=>LCD_RS<='1'; --Chr

vitruvius

Uzun çabalar sonucunda mantığı kurdum  :) Yani ilk durumumdayım, cnt=3 yazıyor (ilk durum 3 olduğu için) ve öyle kalıyor. Bu resetleme olayını yapamadığımdan butona basınca değer artmıyor. Bu arada kodu biraz kısalttım ve bazı değişkenlerin isimlerini değiştirdim edaboard'da da sorduğumdan. Sayac signalim "cnt" oldu. Kodda yaptığım şeyleri ve yapmak istediğim şeyleri yorumlarla ifade ettim. Tahminimce son process'i düzenleyince sonuca ulaşacağım. Oraya nasıl bir yapı kurmam lazım?

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

entity tplcdvebuton is
port (
		 buton : in std_logic;
		 led : out std_logic_vector(7 downto 0);
		 clk : in std_logic;		 
		 DB : out  STD_LOGIC_VECTOR (7 downto 4); 
       LCD_E :out STD_LOGIC;
       LCD_RS :out STD_LOGIC;
       LCD_RW :out STD_LOGIC
);
end tplcdvebuton;

architecture Behavioral of tplcdvebuton is
--------------- Signals for Button and Debounce ----------------
signal counter : integer range 0 to 15000000;
signal buton_b : std_logic;
signal buton_g : std_logic;
signal cnt : integer range 0 to 8 :=3;
signal ledg : std_logic_vector(7 downto 0);
-----------------------------------------------------------------------------

--------------- Signals for Lcd ------------------------------
Signal StopTimer:std_logic;
Signal DATA : STD_LOGIC_VECTOR (7 downto 0);
signal ayar : std_logic; -- Bu ayar, lcd konfigurasyonunu başlatacak olan signal.
signal dongu : std_logic; -- Bu dongu de karakter yollama kısmını başlatacak kısım.
signal tekrar: std_logic; -- Bu tekrar da dongunun ismine yakışır olabilmesi için.
-----------------------------------------------------------------------------

begin
	led <= ledg;

	process(clk) -- Debounce
    begin
        if(clk'event and clk='1') then
            if(buton_b <= '1') then
            counter<=counter+1;
            buton_g<='0';
            elsif(buton='1') then
            buton_b<='1';
            end if;
                if(counter=15000000) then --300ms
                counter<=0;
                buton_b<='0';
                    if(buton='1') then
                    buton_g<='1';
                    end if;
                end if;
        end if;
    end process;
    
    process(clk) --Cnt
    begin
		if(clk'event and clk='1') then
			if(buton_g='1') then
			cnt<=cnt+1;
					if(cnt=8) then
					cnt<=0;
					end if;
			end if;
		end if;
    end process;
    
    process(cnt) -- Checking the value of the cnt with using LEDs
    begin
        case cnt is
            when 0 => ledg <= "00000000";
            when 1 => ledg <= "00000001";
            when 2 => ledg <= "00000010";
            when 3 => ledg <= "00000100";
            when 4 => ledg <= "00001000";
            when 5 => ledg <= "00010000";
            when 6 => ledg <= "00100000";
            when 7 => ledg <= "01000000";				
            when others => ledg <= "10000000";
        end case;
   end process;
	
	
	------------------------------------- LCD ------------------------------------
	process (clk)
    variable say1:integer;
    variable say2:integer;
	 variable say3:integer; -- Bu say3 de karakter yollayacagım kısmın sayacı
    begin
    if (clk'EVENT and clk='1') then
    if (StopTimer='0') then 
    say1:=say1+1;
    end if;				
        if (say1>50000) then	--1 KHZ
        say1:=0; -- Burada da kafamı karıştıran bir şey var. say1 0 olunca bu if hala nasıl işliyor?
		  ayar<='1'; --Şimdi 1KHZ olduğunda ayar signal 1 olsun ve konfigurasyon başlasın.
			 if(ayar='1') then -- Konfigurasyon başladı
			 say2:=say2+1; -- Bu kısımları ellemedim.
            case say2 is
            when 90=>
                LCD_RW<='0';
                LCD_RS<='0'; --CMD
                DB<="0011";
            when 99=>LCD_E<='1';
            when 100=>LCD_E<='0';
            when 115=>LCD_E<='1';
            when 116=>LCD_E<='0';
            when 121=>LCD_E<='1';
            when 122=>LCD_E<='0';
            when 127=>DB<="0010";
            when 128=>LCD_E<='1';
            when 129=>LCD_E<='0';

            
            when 149=>DATA<=X"28";
            when 150=>DB<=DATA(7 downto 4);
            when 151=>LCD_E<='1';			
            when 152=>LCD_E<='0';
            when 153=>DB<=DATA(3 downto 0);
            when 154=>LCD_E<='1';
            when 155=>LCD_E<='0';			
            DATA<=X"08";

            when 156=>DB<=DATA(7 downto 4);
            when 157=>LCD_E<='1';			
            when 158=>LCD_E<='0';
            when 159=>DB<=DATA(3 downto 0);
            when 160=>LCD_E<='1';
            when 161=>LCD_E<='0';				
                DATA<=X"01"; 
            when 162=>
                DB<=DATA(7 downto 4);
            when 163=>LCD_E<='1';			
            when 164=>LCD_E<='0';
            when 165=>DB<=DATA(3 downto 0);
            when 166=>LCD_E<='1';
            when 167=>LCD_E<='0';	
                DATA<=X"06";
            when 168=>
                DB<=DATA(7 downto 4);
            when 169=>LCD_E<='1';			
            when 170=>LCD_E<='0';
            when 171=>DB<=DATA(3 downto 0);
            when 172=>LCD_E<='1';
            when 173=>LCD_E<='0';
                DATA<=X"0C";
            when 174=>
                DB<=DATA(7 downto 4);
            when 175=>LCD_E<='1';			
            when 176=>LCD_E<='0';
            when 177=>DB<=DATA(3 downto 0);
            when 178=>LCD_E<='1';
            when 179=>LCD_E<='0';			
            
            when 180=>LCD_RS<='1'; --Chr
				when 181=> -- Konfigurasyon bitti
							 say3:=1; -- Say3 karakter göndereceğim sayac ve konfugirasyon bitince 1 oluyor.
							 ayar<='0'; -- Ayar'ı 0 yaptım ki bir daha konfigurasyon yapılmasın.
							 dongu<='1'; -- Konfigurasyon bitince dongu 1 oldu ve karakter gönderecegim kısım başlayacak.
				when others => -- others mecburiyetten.
				end case;
			end if;		
				
------------------------- SINIR -----------------------------
			if(dongu='1') then -- Konfigurasyon başladı
				say3:=say3+1; -- Yukarıda değeri 1 olmuştu, artmaya devam ediyor.
					case say3 is -- Bu saatten sonra da say3'ün degerine bakılarak kaldıgı yerden devam ediliyor.
				
				when 2=>
                DATA<=X"43"; -- C
            when 3=>
                DB<=DATA(7 downto 4);
            when 4=>LCD_E<='1';			
            when 5=>LCD_E<='0';
            when 6=>DB<=DATA(3 downto 0);
            when 7=>LCD_E<='1';
            when 8=>LCD_E<='0';	
				
                DATA<=X"4E"; -- N
            when 9=>
                DB<=DATA(7 downto 4);
            when 10=>LCD_E<='1';			
            when 11=>LCD_E<='0';
            when 12=>DB<=DATA(3 downto 0);
            when 13=>LCD_E<='1';
            when 14=>LCD_E<='0';	
				
                DATA<=X"54"; -- T
            when 15=>
                DB<=DATA(7 downto 4);
            when 16=>LCD_E<='1';			
            when 17=>LCD_E<='0';
            when 18=>DB<=DATA(3 downto 0);
            when 19=>LCD_E<='1';
            when 20=>LCD_E<='0';
				
                DATA<=X"3D"; -- =
            when 21=>
                DB<=DATA(7 downto 4);
            when 22=>LCD_E<='1';			
            when 23=>LCD_E<='0';
            when 24=>DB<=DATA(3 downto 0);
            when 25=>LCD_E<='1';
            when 26=>LCD_E<='0';
				
                DATA<=(conv_std_logic_vector((cnt+48),7));
            when 27=>
                DB<=DATA(7 downto 4);
            when 28=>LCD_E<='1';			
            when 29=>LCD_E<='0';
            when 30=>DB<=DATA(3 downto 0);
            when 31=>LCD_E<='1';
            when 32=>LCD_E<='0';        
				--when 40=>say3:=1; --Burada say3'ü tekrar 1 yaptım ki döngüye girsin ama yemedi.
				when 35=>tekrar<='1'; --Dongu burada bitiyor.
							           
            when 3000=>--StopTimer <='1'; Adettendir =p
            when others=>
            end case;
          end if;
        end if;
		end if;
    end process;
	 
	 -- Bu process'i beceremedim.
	 process(clk) -- Burada dongu'yu resetleyecegim.
	 begin
		if(clk'event and clk='1') then
			if(tekrar='1') then --Dongu bittiginde tekrar 1 oluyor
			dongu<='0'; -- Donguyu de 0 yaptım ki tekrar karakter göndermeye hazır olsun.
			elsif(buton_g='1') then
			dongu<='1'; -- Butona her bastıgımda dongu 1 olup tekrar karakteri lcd'ye göndersin istedim.
			tekrar<='0'; -- Tekrar'ı da bir yerde 0'lamak lazımdı =)
			end if;
		end if;
	end process;
	
end Behavioral;


Son process'ten ötürü de şu hatayı alıyorum:
Xst:528 - Multi-source in Unit <tplcdvebuton> on signal <DATA<7>>; this signal is connected to multiple drivers.


Son process'te sıkıntı olduğunun farkındayım ama aklıma başka bir şey gelmedi. Bu arada StopTimer ile oynamadım çünkü karakter gönderen kısım "dongu" signalim diye düşündüm ve bu yüzden onla oynamaya çalıştım. Burada yanlış yapmış olabilirim.