breadbord ve similasyon sorunu

Başlatan emalper, 14 Eylül 2014, 11:30:09

emalper

Merhaba arkadaslar ben 16f877a picini kullanarak a0 ucundaki buton ile b0 pinini yakmak istiyorum.Bunun icin soyle bir kod yazdim ve similasyon programinda denedim calisiyor ama breadborda ne zaman aktarsam sorun cikartiyor.Sorun olarak simdi a0 bacaindan gelen kabloyu butonun bir ucuna bagliyorum ve butonun diger ucunuda - ye bagliyorum.boyle yapinca led hep yabiyor ve butona basinca sonuyor.ben ledin sonuk olmasini ama butona basinca yanmasini istiyorum.Bunu nasil yapabilirim.

Kodlar:
int1 girdi;
void main ()
{
basla:
girdi=input (pin_a0);
output_bit (pin_b0, girdi);
goto basla;
}

baran123

#1
Merhaba CCS C de yenisin galiba ? bir kaç ufak bilgi vereyim istersen :)

Öncelikle hangi pinin giriş(örnek buton) , hangisinin çıkış (led,motor gibi) olacağını belirlemen gerekiyor
set_tris_a(0x01);
burada a portu'nun 0.bitini giriş diğerlerini çıkış yaptım 1 giriş 0 çıkış anlamında düşünebilirsin 0x01 = 0000 0001 'dir sağdan sola doğru gider

daha sonra bu porta bir değer vermen lazım yani ledler yansın mı sonsun yani 0 mı 1 mi olmalı diye

output_a(0x00);
en başta bütün pinler 0 değerini verdik yani led sönük

diğer bir husus ise goto komutu yerine

while(TRUE)
{
//buraya yazdıgın kodlar sürekli tekrarlanır.Sonsuz döngüdür
}


buton durumunu kontrol etmek için if() komutunu kullanmalısın örnek bir kod var aşşağıda

void main(void)
{
   set_tris_a(0x01);
   set_tris_b(0x00);
   
   output_b(0x00);

   while(TRUE) // sonsuz döngü TRUE = 1, FALSE = 0 dır true yerine 1 de yazabilirsin veya bir koşul sağlayabilirsin
   {
       if(input(pin_a0) == 1) // eğer a0 butonuna basılmış ise ledi yak 
       {
           delay_ms(50); // buton atlamalarını önlemek için biraz bekleme yaptık
           output_high(pin_b0);
       }
       else  // değil ise söndür 
       {
            output_low(pin_b0);
       }
   }
}
butona bastıgın zaman led yanar elını cekersen söner


buton bağlantısını dikkat et altta bir butonun bağlantı resmi bulunuyor kolay gelsin :)



mesaj birleştirme:: 14 Eylül 2014, 17:55:49

Butondaki direnc in sebebi kararlılık yani oradaki direnc Pull-Down direncidir ismi böyle sadece 10k yada 4.7 k gibi bir değer olur Pull down denmesinin sebebi diren ile 0 hattına verilmesidir.Bir de Pull up var oda direnin ucunu +5 yani HIGH seviyesinde tutulmasıdır.Bu direnclerin kullanım sebebi ise işlemciye kesin bir yanıt göndermektir çünkü işlemciler bildiğin gibi 0 ve 5 değerini okur yani direnc koymassak kararsın olabilir 2.5,3 gibi :) .Resimde pull down yapmıs işlemci sürekli olarak 0 görüyor butona basınca bir anda 5 volta gidicek yani işlemci 1 algılayacak zaten if komutunun içinde yazdık 1 olursa ledi yak diye bu kadar mantığı yanlısım varsa ustalar düzeltsinler :) Bilmediğini farz ederek böyle anlattım yanlıs anlamıyasın.

emalper

#2
Tesekkurler

emalper

Alıntı yapılan: Baran Ekrem - 14 Eylül 2014, 17:50:13
Merhaba CCS C de yenisin galiba ? bir kaç ufak bilgi vereyim istersen :)

Öncelikle hangi pinin giriş(örnek buton) , hangisinin çıkış (led,motor gibi) olacağını belirlemen gerekiyor
set_tris_a(0x01);
burada a portu'nun 0.bitini giriş diğerlerini çıkış yaptım 1 giriş 0 çıkış anlamında düşünebilirsin 0x01 = 0000 0001 'dir sağdan sola doğru gider

daha sonra bu porta bir değer vermen lazım yani ledler yansın mı sonsun yani 0 mı 1 mi olmalı diye

output_a(0x00);
en başta bütün pinler 0 değerini verdik yani led sönük

diğer bir husus ise goto komutu yerine

while(TRUE)
{
//buraya yazdıgın kodlar sürekli tekrarlanır.Sonsuz döngüdür
}


buton durumunu kontrol etmek için if() komutunu kullanmalısın örnek bir kod var aşşağıda

void main(void)
{
   set_tris_a(0x01);
   set_tris_b(0x00);
   
   output_b(0x00);

   while(TRUE) // sonsuz döngü TRUE = 1, FALSE = 0 dır true yerine 1 de yazabilirsin veya bir koşul sağlayabilirsin
   {
       if(input(pin_a0) == 1) // eğer a0 butonuna basılmış ise ledi yak 
       {
           delay_ms(50); // buton atlamalarını önlemek için biraz bekleme yaptık
           output_high(pin_b0);
       }
       else  // değil ise söndür 
       {
            output_low(pin_b0);
       }
   }
}
butona bastıgın zaman led yanar elını cekersen söner


