Şimdi Ara

pic c den anlayanlara ufak bir soru

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
13
Cevap
0
Favori
1.174
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • pic16f84a ve pic c lite için soruyorum

    iki tane buton var (böcek buton deniyor herhalde,basınca basılı kalmıyor.darbe şeklinde sinyal üretiyor.).
    biri program içindeki bir değişkeni arttıracak diğeri azaltacak her basışta.
    bir buton portA.0 diğeri de portA.1 e bağlı olsun misal olarak.

    bilene çok kolaydır ama bir yardım edin.



  • asembbler da desen kodları verirdim ama pic c yi bilmiyorum yani asembbler bana daha kolay geldiği içindiğerleriyle uğrasmıyorum neyse kolay gelsin
  • Butonlara basıldığında butonların toprağa çekildiği mantığıyla kod yazıyorum.Değişken değeri 255 ise arttırma yapmaz değişken değeri sıfır ise azaltmaz.

    quote:


    int degisken=0;

    PORTA=0x00;
    TRISA=0XFF;

    while(1){
    if(RA0==0 && degisken!=255)
    degisken++;

    if(RA1==0 && degisken!=0)
    degisken--;
    }

  • teşekkürler...
  • Hardware yada softwate debouncing yapman gerekli.
  • #include <16F84A.h>
    #use delay(clock=4000000)
    #fuses XT,NOWDT,NOPROTECT,PUT

    int i=0;

    void main(void)
    {
    while(TRUE)
    {
    if(!input(pin_a0) && i!=255) //arttırma
    {
    while(!input(pin_a0)); //elini butondan çekene kadar bekle
    i++;
    }

    if(!input(pin_a1) && i!=0) //azaltma
    {
    while(!input(pin_a1));
    i--;
    }
    }
    }

    ben bas bırak buton kullandığını, basılınca porta low değeri (0) gönderdiğini ve değeri artacak değişkeninin de işaretsiz 8 bit (0-255) olduğunu varsaydım. Kod yukarıdaki şekildedir. Arkadaşınkine benzedi.

    üstteki kodda #fuses'dan sonra

    #define A0 input(pin_a0)
    #define A1 input(pin_a1)

    eklenirse, "input(pin_a0)" yerine sadece A0, input(pin_a1) yerine de sadece A1 kullanılabilir. Ufak bir ek olsun bu dediklerim.



    < Bu mesaj bu kişi tarafından değiştirildi TA2LSM -- 13 Ekim 2007; 14:20:47 >




  • quote:

    Orjinalden alıntı: erman374

    Hardware yada softwate debouncing yapman gerekli.



    Bunu gözardı etme. Kodu yazarken geciktirmeyi unutmuşum. Butonlar için geciktirme lazım. Pic hızlı olduğu için butona bas bırak sırasında bir kere basmanıza rağmen birden fazla basılmış gibi algılayabilir. Network_Killer arkadaş buna dikkat etmiş onunki daha doğru bir kod.
  • @muuzoo

    "&& i!=255" bunu bu şekilde yazmayı akıl edememiştim doğrusu. aşağıda bir karşılaştırma daha yaparak 0 ya da 255 olduysa sıfırla ya da 255'de tut diye yazıyordum eskiden. şimdi senin mantıkla bu iş daha iyi yapılıyor. Doğruya doğru.
  • quote:

    Orjinalden alıntı: Network KILLER

    @muuzoo

    "&& i!=255" bunu bu şekilde yazmayı akıl edememiştim doğrusu. aşağıda bir karşılaştırma daha yaparak 0 ya da 255 olduysa sıfırla ya da 255'de tut diye yazıyordum eskiden. şimdi senin mantıkla bu iş daha iyi yapılıyor. Doğruya doğru.



    İşinize yaradıysa ne mutlu.
  • cevaplar için teşekkürler..
    deboucing tam olarak ne bilmiyorum ama butonun basma bırakma olayını şu şekilde yaptım..

    if (!RA0) k0=1;
    if(RA0&&k0==1) {if(sayac!=100) sayac++;k0=0;}

    yanlız bir şey daha sorayım. şimdid ben ra0 portunu kullanıyorum buton için. butonu direk pin ile toprak arasına bağlıyorum.

    şimdi TRISA=0x01 yazıp ra0 ı giriş yaptığım da buton işlemiyor. bunun için butonu nasıl bağlamalıyız.(ayrıca butona seri direnç bağlayarak ta denedim. bir de pine direnç üzerinden 5V bağladım ve pini buton üzerinden toprağa bağladım , bir resimde görmüştüm. ama olmadı)

    RA0 ı TRISA=0x00 ile çıkış yapıyorum. RA0=1 yapınca buton işliyor. ama bu sanki yanlış bir kullanım.

    bu konuda ne önerebilirsiniz.yani kısaca butonu girişe nasıl bağlarım?

    cevaplar için şimdiden teşekkürler..



    < Bu mesaj bu kişi tarafından değiştirildi terminator -- 14 Ekim 2007; 1:20:00 >




  • Kod + Proteus 7.1 sp2 için simülasyon dosyaları:
    http://rapid_share.com/files/62443917/Buton_Okuma.rar.html

    Önce simülasyonu çalıştır. bir iki kere butona bas. sonra simülasyonu pause'la. i'nin değerini göreceksin açılan paencereden...



    < Bu mesaj bu kişi tarafından değiştirildi TA2LSM -- 14 Ekim 2007; 12:35:51 >
  • quote:

    Orjinalden alıntı: erman374

    http://forum.donanimhaber.com/m_18313116/tm.htm

    sağol hocam.

    açıklamışlar burada. biz gözden kaçırmışız konuyu ama....
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.