23 Temmuz 2019, 19:39:45

Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME


1HZ, 30HZ elde etmek. Nasıl?

Başlatan MC_Skywalker, 07 Ekim 2017, 20:55:20

MC_Skywalker

EPM570T100C5 CPLD ile 7 Segment LCD kullanan saaat yapmaya çalışıyorum ama bir türlü 1HZ ve 30HZ elde edemdim.

30HZ çok keskin olmasada olur 60HZ geçmeyecek bir değer de olur

Ne yaptım 50MHz clk girşi olduğunu kabul edip sayıcı kurup, 26 bit saycı'nın 20'nci birinden ~48HZ (=50Mhz/2^20) alabiliyorum. 25'ici bit ~1.7Hz ve 26'ıncı bit ~0.7Hz veriyor. EPM570T100C5 içinde PLL olmadığı için mega wizard ile clock üretimi yapılmıyor.

integer 0-49999999 saydırıp 50000000 geldiğinde tetik alsam doğruluğu ne olur acaba?

Comodore C64 ve/veya Amiga 500 bağışlarınız kabul edilir. https://www.pcbway.com/setinvite.aspx?inviteid=47459 Bir işsize kitap bağışlamak istermisiniz ---> http://a.co/cuyqkBx   https://instagram.com/mc6810p10

Erol YILMAZ

50MHz clk kaynağınız kadar doğru olur :)

muuzoo

@MC_Skywalker  Aslında cevabınızı vermişsiniz bit kontrolünden ziyade sayaç yaparak elde edebilirsiniz.
gunluk.muuzoo.gen.tr - Kişisel karalamalarım...

MC_Skywalker

@Allegro tabiki clk giriş kaynağının doğrulu kadar olur. Benim sormak istediğim.

26 bit binary sayaç  mı yoksa integer bir sayaçmı daha doğru tercih olur
Comodore C64 ve/veya Amiga 500 bağışlarınız kabul edilir. https://www.pcbway.com/setinvite.aspx?inviteid=47459 Bir işsize kitap bağışlamak istermisiniz ---> http://a.co/cuyqkBx   https://instagram.com/mc6810p10

polleme

Ek bir devre yapmayı düşünürseniz piyasada saat modüllerinde kullanılan 32,768 KHz Kristal ve bir CD4060 bölücü ile 2Hz elde edilebilir. Bu da ikiye bölünürse hassas 1Hz olur (kristalin hassasiyeti önemli)

Örnek:

https://jvok.uk/clock/timebase.png

Zoroaster

Alıntı yapılan: MC_Skywalker - 07 Ekim 2017, 21:28:28
@Allegro tabiki clk giriş kaynağının doğrulu kadar olur. Benim sormak istediğim.

26 bit binary sayaç  mı yoksa integer bir sayaçmı daha doğru tercih olur


Ne demek istiyorsun anlasilmiyor ki. Integer sayac ile decimal sayactan mi bahsediyorsun acaba?

Senin yapmam gereken senkron lojik tasarimla yapilmis sayac. Binary ya da decimal olmasinin onemi yok.
Seytan deliginden kacti.

MC_Skywalker

Sormak istediğim şu şekildeydi;

Binary dediğim sayaç;
 signal sayacSTD_LOGIC_VECTOR(26 down to 0);
....
sayac sayac +1
....
clk30HZ <= sayac(20) -- 20. bitten çıkış
clk1HZ 
<= sayac(26)  -- 26. bitten çıkış
....


integer sayaç dediğim.

signal sayac1 
integer range 0 to 49999999 := 0; --1Hz için sayacak sayaç
signal sayac30
integer range 0 to 1048576:=0; --30Hz için sayacak sayaç
...
         if 
sayac1 49999999 then
                      sayac1 
<= 0;
                      
clk1HZ <=1
         
else
        
sayac1 <=sayac1 1;
        
clk1HZ <=0
....

Comodore C64 ve/veya Amiga 500 bağışlarınız kabul edilir. https://www.pcbway.com/setinvite.aspx?inviteid=47459 Bir işsize kitap bağışlamak istermisiniz ---> http://a.co/cuyqkBx   https://instagram.com/mc6810p10

