32 bit bit sayıyı 7 segment displaylarda göstermem gerek

Başlatan zamzam23, 26 Ekim 2010, 09:13:26

zamzam23

bunu nasıl başarabilirim.74hc595 kullanıcam.bu entegreyi biliyorum ama 32 bit sayıyı nasıl göstericem orasını bilmiyorum.yardımcı olursanız sevnirim.

alayli

Hangi dili kullanıyorsun? Proton ise yardımcı olabilirim.
Anca kazganmiş itmiş ilimiz törümüz erti. Türk Oguz begleri budun esiding. Üze tengri basmasar, asra yir telinmeser, Türk budun, ilingin törüngin kim artati? (udaci erti)

ete

Yapman gereken basit bir matematik hesabı yalnızca. Bir örnekle açıklayayım daha kolay anlarsın.
Elindeki 32 bitlik sayı diyelimki $44332211 olsun
Bu sayıyı şayet $4433 ve $2211 şeklinde 16 şar bitlik iki sayı haline getirebilirsen bunların her birinin low ve high bytları 8 er bitlik olacaktır. Bunları 16 bit olarak 595ler veya teker teker 595 lere yollarsan sayın ekrana gelecektir.
Şimdi sayıyı nasıl ayrıştıracağımıza bakalım. C de özel komut olabilir ama ben tamamen matematik kuralları ile açıklayacağım.

SAYIB=$44332211 /$10000 = $4433 şeklinde ayrılacaktır. Sonra
SAYIA=$44332211-($4433*$10000)=$2211 elde edilecektir.
Şimdi elinde iki ayrı sayı mevcut bunları kullanmak senin için zor olmasa gerek.

