Picproje Elektronik Sitesi

DİJİTAL & ANALOG ELEKTRONİK => Pld, Spld, Pal, Gal, Cpld, Fpga => Konuyu başlatan: vitruvius - 06 Mayıs 2012, 13:47:16

Başlık: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: vitruvius - 06 Mayıs 2012, 13:47:16
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.
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: yamak - 06 Mayıs 2012, 14:22:15
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));
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: vitruvius - 06 Mayıs 2012, 14:51:09
Çözemedim hocam sorunu. Sizin burada first_digit_x1 dediğiniz signalin türü ne?
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: yamak - 06 Mayıs 2012, 15:02:00
türü integer.Hangi kısmını anlayamadın.
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: vitruvius - 06 Mayıs 2012, 15:12:05
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?
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: yamak - 06 Mayıs 2012, 15:17:46
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.
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: vitruvius - 06 Mayıs 2012, 15:25:15
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.
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: yamak - 06 Mayıs 2012, 15:33:45
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.
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: vitruvius - 06 Mayıs 2012, 15:38:43
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?
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: yamak - 06 Mayıs 2012, 15:47:21
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;
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: vitruvius - 06 Mayıs 2012, 16:04:26
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.
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: yamak - 06 Mayıs 2012, 16:17:34
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?
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: vitruvius - 06 Mayıs 2012, 16:37:50
Denerim hocam, bir de bu stoptimer ne işe yarıyor ki? Onu da silsem sıkıntı olur mu?
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: yamak - 06 Mayıs 2012, 17:10:29
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
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: vitruvius - 07 Mayıs 2012, 00:24:47
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.
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: yamak - 07 Mayıs 2012, 01:19:03
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.
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: vitruvius - 07 Mayıs 2012, 01:26:51
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?
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: yamak - 07 Mayıs 2012, 02:39:36
stop timer ı tamamen kaldır. yani say1 in artması stop timer a bağlı olmasın. Hiç bir yerde stop timerı kullanma.
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: vitruvius - 07 Mayıs 2012, 10:44:36
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;

Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: yamak - 07 Mayıs 2012, 16:34:50
Ş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;
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: vitruvius - 08 Mayıs 2012, 00:39:53
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.
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: vitruvius - 08 Mayıs 2012, 11:22:19
Hocam siz burada nasıl bir mantık düşündünüz? Düzenleyemedim.
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: vitruvius - 08 Mayıs 2012, 14:02:34
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.

Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: yamak - 08 Mayıs 2012, 15:00:22
Ş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.
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: vitruvius - 08 Mayıs 2012, 15:22:57
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.
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: turkplc - 08 Mayıs 2012, 16:01:02
Merhabalar,
Sayıyı LCD ye yazdırdıktan sonra kursoru bir sola kaydırmalısın,
iyi günler
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: vitruvius - 08 Mayıs 2012, 16:09:12
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.
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: 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ı.
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: turkplc - 08 Mayıs 2012, 16:24:57
Yazıları 1. satıra yazdırabilirsin,
2. satırada sayıyı
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: vitruvius - 08 Mayıs 2012, 16:39:26
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?
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: yamak - 08 Mayıs 2012, 16:54:28
Şimdilik şunu söyleleyim.Şu kodlarda if(tekrar=0) koşulunun altına 2. kez girmiyo. Bunun üzeirne düşünebilirsin.Benim şu an okula gitmem gerekiyo :)
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 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;
ledg(6)<=not ledg(6);
                    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;
          --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=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;

tekrar<='1' when say3_signal=33 else
'0' when buton_g='1';
   