alicavuslu

Sen integer da seçsen kullandığın sentezleme aracı 26 bite düşürecektir. Çok sorun olacak bi durum değil. Kod yazma açisindan integer yerine std_logic_vector kullanman daha iyidir.

MC_Skywalker

Bu projeyi componetlere ayırarak max300 sersi CPLD için yeniden yapmak istedim fakat sanırım biryerlerde hata yaptım ama bir türlü çözemedim. LCD den görüntü alamadım. proje sıkıntısız derlenmekte ve CPLD içne yüklemenemte.

Segment LCD 50Hz clock ister com ucundan tüm segmentler 50Hz ve terslenmiş 50Hz ile xor işlemine tabi tutulmak zorunda.

Top level entry LCD_7seg.vhd
library IEEE;
use 
IEEE.STD_LOGIC_1164.ALL;
use 
IEEE.STD_LOGIC_ARITH.ALL;
use 
IEEE.STD_LOGIC_UNSIGNED.ALL;

entity LCD_7seg is
      Port 
Clk_13Mhz5 in std_logic;
   
Com out std_logic;
   
a,b,c,d,e,f,out STD_LOGIC);
end LCD_7seg;

architecture Behavioral of LCD_7seg is
 signal segmentler
std_LOGIC_VECTOR (1 to 7);
 
signal Bcd:  STD_LOGIC_VECTOR(3 downto 0);
 
signal Clk_50Hzstd_LOGIC;
 
signal NClk_50Hzstd_LOGIC;
 
Component Sayac is
 port 
Bcd:  STD_LOGIC_VECTOR(3 downto 0));
end Component Sayac;
 
Component Saat_bolme is

 port 
(Clk_13Mhz5std_logic
 
Clk_50Hzstd_LOGIC;
   
NClk_50Hzstd_LOGIC);
end Component Saat_bolme;

                            
  
begin
                  with Bcd select
                  segmentler 
<= "0000001" when "0000", --0 a b c d e f g
                                
"1001111" when "0001", --1
   
"0010010" when "0010", --2
   
"0000110" when "0011", --3
   
"1001100" when "0100", --4
   
"0100100" when "0101", --5
   
"0100000" when "0110", --6
   
"0001111" when "0111", --7
   
"0000000" when "1000", --8
   
"0001100" when "1001", --9
   
"0001000" when "1010", --A
   
"1100000" when "1011", --b
   
"0110001" when "1100", --C
   
"1000010" when "1101", --d
   
"0010000" when "1110", --e
   
"0111000" when "1111", --F
   
"1001000" when others;
 
 
a<= segmentler(1) xor Clk_50Hz xor NClk_50Hz
                  
b<= segmentler(2) xor Clk_50Hz xor NClk_50Hz;
 
c<= segmentler(3) xor Clk_50Hz xor NClk_50Hz;
 
d<= segmentler(4) xor Clk_50Hz xor NClk_50Hz;
 
e<= segmentler(5) xor Clk_50Hz xor NClk_50Hz;
 
f<= segmentler(6) xor Clk_50Hz xor NClk_50Hz
 
g<= segmentler(7) xor Clk_50Hz xor NClk_50Hz;    
 
Com<= Clk_50Hz;
                                        
end Behavioral;


50Hz ve 1Hz elde etme Saat_bolme.vhd
library IEEE;
use 
IEEE.STD_LOGIC_1164.ALL;
use 
IEEE.STD_LOGIC_ARITH.ALL;
use 
IEEE.STD_LOGIC_UNSIGNED.ALL;

entity Saat_bolme is
 port 
(Clk_13Mhz5 in std_logic;
 
Clk_1Hz   out std_logic;
 
Clk_50Hz   out std_logic;
 
NClk_50Hz  out std_logic);
end Saat_bolme;

architecture Behavioral of Saat_bolme is
 signal Q
std_logic_vector(23 downto 0); --24bit sayac

 begin
 
--13.5Mhz saat sinyalinden 1Hz ve 50Hz elde ediliyor
 process
(Clk_13Mhz5)
 
begin
 
