butonla pic e bilgi gönderme hatası

Başlatan MÜHENDİS ADAM, 29 Ağustos 2015, 18:49:23

MÜHENDİS ADAM

butona basmadan kendi kendine komutu yerine getiriyor ne yapmalıyım ?







#include <16f877a.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

//***********Denetleyici konfigürasyon ayarları************
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay(clock=4000000)   // Gecikme fonksiyonu için kullanılan osilatör frekansı belirtiliyor

#use fast_io(b) // Port yönlendirme komutları B portu için geçerli
#define buton pin_b0
int i=0;
void main()
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(adc_off);
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı

   set_tris_b(0x01);  // B portu tümüyle çıkış olarak yönlendiriliyor
   output_b(0x00);
   while(1)
{
       if(input(buton))
{
    delay_ms(500);
    output_high(pin_b1);
    i++;
   
   
}
       if(i==10)
  {
   delay_ms(500);
   output_high(pin_b6);
   delay_ms(2000);
   i=0;
   
    }
  }
}



RaMu

#1
if(input(buton))
yerine
if(! input(buton))
yaz.

Muhtemelen butonu yanlış bağlamışsındır,
detaylı anlatımı olan örnek uygulamalar var nette,
bunları incelersen problemi çözersin.

mesaj birleştirme:: 29 Ağustos 2015, 20:54:03

Birde reset haricinde ledleri hiç söndürmüyorsun,
değişikliği görmek için ledleri söndürmekte lazım.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

MÜHENDİS ADAM

#2
dostum doğru dedin butonda sıkıntı 10k direnç takıp pullup yapcakmışız sağol

OnderGrmz

Alıntı yapılan: MÜHENDİS ADAM - 29 Ağustos 2015, 18:49:23
butona basmadan kendi kendine komutu yerine getiriyor ne yapmalıyım ?
pin_b0 girişini pull-down yaptın mı ?

MÜHENDİS ADAM


Recep METE

Alıntı yapılan: MÜHENDİS ADAM - 29 Ağustos 2015, 18:49:23
butona basmadan kendi kendine komutu yerine getiriyor ne yapmalıyım ?







#include <16f877a.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

//***********Denetleyici konfigürasyon ayarları************
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay(clock=4000000)   // Gecikme fonksiyonu için kullanılan osilatör frekansı belirtiliyor

#use fast_io(b) // Port yönlendirme komutları B portu için geçerli
#define buton pin_b0
int i=0;
void main()
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(adc_off);
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı

   set_tris_b(0x01);  // B portu tümüyle çıkış olarak yönlendiriliyor
   output_b(0x00);
   while(1)
{
       if(input(buton))
{
    delay_ms(500);
    output_high(pin_b1);
    i++;
   
   
}
       if(i==10)
  {
   delay_ms(500);
   output_high(pin_b6);
   delay_ms(2000);
   i=0;
   
    }
  }
}



"debounce" denen sıçrama olayı meydana geliyor, bunu aşağıda verdiğim kodlar gibi düzenleyerek çözebilirsin.
  if (input(buton))   
      { delay_ms(20);while(input(buton)==1); output_high(pin_b1); }
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

RaMu

-İlk mesajdaki kod için-
debounce = buton arkı burada problem olmaz,
buton okumanın ardına yarım saniye bekleme verilmiş.
Ama butona basılı tutulursa
yaklaşık her yarım saniyede bir i değeri 1 arttırılır.
Yani butona 5 saniye basılı tutulursada RB6 pinindeki led yanar.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html