pic c de picin bacagina bagli olan ledin durumu???

Başlatan INFINITY, 18 Ocak 2007, 22:42:21

INFINITY

arkadaşlar elimizde bir adet 16f877 var ve bunun b portunda 8 adet led bagli
CCS de nasıl bir kod yazmalıyızki picin portunu okuyup bize hangi ledlerin yanık hangilerinin sönük oldugunu bildirsin...
Elektron Hacısı Çekirdek Kabesini Tavafta...  Eğer atomda çekirdek ile elektron arasındaki boşluk yok olursa 1 çay kaşığı toprak 40.000 Ton gelir.

Göktuğ

B portu ledleri surerken aynı anda onları okuyamaz. Okumaya calıstıgında surmuyordur....

buiba

ccs bilmiyorum fakat ,temel olarak tek tek bitlerin 1/0 mi oldugunu test ederek yada ledlerin bagli oldugu portu okuyup w'ya kopyaladiktan sonra 255 ten 0 kadar bir dusup her dustugunde ( xor ) yada cikarma islemi yaparak hangi portlarin 1 hangi portlarin 0 oldugunu anlayabilirsin.( tabii bu islemleri portlari surdukten sonra yapman gerekir.)

armys2000

input(PIN_B1)
CCS bunu da kullanabilirsin  Input() Fonksiyonu yada INPUT_STATE() Fonksiyonu  yanlız okumadan önce mutlaka giriş çıkış  ayarlarını yap

yada 8 led varsa 8 adet değişken tanımlarsın high için bir değer alır low için bir değer alır   bu değişkenleri ledi yakıp söndürürken değişkenlerin değerini atarsın  sonrada okurken değişkenleri okuyarak high mı low mu anlarsın ama bu mantıklı bir çözüm değildir  özelliklede bir değişkeni 0 dan başlayıp 255 e kadar saydırıyorsan ve bunuda herhangi bir port ta gösteriyorsan değişken mantığı bir işe yaramaz  ama en güzeli input() fonksiyonu kullanmak

if( input(PIN_A0) ) ' Pin a 0 sa false döner 1 se true döner

input_state()  Fonksiyonunda ise ilgili pin in Yönünü okuyabilirsin (giriş mi , çıkış mı)

dir = input_state( pin)

climax

@armys2000  hocam değer atama olayını yaptığımız zaman program baya uzuyor.Ya aslında bizim buradaki amacımız porta bağlı olan 8 ledin durumu öğrenip seri porttan Pc ye bilgi gönderip  Visual Basic programında ledlerin açık veya kapalı olduğunu kullanıcıya ilk arayüzü açtığında göstermektir.Ama işte hepsi için ayrı ayrı değer atama olayı programı baya uzattı.Bide seri porttan gönderirken atadığımız değerleri aynı anda göndermek problem oluşturdu.Sizin dediğiniz INPUT fonksiyonunu bir daha deneyip size en kısa zamanda sonucu bildirelim.İlginizden dolayı teşekkürler...
Paylaşmak düsturumuzdur.

armys2000

ok Hocam

Bu arada bişey daha var  INPUT_X() fonksiyonunu bir incele sanırım bu en uygun olanı

int deger;

Deger = input_b();   // 8 bit integer deger geri gönderir (Port b yi oku  
                             // deger değişkenine ata)

Kolay gelsin

sitenindelisi

Ben mi olayı basit düşünüyorum yoksa anlayamadığım bir noktamı var acaba.
Port üzerinde bulunan ledlerin durumunu zaten ilgili portun registerı tutmakta ve yönlendirmektedir. Dolayısıyla herhangi bir ilave kod yazmaksızın, tanımlayacağınız bir değişken içerisine portun durumunu yazıp;

port_temp=portb


pc ye gönderdiğinizde portun durumunuda bildirmiş olacaksınız.
Sanırım ben olayı idrak edemedim. :?

INFINITY

@sitenindelisi hocam az daha açsana şu dediklerini....

port_temp=portb ile ilgili  kısa bi kod yazman mümkünmü?
Elektron Hacısı Çekirdek Kabesini Tavafta...  Eğer atomda çekirdek ile elektron arasındaki boşluk yok olursa 1 çay kaşığı toprak 40.000 Ton gelir.

sitenindelisi

main() {
int port_temp;

set_tris_b(0x00);
port_temp= portb;
.
.
}

Göktuğ

Bir donanımcı olarak yaklasıyorum.

Port nasıl set ediliyor? Portu set ettiği değişkeni okuması (bilinmesi)  gerekmezmi? Bunun için
port_temp= portb

gibi bir komut gereksiz olmuyormu ?

O komut yerine
port_temp= set edilen degisken

olması gerekmiyormuydu?