if rising_edge (Clk_13Mhz5then
 Q 
<= Q+1;
 
end if;
 
end process
 
Clk_50Hz <= Q(18);
 
NClk_50Hz <= not Q(18);
 
Clk_1Hz <= Q(23);
end Behavioral
 

bcd saydırma Sayac.vhd
library IEEE;
use 
IEEE.STD_LOGIC_1164.ALL;
use 
IEEE.STD_LOGIC_ARITH.ALL;
use 
IEEE.STD_LOGIC_UNSIGNED.ALL;

entity Sayac is
 Port 
Bcdout STD_LOGIC_VECTOR(3 downto 0)); 
end Sayac;

architecture Behavioral of Sayac is
 signal sayi
std_LOGIC_VECTOR(3 downto 0);
 
signal Clk_1Hz std_logic;
begin
 process
(Clk_1Hz)
 
begin
 
if rising_edge (Clk_1Hzthen
 sayi 
<= sayi +1;
 
end if;
 
end process
 
Bcd <= sayi;
end Behavioral;

proje dosyaları https://drive.google.com/open?id=1OJbTWNsABZDoljK-kiikgwkbcZcPye1g

Comodore C64 ve/veya Amiga 500 bağışlarınız kabul edilir. https://www.pcbway.com/setinvite.aspx?inviteid=47459 Bir işsize kitap bağışlamak istermisiniz ---> http://a.co/cuyqkBx   https://instagram.com/mc6810p10

MC_Skywalker

Soruyu yanlış sormuş ve yanlış kodları paylaşmışım. Oluşturduğum komponetlerden birini diğernine bağlarken bir hata yapıyorum ama farkedemedim. esas sorum bu. yardımcı olabilecek var mı?



Çalıştığım kodlar ekte

Top level entry LCD_7seg.vhd
library IEEE;
use 
IEEE.STD_LOGIC_1164.ALL;
use 
IEEE.STD_LOGIC_ARITH.ALL;
use 
IEEE.STD_LOGIC_UNSIGNED.ALL;

entity LCD_7seg is
       Port 
Clk_13Mhz5 
	
 : 
in std_logic;
	
	
	
	
  
Com 
	
	
    : 
out std_logic;
	
	
	
	
  
a,b,c,d,e,f,out STD_LOGIC);
end LCD_7seg;
	

architecture Behavioral of LCD_7seg is
	


	
	
signal segmentler
	
	
 : 
std_LOGIC_VECTOR (1 to 7);
	
	
signal Clk_50Hz
	
	
 : 
std_logic;
	
	
signal NClk_50Hz
	
	
 : 
std_logic;
	

	
	
signal Bcd
	
	
	
	
 : 
STD_LOGIC_VECTOR(3 downto 0);
	
	

Component Saat_bolme is

	
port (Clk_13Mhz5in std_logic
	
	
 
	
Clk_50Hzout std_LOGIC;
	
	
   
NClk_50Hzout std_LOGIC);
end Component Saat_bolme;
	
	
	
	
 
Component Sayac is
	
port Bcdout STD_LOGIC_VECTOR(3 downto 0));
end Component Sayac;
	

                           
  
begin
	
Saat_bolme_unitSaat_bolme port map
	
	
(
	
	
	
	
Clk_13Mhz5 => Clk_13Mhz5,
	
	

	
	
	
	
Clk_50Hz
	
 => 
Clk_50Hz,
	
	
	
	
NClk_50Hz => NClk_50Hz
	
	
);

	
Sayac_unitSayac port map
	
	
(
	
	
	
	
Bcd => Bcd
	
	
);
	

  
                  
with Bcd select
                  segmentler 
<= "0000001" when "0000", --0 a b c d e f g
                                
"1001111" when "0001", --1
	
	
	
	
	
	
	
	
	
	
  
"0010010" when "0010", --2
	
	
	
	
	
	
	
	
	
	
  
"0000110" when "0011", --3
	
	
	
	
	
	
	
	
	
	
  
"1001100" when "0100", --4
	
	
	
	
	
	
	
	
	
	
  
"0100100" when "0101", --5
	
	
	
	
	
	
	
	
	
	
  
"0100000" when "0110", --6
	
	
	
	
	
	
	
	
	
	
  
