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

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

yamak

Bir sinyale iki farklı process için değer veremezsin o yüzden alıyosun bu hatayı.Mesela dongı ye iki farklı process içinde değer ataması yaptın.

vitruvius

#16
Burada niye hata almamıştık hocam? Buna benzetmeye çalışmıştım. Tamam anladım, donguye değer atadığımı gözden kaçırmışım. Sadece "SINIR"dan sonrasına yoğunlaşınca yukarsını görmemişim.

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;


Bir de stoptimer ile oynamam gerekir mi?

yamak

stop timer ı tamamen kaldır. yani say1 in artması stop timer a bağlı olmasın. Hiç bir yerde stop timerı kullanma.

vitruvius

Hocam şimdi StopTimer'ı kaldırdım, "tekrar" signalimi onun gibi kullandım dongunun tekrar başlaması için. Bu sefer programı lcd'ye yüklediğimde ekran boş gözüküyor. Butona bastığım zaman CNT=4 yazıyor, yani bir artmış oluyor ve öyle kalıyor. Lcd'ye yazıyı butona bastığım zaman yazmasının sebebi son process mi? say3'ü sıfırladım ama doğru mu yaptım bilemedim. Dongu sinyalini de sıfır yapmam gerekir mi? Sıfır yapsam bir daha ne zaman 1 yapacağımı bulamadım, çünkü "Sınır"dan önce 1 oluyor.

Son Hali:

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 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.
signal say3_signal: integer range 0 to 40000;
-----------------------------------------------------------------------------

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    
    say1:=say1+1;    			
        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(tekrar='0') then --Bu tekrar StopTimer işini görüyor aslında burada
			if(dongu='1') then -- Karakter yollama kısmı başladı
				say3:=say3+1; -- Yukarıda değeri 1 olmuştu, artmaya devam ediyor.
				say3_signal<=say3;
					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 others=>
            end case;
          end if;
			 
			 elsif(tekrar='1')then -- Burada say3'ü sıfırladım.
			 say3:=0;
        end if;
		end if;
	end if;
   end process;
	 
	 
	 process(clk) -- Burada dongu'yu resetleyecegim.
	 begin
		if(clk'event and clk='1') then
			if(say3_signal=3000) then
			tekrar<='1';
			elsif(buton_g='1') then --Butona bastığımda dongunun tekrar baştan başlaması için.
			tekrar<='0';
			end if;			
		end if;
	end process;
	
end Behavioral;

yamak

Şu şekilde bi dener misin? Hatalar olabilir direk site üzerinde değiştirdim.Derlemedim hiç.
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 DATA : STD_LOGIC_VECTOR (7 downto 0);
signal ayar : std_logic:='1'; -- Bu ayar, lcd konfigurasyonunu başlatacak olan signal.
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    
    say1:=say1+1;    			
        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?
             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
                             ayar<='0'; -- Ayar'ı 0 yaptım ki bir daha konfigurasyon yapılmasın.
                when others => -- others mecburiyetten.
                end case;
            end if;		
                
------------------------- SINIR -----------------------------
        if(tekrar='0') then --Bu tekrar StopTimer işini görüyor aslında burada
            if(dongu='1') then -- Karakter yollama kısmı başladı
                say3:=say3+1; -- Yukarıda değeri 1 olmuştu, artmaya devam ediyor.
                say3_signal<=say3;
                    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 33=>
                             say3:=0;
                             tekrar<='1';
                when others=>
            end case;
          end if;
        end if;
        end if;
    end if;
   end process;
     
     
     process(clk) -- Burada dongu'yu resetleyecegim.
     begin
        if(clk'event and clk='1') then
            if(buton_g='1') then --Butona bastığımda dongunun tekrar baştan başlaması için.
            tekrar<='0';
	    end if
            end if;
    end process;
    
end Behavioral;

vitruvius

Hocam ufak tefek hataları düzeltmeye çalıştım, bazı sinyalleri silmişsiniz kodlarda kalmış. Tam olarak ne düşündüğünüzü bilmediğim için oynama yapamadım. Misal; dongu sinyalini silmişsiniz ama "SINIR"dan sonra if(dongu='1') then var. Her şeyi düzeltsem bile tekrar signaline iki process'te atama yapmışsınız. Ben sakin bir kafayla tasarımınızı anlamaya çalışıp müdahaleleri ona göre yapmayı denerim.

vitruvius

Hocam siz burada nasıl bir mantık düşündünüz? Düzenleyemedim.

vitruvius

Vay arkadaş ya  :) Turkplc hocam tek satırlık bir yorum getirdi beni benden aldı  :) İlk mesajımda verdiğim kodda şu 2 değişiklik ile büyük ilerleme oldu.