SAYIA.byte1=$22   (veya SAYIA/$100=$22
SAYIA.Byte0=$11   (veya SAYIA-(SAYIA/$100)=$11)

SAYIB.Byte1=$44   (veya SAYIB/$100=$44)
SAYIB.Byte0=$33  (veya SAYIB-(SAYIB/$100)=$33)

Ete


Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

rf

Geçenlerde yazdığım bir fonksiyon sanırım tam istenileni karşılıyor. Fonksiyon arka arkaya bağlanmış 74HC595'lere 32biti gönderiyor. 4 adet 7segmenti bu şekilde sürebilirsiniz.

#define HC595_DS   	RD1     //Serial Data Input
#define HC595_SH_CP 	RD0		//Shift Register Clock Input
#define HC595_ST_CP 	RD2		//Storage Register Clock Input


void HC595_Write_Long(unsigned long temp){
	char i;
	for(i=0;i<32;i++){
    	if((temp<<i)&0x80000000){HC595_DS=1;}
      		else{HC595_DS=0;}
     	HC595_SH_CP=1;
	  	HC595_SH_CP=0;
	}
	HC595_ST_CP=1;
	HC595_ST_CP=0;
}


Saygılarımla,

Not: Bu fonksiyon fxdev.org sitesindeki notlardan geliştirilip 8bit 'lik fonsiyon 32bit'e çevrilmiştir. Tanımlamalar Datasheete sağdık kalınarak yeniden düzenlenmiştir.
KOSGEB Girişimcilik Desteği Bilgi ve Paylaşım Platformu http://www.girisimcilikdestegi.com/

zamzam23

ben de tam 595 ler kaskat nasıl bağlanıyor onu soracaktım. mümkünse varsa proteus dosyasını da paylasırmısın.bu fonksiypn işime yarayacak gibi. herkese tesekkür derim cvpları için.

rf

KOSGEB Girişimcilik Desteği Bilgi ve Paylaşım Platformu http://www.girisimcilikdestegi.com/

zamzam23

şimdi ben 595leri kaskat bağlayıp 32 bit veriyi yollayıp latch ı ac kapa yapınca ekranda o sayı mı belırecek anlamadım kafam karıstı

justice_for_all

benim anlamadıgım 32 bit sayıyı 4 displayle nasıl göstermeyi dusunuyosunuz
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

zamzam23

arkadas ornek olması acısından yolladı onu bana. sayım 4 değil 9 basabaklı.

rf

Latch işlemleri fonksiyon içerisinde yapılıyor zaten.
Fonksiyona verdiğiniz 32bitlik sayı 4 tane 8 bit olarak 595'lerin çıkış uçlarında beliriyor.

Ortak anotlu 7 segment display kullanılarak. 595'lerin çıkışına bağlanacak uln2003'ler yardımı ile tarama yapmanıza gerek kalmadan displayleri sürebilirsiniz.

Saygılarımla,
KOSGEB Girişimcilik Desteği Bilgi ve Paylaşım Platformu http://www.girisimcilikdestegi.com/

zamzam23

o zmn ben sorumu yanlıs mı anlatım

4 tane 8 bit olmaz ki. ben 9 basamaklı sayının her basamagını 1 displayde göstermek istiyorum.toplam 9 display

rf

Kaskat bağlantı yöntemi 4 adetle sınırlı değil tabiki 9 adete kadar çıkarılabilir. Sadece verdiğim fonksiyon 4 adetle sınırlı. (long kullanıldığı için)

Fonksiyonu biraz geliştirerek 9 digitlik hale getirebiliriz...

KOSGEB Girişimcilik Desteği Bilgi ve Paylaşım Platformu http://www.girisimcilikdestegi.com/

ete

32 bitlik hex sayı toplam 6 hanelidir yani 6 displayde gösterilebilir.
32 bitlik en büyük sayı 4.294.967.294 dür. görüleceği üzere sayı 9 hane değil 10 hanedir. Kısaca sayıyı desimal olarak göstermek isterseniz 10 adet 7 segment display kullanmanız gerekir.

595 lerin her bir çıkışı 7 segmentin displayin bir segmentini sürecektir. Şayet küçük bir display kullanacaksanız her segment de tek led yer alır ve bunu 595 arada başka bir eleman olmadan rahatlıkla sürer. Ama büyük displa kullanacak iseniz mutlaka bir kuvvetlendirme yapmanız gerekir.

10 adet 595 bir birine seri bağlanmalıdır. Bunun için her birinin Q7' çıkışı bir sonrakinin DATA girişine bağlanmalıdır.
BU durumda ilk segmentin DATA girişi pice bağlanacaktır. Bütün CLK ucları ortak olacak ve Kilit uçlarıda ortak olacaktır.
Pice bağlı data girişi en soldaki haneyi kontrol eden 595 ten yapılırsa  önce birler basamağı, ardından onlar, ardından yüzler .....ve en sonda da milyar basamağı 595'e yollanmalı ve en son hanenin yollanmasından sonra kilit bacağına bir puls uygulanmalıdır.
Hepsi bu kadar.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

zamzam23

Alıntı yapılan: ete - 26 Ekim 2010, 13:26:52
32 bitlik en büyük sayı 4.294.967.294 dür. görüleceği üzere sayı 9 hane değil 10 hanedir.
benım sayım 32 bitlik ama decimal 9 haneli. herneyse orası önemlı değil. dedıklerınızı uygulamaya calısıcam.dogru mu anlamısım:
9 tane 595 kulanıyorum.
9 haneli  sayıyı parçalara ayırıp her bir basamagın binary karsılıgını(9 tane 8 bit) sırayla bit bit data hattına gönderiyoum. 72 bölmeli bir kutu düşünüp bunları dolduruyorum sonra latch yapıp aktif ediyorum. dogrumu

ete

En büyük sayın 9 hane ise tabiiki 9 hane kullanabilirsin. Ancak ortada bir kavram kargaşası var anlaşılan.
9 haneli en büyük sayı 999.999.999 sayısıdır ve 30 bitdir. 32 değil. Sen sayım 32 bit diyorsun ama 9 hane diyorsun burda bir yanlışlık olsa gerek. Birde sayını söylesen belki daha tutarlı hesap yapabiliriz. Enbüyük olası sayın nedir?

Teorik olarak yapman gereken şey 32 bitlik sayının bütün bitlerini ister tek seferde ister 8 er bitlik paketler halinde 595 lere vermen.
595 ler shift registerdir. Seri bağlanınca her 8 bit tamamlandığında ilave bit gelir ise ilk gelenbit bir sonrakine aktarılır. Böylece sen 32 biti tamamladığında her biri 595 e 8 bitlik bilgi yerleşmiş olacaktır.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com