"0001111" when "0111", --7
	
	
	
	
	
	
	
	
	
	
  
"0000000" when "1000", --8
	
	
	
	
	
	
	
	
	
	
  
"0001100" when "1001", --9
	
	
	
	
	
	
	
	
	
	
  
"0001000" when "1010", --A
	
	
	
	
	
	
	
	
	
	
  
"1100000" when "1011", --b
	
	
	
	
	
	
	
	
	
	
  
"0110001" when "1100", --C
	
	
	
	
	
	
	
	
	
	
  
"1000010" when "1101", --d
	
	
	
	
	
	
	
	
	
	
  
"0010000" when "1110", --e
	
	
	
	
	
	
	
	
	
	
  
"0111000" when "1111", --F
	
	
	
	
	
	
	
	
	
	
  
"1001000" when others;
	
	
	
	
	
	
	
	
	
	
 
	
	
	
	
	
	
a<= segmentler(1) xor Clk_50Hz xor NClk_50Hz;
	
	
	
	
 
                  
b<= segmentler(2) xor Clk_50Hz xor NClk_50Hz;
	
	
	
	
	
	
c<= segmentler(3) xor Clk_50Hz xor NClk_50Hz;
	
	
	
	
	
	
d<= segmentler(4) xor Clk_50Hz xor NClk_50Hz;
	
	
	
	
	
	
e<= segmentler(5) xor Clk_50Hz xor NClk_50Hz;
	
	
	
	
	
	
f<= segmentler(6) xor Clk_50Hz xor NClk_50Hz;
	
	
	
	
	
	

	
	
	
	
	
	
g<= segmentler(7) xor Clk_50Hz xor NClk_50Hz;    
	
	
	
	
	
	
Com <= Clk_50Hz;
                                         
end Behavioral;



50Hz, terslenmiş 50Hz ve 1Hz elde etme Saat_bolme.vhd
library IEEE;
use 
IEEE.STD_LOGIC_1164.ALL;
use 
IEEE.STD_LOGIC_ARITH.ALL;
use 
IEEE.STD_LOGIC_UNSIGNED.ALL;

entity Saat_bolme is
	
port (Clk_13Mhz5 in std_logic;
	
	
	
Clk_1Hz
	
  : 
out std_logic;
	
	
	
Clk_50Hz
	
  : 
out std_logic;
	
	
	
NClk_50Hz  out std_logic);
end Saat_bolme;

architecture Behavioral of Saat_bolme is
	
signal Q
	
std_logic_vector(23 downto 0); --24bit sayac

	

	
begin
	
	
--
13.5Mhz saat sinyalinden 1Hz ve 50Hz elde ediliyor
	
	
process(Clk_13Mhz5)
	
	
begin
	
	
	
	
if 
rising_edge (Clk_13Mhz5then
	
	
	
	
	
<= Q+1;
	
	
	
	
end if;
	
	
end process;
	
	

	

	
	
Clk_50Hz <= Q(18);
	
	
NClk_50Hz <= not Q(18);
	
	
Clk_1Hz <= Q(23);
	

end Behavioral;
	
	
	
	

	


bcd saydırma Sayac.vhd

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

entity Sayac is
	
	
 
Port Bcdout STD_LOGIC_VECTOR(3 downto 0));
	
	
	
	
 
end Sayac;

architecture Behavioral of Sayac is
	
	
signal sayi
	
	
std_LOGIC_VECTOR(3 downto 0);
	
	
signal Clk_1Hz
	
std_logic;

Component Saat_bolme is
	

	
port (Clk_1Hzout std_logic);  
	


	
end Component Saat_bolme;
	
	

	
	

	
	
begin
	
	
	
Saat_bolme_unitSaat_bolme port map
	
	
	
(
	
	
	
	
	
Clk_1Hz
	
 => 
Clk_1Hz
	
	
	
);

	
	