DATA<=(conv_std_logic_vector((sayac+48),8));
yerine
DATA<=(x"30"+(conv_std_logic_vector((sayac),7)));


Esas vurucu darbe:
when 229=>say2:=221;


Bu şekilde say2 değeri tekrar DATA<=(x"30"+(conv_std_logic_vector((sayac),7))); satırından yukarı çıkıyor.

Şu anda olan şu say2:=221 ile sonsuz bir döngüye girildiğinden sayac'ın o anki değeri sonsuz kere ekranda yazılıyor. Yani 00000000000000... diye gidiyor, ekranı kaplıyor. Ama o anki değeri görüyorum. Şimdi bu sorunu engellemeye çalışacağım.


yamak

#23
Şunu bi dener misin? Hiç bir değişiklik yapmana gerek yok.
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 DATA : STD_LOGIC_VECTOR (7 downto 0);
signal ayar : std_logic; -- Bu ayar, lcd konfigurasyonunu başlatacak olan signal.
signal tekrar: std_logic; -- Bu tekrar da dongunun ismine yakışır olabilmesi için.
signal say3_signal: integer range 0 to 40;
-----------------------------------------------------------------------------

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 range 0 to 5100;
    variable say2:integer range 0 to 200;
     variable say3:integer range 0 to 40; -- Bu say3 de karakter yollayacagım kısmın sayacı
    begin
    if (clk'EVENT and clk='1') then    
    say1:=say1+1;    			
        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?
             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
                  ayar<='0'; -- Ayar'ı 0 yaptım ki bir daha konfigurasyon yapılmasın.
                             
                when others => -- others mecburiyetten.
                end case;
            end if;		
                
------------------------- SINIR -----------------------------
        if(tekrar='0') then --Bu tekrar StopTimer işini görüyor aslında burada
                say3:=say3+1;					 -- Yukarıda değeri 1 olmuştu, artmaya devam ediyor.
					 say3_signal<=say3;
                    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),8));
            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 others=>
            end case;
             
        elsif(tekrar='1')then -- Burada say3'ü sıfırladım.
             say3:=0;
        end if;
        end if;
    end if;
   end process;
     
     
     process(clk) -- Burada dongu'yu resetleyecegim.
     begin
        if(clk'event and clk='1') then
            if(say3_signal=33) then
					tekrar<='1';
            elsif(buton_g='1') then --Butona bastığımda dongunun tekrar baştan başlaması için.
					tekrar<='0';
            end if;			
        end if;
    end process;
    
end Behavioral;

Fakat bu yöntem daha mantıklı. Ama sen yine bunu bi dene olmazsa öyle yaparız.

vitruvius

Yok bu hiç çalışmadı, üstüne led yakan devreyi de çalıştırmadı.  when 229=>say2:=221; mantığı hoşuma gitti. Ama sonsuz döngü olayını nasıl engelleyeceğimi düşünüyorum şu an.

turkplc

Merhabalar,
Sayıyı LCD ye yazdırdıktan sonra kursoru bir sola kaydırmalısın,
iyi günler

vitruvius

Hocam öyle bir şey aklıma gelmişti de bu sefer de sayıyı yazdırdıktan sonra devamında bir şey yazmamı engeller diye düşünmüştüm.

yamak

Ben de şu an bendeki boarda bi lcd taktım denemeye çalışacam. Bu aralar pek boş zamanım yok ama eğer ben yapana kadar yapmazsan gönderirim sana kodları.

turkplc

Yazıları 1. satıra yazdırabilirsin,
2. satırada sayıyı

vitruvius

Alıntı yapılan: yamak - 08 Mayıs 2012, 16:22:04
Ben de şu an bendeki boarda bi lcd taktım denemeye çalışacam. Bu aralar pek boş zamanım yok ama eğer ben yapana kadar yapmazsan gönderirim sana kodları.

Sağolun hocam. Koda gerek yok, mantığı kursak da yeter  :)

Alıntı yapılan: turkplc - 08 Mayıs 2012, 16:24:57
Yazıları 1. satıra yazdırabilirsin,
2. satırada sayıyı

İlgili komutlar için datasheet'i inceliyorum hocam. Cursor and Display Shift kısmında shifting olayını gördüm de cursor'u 2. satıra geçiren bir komut yok mu?