end Behavioral;
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: turkplc - 08 Mayıs 2012, 16:55:54
$FE, 1 Clear display
$FE, 2 Return home (beginning of first line)
$FE, $0C Cursor off
$FE, $0E Underline cursor on
$FE, $0F Blinking cursor on
$FE, $10 Move cursor left one position
$FE, $14 Move cursor right one position
$FE, $C0 Move cursor to beginning of second line
$FE, $94 Move cursor to beginning of third line (if applicable)
$FE, $D4 Move cursor to beginning of fourth line (if applicable)
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: vitruvius - 08 Mayıs 2012, 17:06:28
Hocam nereden baktınız bu komut serisine? 3E-Starter Kit User Guide'dan bakıyorum ben de arama yapmama rağmen bulamadım. Sorgulamıyorum, $FE, $10 şu ifadenin ne anlama geldiğini bilmediğimden datasheeti okuyacağım.
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: turkplc - 08 Mayıs 2012, 17:18:47
Proton'un yardımından,
hex 10 komutunu gönderdiğinde kursoru 1 sola taşır,
LCD konfig ayarlarını yaparken cmd göndermeyle ilgili kısım var oraya bakarak yapmalısın,

iyi günler
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: vitruvius - 10 Mayıs 2012, 01:30:20
Nihayet bu işi bitirdim. Yardımlarınız için çok teşekkür ederim. Sırada adc okuma ve o değeri lcd'ye yazdırma var  :)

Çalışan kodu aşağıda veriyorum.

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

entity lcd_deneme_3 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 lcd_deneme_3;

architecture Behavioral of lcd_deneme_3 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"42"; -- B
            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"41"; -- A
            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"53"; -- S
            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"4D"; -- M
            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"41"; -- A
            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"3D"; -- =
            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"30"+(conv_std_logic_vector((sayac),7)));
                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';

when 223=> LCD_RW<='0';
  LCD_RS<='0'; --CMD  
  DB<="0011";
            when 232=>LCD_E<='1';
            when 233=>LCD_E<='0';
            when 238=>LCD_E<='1';
            when 239=>LCD_E<='0';
            when 244=>LCD_E<='1';
            when 245=>LCD_E<='0';
            when 250=>DB<="0010";
            when 251=>LCD_E<='1';
            when 252=>LCD_E<='0';


when 272=>DATA<=X"10";
            when 273=>DB<=DATA(7 downto 4);
            when 274=>LCD_E<='1';
            when 275=>LCD_E<='0';
            when 276=>DB<=DATA(3 downto 0);
            when 277=>LCD_E<='1';
            when 278=>LCD_E<='0';
when 279=>LCD_RS<='1';             
               
when 280=>say2:=215;
           
            when 3000=>--StopTimer<='1';
            when others=>
            end case;
       
        end if;
    end if;
    end process;

end Behavioral;

Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: demorgan - 19 Mayıs 2012, 17:44:21
bende alteranın de0 boardu var bu programı onda çalıştırabilirmiyim? Birde input olarak tanımladığımız clk girişini nerden alıcaz mantığını tam anlayamadım.Bu işte çok yeniyim saçma sorular sormuş olabilirim şimdiden çok teşekkürler.
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: vitruvius - 19 Mayıs 2012, 19:34:19
Alıntı yapılan: demorgan - 19 Mayıs 2012, 17:44:21
bende alteranın de0 boardu var bu programı onda çalıştırabilirmiyim? Birde input olarak tanımladığımız clk girişini nerden alıcaz mantığını tam anlayamadım.Bu işte çok yeniyim saçma sorular sormuş olabilirim şimdiden çok teşekkürler.

Deneyebilirsiniz fakat de0'da lcd yok. Kendiniz eklemeniz gerekir. Ayrıca de0 board'unun bağlantı şemasına göre butona basılma durumunu if(buton='1') then ile değil if(buton='0') then şeklinde kontrol etmeniz gerekir. Clock da board'da zaten var. Board'un bilgilerinde nereye bağlı olduğunu görebilirsiniz. De0'da PIN_G21'e bağlıdır.
Başlık: Ynt: Vhdl'de Lcd'ye değişken yazdırmak.
Gönderen: kamber7373 - 05 Aralık 2012, 22:21:41
ELİNE EMEĞİNE SAĞLIK SPARTAN 3E DE DENEDİM GAYET İYİ ÇALIŞIYOR.  ;D