DECİMAL VERİYİ BINARY olarak (74hc595)

Başlatan ahmetbudak, 02 Nisan 2015, 12:02:51

ahmetbudak

herkese iyi çalışmalar  mesela 96 sayısını pic'in herhangi pininden 74hc595 e yüklemek istersek bu durumda 96 sayısını ikiliye çevirmek lazım değil mi ve( her bir bitini tek tek göndermeliyiz) bunun için hazır fonk var mı? veya Decimal den binary'e nasıl çeviririz cevaplar için şimdiden teşekkürler.

MrDarK

Decimal 96 -> Hex 60 -> Bin 0110 0000

74HC'ye o datayı gönderirsen bu çıkar, eğer 96 sayısının Ascii karşılığını göndermek istersen ;
Önce Hex 36 sonra Hex 39 göndererek iki basamak şeklinde göndermiş olursun.

Kısaca yapmak istediğin şeyi açıkça belirt ki yardımcı olalım :) Mesela nerede göstereceksin bu bilgileri.
Picproje Eğitim Gönüllüleri ~ MrDarK

ete

Hiçbir şekilde sayı formatını değiştirmeye gerek yoktur. Çünki sen hangi formatla sayı verirsen ver denetleyici yada lojik entegre binary formatta işlem yapar. Yani 595 entegresine direk 96 sayısını yollasan bile bilgi aktarımını sağlayan komut gurubu bu aktarımı bit bazında binary olarak gerçekleştirir. Senin ayrıca bir şey yapman gerekmez.

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

ahmetbudak

Alıntı yapılan: MrDarK - 02 Nisan 2015, 12:52:29
Decimal 96 -> Hex 60 -> Bin 0110 0000

74HC'ye o datayı gönderirsen bu çıkar, eğer 96 sayısının Ascii karşılığını göndermek istersen ;
Önce Hex 36 sonra Hex 39 göndererek iki basamak şeklinde göndermiş olursun.

Kısaca yapmak istediğin şeyi açıkça belirt ki yardımcı olalım :) Mesela nerede göstereceksin bu bilgileri.
mesela PORTA NIN 0. pininden 595 in ds pinine 96 değerini gönderip 595 in D0 dan D7 YE kadar olan pinlerinde yani paralel out unda 96 yı 8bitli düzende görmek istiyorum

MrDarK

#4
ahmetbudak hala kapalı kutu gibisin :) Biraz daha ifade etsene istediğin şeyi;

Söylediklerinden tahmini şunu çıkıyorum atıyorum mikrodan şu bilgi çıkacak olsun ; 0110 0000

Sen tüm D0 - D7'den 0110 0000 bilgisini bit sırasına göre önce hepsinde 0 sonra hepsinde 1 sonra hepsinde 0... şeklinde mi istiyorsun? Paralel out derken bunu mu kastediyorsun ?
Picproje Eğitim Gönüllüleri ~ MrDarK

ahmetbudak

Alıntı yapılan: MrDarK - 02 Nisan 2015, 14:06:31
ahmetbudak hala kapalı kutu gibisin :) Biraz daha ifade etsene istediğin şeyi;

Söylediklerinden tahmini şunu çıkıyorum atıyorum mikrodan şu bilgi çıkacak olsun ; 0110 0000

Sen tüm D0 - D7'den 0110 0000 bilgisini bit sırasına göre önce hepsinde 0 sonra hepsinde 1 sonra hepsinde 0... şeklinde mi istiyorsun? Paralel out derken bunu mu kastediyorsun ?
Hocam şöyle anlatayım bakalım anlatmayı becerebilecek miyim?  EEPROM memory'e yazılmış bir değeri 8 adet ledde göstermek istiyorum ama MCU mun pin sayısı yeterli değil bunun içinde   595 entegresini kullanmak istiyorum.

MrDarK

Tamam o zaman konu ETE hocamızın dediği yere gidiyor, herhangi bir değişiklik yapmayacaksın data üzerinde.

Eepromdan okuduğun bilgi zaten binary. MCU'nun içinde decimal veya hex gibi görünmez datalar , tüm bilgi 1 ve 0'dan ibaret :)

+1
Alıntı yapılan: ete - 02 Nisan 2015, 12:59:59
Senin ayrıca bir şey yapman gerekmez.

Ete

Picproje Eğitim Gönüllüleri ~ MrDarK

RaMu

Senin istediğim durumda
söylendiği gibi hiç bir şey yapmana gerek yok,
hazır hc595 kütüphanesi varsa direk kullanabilirsin
yoksa şurada detaylı anlattım ve ccsc için örnek paylaştım
http://elektronikprojem.com/forum-92-74HC595-shift-register-hakkinda-Turkce-bilgi-ve-isis
bu veya benzeri anlatımlardan faydalanıp
kolaylıkla istediğini yapabilirsin.

74hc595 port çoğullama
veya pic port çoğullama gibi örneklerede bakabilirsin.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

ahmetbudak

yapmak istediğim belkide anlatmakta zorluk çektiğim işlem şuydu
yardımlarınız için teşekkürler  :)
#define sh_cp PORTA.RA0
#define ds    PORTA.RA1
#define st_cp PORTA.RA2
#define mr    PORTA.RA3
#define oe    PORTA.RA4
 int i_veri=129;
 int d[8];
 int i=0x00;
 void cl(){
     sh_cp=0x01;
     sh_cp=0x00;

     }
void aktar(){

     st_cp=0x00;
     st_cp=0x01;
     }
void veri (){
     for(i=0;i<8;i++){

        d[i]=i_veri % 2;
        i_veri=i_veri/2;
        ds=d[i];
        cl();

        
        }



     }
     
void main() {

CMCON=0X07;
TRISA=0X00;
st_cp=0x01;
sh_cp=0x00;
oe=0x00;
mr=0x01;

      veri();
      aktar();
      delay_ms(100);
      while (1);

}

RaMu

void veri (){
     for(i=0;i<8;i++){

        d[i]=i_veri % 2;
        i_veri=i_veri/2;
        ds=d[i];
        cl();

        
        }

yerine;

void veri (){
     for(i=0;i<8;i++){

        ds=veri.i;
        cl();

        }


şeklinde yazınca derlemede hata veriyor mu?
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

ahmetbudak

@RaMu

ds=veri.i;
       
yukarıdaki satırdaki  veri'den sonraki "." işaretini uygulanabilir operand olarak görmüyor.


RaMu

Aşılabilir bir sorun (struct kullanılabilir)
ama amatör uygulamalar için çok da gerekli değil.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

baran123

Sorun çözdün sanırım ama şöyle bir fonksiyon kullanıyordum, belki işine yarar  .Hex olarak gönderme yapıyor 74hc595'e.

#define HC595_DS        PIN_A0                 
#define HC595_SH_CP  PIN_A1                              
#define HC595_ST_CP  PIN_A2 

void HC595_Send(unsigned char data)
{                                  
   unsigned  char i;       
              
   for(i = 0x80; i > 0; i >>= 1)
   {                                
      if(i & data) output_high(HC595_DS);
      else output_low(HC595_DS);     
      output_high(HC595_SH_CP);           
      output_low(HC595_SH_CP);   
   } 
      output_high(HC595_ST_CP);        
      output_low(HC595_ST_CP);                               
} 

RaMu

#13
..............hatalı mesaj
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html