process(Clk_1Hz)
	
	
begin
	
	
	
	
if 
rising_edge (Clk_1Hzthen
	
	
	
	
sayi <= sayi +1;
	
	
	
	
end if;
	
	
end process;
	
	

	
	
Bcd <= sayi;
end Behavioral;
Comodore C64 ve/veya Amiga 500 bağışlarınız kabul edilir. https://www.pcbway.com/setinvite.aspx?inviteid=47459 Bir işsize kitap bağışlamak istermisiniz ---> http://a.co/cuyqkBx   https://instagram.com/mc6810p10

iboibo



Top level entry LCD_7seg
.vhd
KodSeç

	
port (Clk_13Mhz5in std_logic
	
	
 
	
Clk_50Hzout std_LOGIC;
	
	
   
NClk_50Hzout std_LOGIC);
                   
Clk_1Hzout std_LOGIC);  <-------------  bunları unutmuşsun 
 


bir de devrede xorların 3 bacağından biri bacağı boşta görünüyor bana öyle geldi.


 Nden böyle yapıyorsun lcd farklı mı sürülüyor 7seg led e göre


MC_Skywalker

18 Nisan 2019, 20:55:48 #11 Son düzenlenme: 18 Nisan 2019, 21:16:26 MC_Skywalker
Alıntı yapılan: iboibo - 18 Nisan 2019, 20:38:45
Top level entry LCD_7seg
.vhd
KodSeç

	
port (Clk_13Mhz5in std_logic
	
	
 
	
Clk_50Hzout std_LOGIC;
	
	
   
NClk_50Hzout std_LOGIC);
                   
Clk_1Hzout std_LOGIC);  <-------------  bunları unutmuşsun 
 
bir de devrede xorların 3 bacağından biri bacağı boşta görünüyor bana öyle geldi.
 Nden böyle yapıyorsun lcd farklı mı sürülüyor 7seg led e göre

Xorlar bağlı sıkıntı yok.
port olarak tanımladığımda quartus asşağıdaki hatayı veriyor.
Error (10465): VHDL error at LCD_7seg.vhd(9): name "Clk_50Hz" cannot be used because it is already used for a previously declared item



Bu statik LCD Com ucuna 30Hz ile 100Hz arası pluse istiyor. bu frekans üreticinin kataloğunda yazayıyor.



pulse vermeden DC ile sürünce segmentler buzuluyor.

Bir yabancı amca denemiş böyle olmuş.
Comodore C64 ve/veya Amiga 500 bağışlarınız kabul edilir. https://www.pcbway.com/setinvite.aspx?inviteid=47459 Bir işsize kitap bağışlamak istermisiniz ---> http://a.co/cuyqkBx   https://instagram.com/mc6810p10

muuzoo

Merhaba,

Detaylı olarak incelemedim fakat ilk gözüme çarpan şu var:

segmentler(1) xor Clk_50Hz xor NClk_50Hz;

CLk işaretini kendisinin tersi ile xor işlemine tabi tutuyorsunuz, bu  işlemin sonucu her zaman "1" olur. O yüzden kodunuz şuna dönüşür

segmentler(1) xor "1";

Bu durumda ise yaptığınız iş aslında "not" kapısına tekabül eder. Yani değeri her zaman terslemiş olursunuz.

Acaba gözden kaçırdığım bir durum mu var?
gunluk.muuzoo.gen.tr - Kişisel karalamalarım...

MC_Skywalker

CD4543'e bakarak yapmaya çalışıyorum. Pluse girişini tersleyip XOR'un bir girişine girmiş dahasonra girşi terslemeli Buffer ile XOR'un diğer girşine girmiş ve kalan girşie segmenti girmiş. Orada ayrıca XOR dan sonra NOT ile birdaha tersleyip bufferlamış.

Comodore C64 ve/veya Amiga 500 bağışlarınız kabul edilir. https://www.pcbway.com/setinvite.aspx?inviteid=47459 Bir işsize kitap bağışlamak istermisiniz ---> http://a.co/cuyqkBx   https://instagram.com/mc6810p10

Mehmet Salim GÜLLÜCE

Anladığım kadarıyla 50 Hz ve 1 Hz arıyorsunuz.
Neden donanımsal olarak Şebeke frekansını kullanıp elde etmiyorsunuz?
Önce gerçekten LCD problemin frekans ile mi ilgili onu bir netlersiniz böylece..