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.

Allegro

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.
www.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.

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.

MC_Skywalker

Sormak istediğim şu şekildeydi;

Binary dediğim sayaç;
Kod Seç
 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.
Kod Seç

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.

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.