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.
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.
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
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
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 ?
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.
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
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 (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.
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);
}
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?
@RaMu
ds=veri.i;
yukarıdaki satırdaki veri'den sonraki "." işaretini uygulanabilir operand olarak görmüyor.
Aşılabilir bir sorun (struct kullanılabilir)
ama amatör uygulamalar için çok da gerekli değil.
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);
}
..............hatalı mesaj