buton bağlantısını dikkat et altta bir butonun bağlantı resmi bulunuyor kolay gelsin :)

(Resim gizlendi görmek için tıklayın.)

mesaj birleştirme:: 14 Eylül 2014, 17:55:49

Butondaki direnc in sebebi kararlılık yani oradaki direnc Pull-Down direncidir ismi böyle sadece 10k yada 4.7 k gibi bir değer olur Pull down denmesinin sebebi diren ile 0 hattına verilmesidir.Bir de Pull up var oda direnin ucunu +5 yani HIGH seviyesinde tutulmasıdır.Bu direnclerin kullanım sebebi ise işlemciye kesin bir yanıt göndermektir çünkü işlemciler bildiğin gibi 0 ve 5 değerini okur yani direnc koymassak kararsın olabilir 2.5,3 gibi :) .Resimde pull down yapmıs işlemci sürekli olarak 0 görüyor butona basınca bir anda 5 volta gidicek yani işlemci 1 algılayacak zaten if komutunun içinde yazdık 1 olursa ledi yak diye bu kadar mantığı yanlısım varsa ustalar düzeltsinler :) Bilmediğini farz ederek böyle anlattım yanlıs anlamıyasın.

Merhaba oncelikle cevabiniz icin cok tesekkur ederim.evet css c de yeniyim daha yolun basindayim.Serdar cicek hocamizin yazdigi css c ile pic programlama adli kitap yardimi ilede ogrebneye calisuyorum.Bu yazdigin kodu telefondan yazdium icin direk hepsini kopyalayamadim ama dediginiz gibi set_tris komutlarini yerlestirdim.kitap sirayla gittigi icinde while yerine goto basla komutunu kullanmis bende oyle kullnadim.Devreyi similasyonda calistirdigim zaman hic bir direnc koymadan direk a0 dan aldigum ucu butona ve butonunda diger ucunu - ye baglayinca sorunsuz sekilde calisti.led hep sonuk kaldi ne zaman bassam yandi.

Ama bunu breadborda aktarinca tam tersi oldu led hep yanik kaldi butona basinca sondu.ama a0 dan gelen pini butona ve aybi pini 10k direnc ile - bagladim diger ucuda 330 ile + ya bagladim boyle yapinca oldu yani hep sonuk kaldi basinca yandi.merak eftigim olay bu kodlarla mi alakalo birsey yoksa devre ile mi? Ve a0 pinini giris olarak ayarlamamamiza ragmen niye a0 pininde elektrik var?

Recep METE

Arkadaşım "Serdar Çiçeğin" kitabından almış olduğun kodlarda bir sorun yok.Sorun senin breadboard olayında.Yaptığın breadboard çalışmasının resmini buraya koyarsan sana nerelerde hata yapmış olduğunu söyleyebiliriz.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

RaMu

#5
Denediğin kodda yazıyor,
a0 pini ne ise led de aynısı oluyor,
a0 pini 1 (+5V, high) olduğu müddetçe led yanık olsun,
a0 pini 0 (GND veya eksi gibi, low) olduğu müddetçe led sönük olsun,
butonu bağlama yöntemine göre
butona basılı olduğundamı yoksa bırakılmış olduğunda mı buton a0 low veya high olacak değiştiriyorsun,
kodda buna göre tepkisini veriyor.

mesaj birleştirme:: 15 Eylül 2014, 22:43:28

Ledide md. pinine dirençsiz sakın bağlama, fazla akım çekip pici yakarsın,
buton bağlantısındada geliştirme yapılabilir ama çok önemli değil.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

hasankara

pic16f876 da default konumda iken yani ayar yapılmadığında porta analog olarak ayarlı geliyor. analog modülü kapatmadığınız sürece dijital işlemlerinizi yapmakta sıkıntı yaşamanız muhtemel.

RaMu

ccsc bunu default olarak
yani kodda özellikle seçmezsen
tüm  pinleri dijital seçer, problem olmaz.

Aslında tris ayarıda yapmaya gerek yoktur,
ccsc default olarak (eğer fast io komutunu özellikle  kulanmazsan)
bütün input output komutları için tek tek her komuttan önce
pini ne gerekiyorsa input veya output yapar.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

emalper

Suanda internetten yana sikintim var ne yazikki fotograflari atamiyorum ama en kisa zamanda buraya atacagim.Birde soyle sorsambelki daha aciklayici olabilirim normalde devreyi kurdum diyelim a0 pini bbostahic birsey baglamadim led sonuk normal olarak onu anladim ama a0 pinine bir jumper taktim mi ve cunu be - ne + bagladim yani sadece kabloyu takyim led yandi bu nie oluor? Yani sonucta bosta sallanan bir kablo

RaMu

Türkçe yazsan bizde anlasak ne yazdığını,
yazarken biraz özen gösterin ki bizde özenerek cevap vermeye heveslenelim.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

zamzam23

Alıntı yapılan: emalper - 16 Eylül 2014, 01:51:29
Suanda internetten yana sikintim var ne yazikki fotograflari atamiyorum ama en kisa zamanda buraya atacagim.Birde soyle sorsambelki daha aciklayici olabilirim normalde devreyi kurdum diyelim a0 pini bbostahic birsey baglamadim led sonuk normal olarak onu anladim ama a0 pinine bir jumper taktim mi ve cunu be - ne + bagladim yani sadece kabloyu takyim led yandi bu nie oluor? Yani sonucta bosta sallanan bir kablo

emalperkardeşndnböleyapıyorsundüzgünyazsandabizdeokusakyrdmcıolsakhanidyrm

emalper

Haklısınız çok özür dilerim.