Dahada onemlisi ilk yazdıklarımda yanlıslık varmıki?, yazılımda cözüme devam ediyorsunuz? Yani bir porttaki ledleri suruyorsanız 2 sekilde oluyordur. Ya ledleri besliyorsunuzdur, yada pinleri topraga cekerek ledlerin ground baglantısını yapıyorsunuzdur?
Ledleri besleme yontemine gidiliyorsa en yukarıda belirttigim gibi daha onceden elde edilmiş bir veri vardır ve bunu tekrar farklı bir komutla elde etmenin luzumu yoktur.
Ledlerin topraklarını kontrol ediliyorsak o portu okumak mumkun değildir. ???

Burada yanlıs bir sey varmı? Varsa ögrenebilirmiyim.

sitenindelisi

portu giriş olarak set etmem evet hata, farketmedim.
Alıntı yapılan: "Goktug1217 Üstadım"
port_temp= set edilen degisken
Değişkeni okuma konusunda katılmıyorum. İşlemlerin değişken üzerinden mi, doğrudan portamı yapıldığı belli değil. Değişken üzerinden yapıldığını ve bit bazında bir pine manüpilasyon yapıldığını düşünelim. Değişkenimiz değer değiştimemesine rağmen, portumuzun değeri değişti.

Portun sink değil source çalıştığını göz önüne alarak yazdım yukarda ki  mesajı. Bu koşullarda port okuma konusunda kesinlikle aynı fikirdeyim. Arkadaşın portu okumaktan kastının, register ile pinleri mukayese etmek değil de registerın en son durumunu öğrenmek olduğunu zannediyorum. Bu durumda;
Portumuz source(ledleri gnd ye sürüyor) , bit bazında manüpilasyon yapılabilme ihtimali var ve pinlerin durumu ile register içeriğini karşılaştırmak değil amaç. Doğrudan portb yi okumak sonucu verir.

armys2000

Sadece Şuna en mantıklı cevabı bekliyorum arkadaşlar.

Şuna;

Diyelimki 8 tane sensör ve bu sensörlerden gelen 1 -0 verisini göstertecek  8  adet ışıklı ikaz sistemimiz var aynı zaman da bu cihaz pc yede bağlanıp bir takım işler yapılabiliyor. (Pc ye ilk Bağlanışta Bu Işıklı ikazların son durumu isteniyor  Climax'ın istediği bu sanırım)

@goktug1217 hocam sizin dediğinizde bir bakıma mantıklı madem ben portu 1 veya  0 ayarlayabiliyorum ayarlarken de değişkende tutarım (portun her set edilişinde bunu yaparım )  İstenildiği vakitte bunu veririm. Ama yazılan kodun boyutunu arttır. Bir başka unsur da @sitenindelisi hocamın söylediği Bit bazında işlem yapıyorsa ki durum öyle. O zaman yazılan kod biraz daha artacak. Şuna paragrafına dikkatinizi çekerek! Portu set ederken değişkene atayıp bu değişken üzerinde işlem yapmak  sağlıklı olmaz neden? çünkü ışıklı ikazlarımız sensör verisini gösteriyor hangi sensör  hangi zaman da portun ilgili biti ni 1 veya 0 yapıyor onu bilmiyoruz    Dolayısıyla doğrudan tek satır kodla portu okumak daha mantıklı. Bana en mantıklı ve en legal kod bu geliyor .  

@sitenindelisi hocam olay çok basit ama göründüğü gibi değil amac sadece  portu okumak değil bence amaç istenileni en mantıklı ve en kısa yoldan çözmek.  Bizim burdaki tartışma konumuz bu.  Şöyle bir örnek vereyim sene 1993 lerde  basic kullanırken yazdığım kodlara bazen bakıyorum iananırmısınız 100 satırlık kod şuan ki bilgi ve tecrübelerle 10-15 satırda yapılacak kod  halaa gülüyorum nasıl böle bişey yazmışım  diye . Ben burda bunları öğreniyorum bunları paylaşıyorum. Bence sadece yazmak olmamalı yazdıklarımızın  güvenirliliği vs si tartışma konusu olmalı Neyse yine gece gece edebiyat parçaladım. Bu arada climax hocam umarım kafan iice karışmamıştır.

climax

Hocam ilgilerinizden dolayı hepinize teşekkür ediyorum.Aklım ilk başta biraz karıştı ama daha sonra yapmış olduğunuz açıklamalarla kendime geldim:)
Ya deneme imkanımız olmadı.Biraz yoğunluk var.Ama en kısa zamanda  komutları deneyip sizlere sonucu söyleyeceğiz.Tekrar ilgilerinizden dolayı teşekkürler.İşte picproje budur...
Paylaşmak düsturumuzdur.