Nutiny_Pin_Kesmesi

Başlatan a.ser20, 23 Temmuz 2022, 09:44:19

a.ser20

Merhabalar kesme alt programı ile buton kontrol ediyorum fakat bazı basışlarımı kaçırıyor bazen çift basıyor kodda while ile bekletmeme rağmen problem yaşıyorum. Buton low ile çalışıyor(logic0) ve pull up direnci mevcut(mavi makaronlu kısma sakladım). Çözüm nedir?




mehmet

Kodun diğer kısımlarını ışın
gözlerimizle görüyoruz.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

a.ser20

100µF kondansatörle filtreledim. 100 ohm ve 10K dirençle pull down yaptım her şey halloldu teşekkürler

mehmet

100uF ile kaya gibi olmuştur.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

z

100 Ohm ve 100K ile pull down vede 100uF konusunu cok merak ettim. Sema cizebilirmisiniz?

Ayni teknigi bizlerde kullanabiliriz belki.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

a.ser20


makdeniz

Alıntı yapılan: z - 26 Temmuz 2022, 02:39:06100 Ohm ve 100K ile pull down vede 100uF konusunu cok merak ettim. Sema cizebilirmisiniz?

Ayni teknigi bizlerde kullanabiliriz belki.

100 Ohm ve 100K umarım paraleldir. Gerçi seride olabilir.  :du:
Karanlık olmadan aydınlık, Ölüm olmadan yaşam mantıksız.

mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

JOKERAS

a.serhatboz, Kod bu ise bu kesme kodu değil,Main kodu.
Kodunuz Blokeli çalışacak.Butona basılı tuttuğunuz sürece Kod Bloke şekilde
kalacak.Verimsiz Kod,israf.Blokeli çalışacaksa Kesme Rutininde yazmanın mantığı yok.
Ayrıca Kesmesiz de Blokesiz kod tasarlanabilir.

Kapasite ile Buton Debounce-Arkı filitre etmiş oldunuz.
Çalışırmı çalışır,ama çok hızlı basmak icab edecek durumlarda veya buton laçkalışınca
ikileme düşebilir.


 




z

Alıntı yapılan: a.serhatboz - 26 Temmuz 2022, 11:35:03Tabiki buyrun :)




Gayet mantikli ve incelikli bir sema.

Sacma bir sey bekliyordum acikcasi.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

a.ser20

#10
Alıntı yapılan: JOKERAS - 26 Temmuz 2022, 16:49:15a.serhatboz, Kod bu ise bu kesme kodu değil,Main kodu.
Kodunuz Blokeli çalışacak.Butona basılı tuttuğunuz sürece Kod Bloke şekilde
kalacak.Verimsiz Kod,israf.Blokeli çalışacaksa Kesme Rutininde yazmanın mantığı yok.
Ayrıca Kesmesiz de Blokesiz kod tasarlanabilir.

Kapasite ile Buton Debounce-Arkı filitre etmiş oldunuz.
Çalışırmı çalışır,ama çok hızlı basmak icab edecek durumlarda veya buton laçkalışınca
ikileme düşebilir.



Hayır Pin Kesmesi kullanıyoruz kodların kesme kısmı şu şekilde


void PinInterrupt_ISR (void) interrupt 7
{
_push_(SFRS);

  if (P04==1)
  {
      while(P04==1){}
    P03 = 0;
      
  }
    if (P05==1)
  {
      while(P05==1){}
    P03 = 1;
     P16 = 1;
   
  }
   if (P02==1)
  {
      while(P02==1){}
    P16 = 0;
   
  }
  PIF = 0;

_pop_(SFRS);
}


 





26 Temmuz 2022, 17:09:23
Alıntı yapılan: mehmet - 26 Temmuz 2022, 16:10:25100nF mi yoksa 100uF mi?


100 nanofarad olacak 100nF

JOKERAS

Eğer İnterrupt kodunuz Port Change kesmesi ise
böyle Port Change kesmesi olmaz.Hiç bir şey anlamadım!

void PinInterrupt_ISR (void) interrupt 7  {

if (P04==1) { //Pullup'tan dolayı Pin Lojik 1

    while(P04==1){} //Port Lojik 1 ise Sonsuz döngü.Kod burada takılacak.
    P03 = 0;
 }
}
PIF = 0;


Port Change Kesmesi Adından da anlaşılacağı üzere İlgili donanımdaki Portların herhangi birinde
olabilecek Lojik değişimde İnterrupt üretir.
Yukarıdaki While'lara takılmaması siz o sırada butona basıyorsunuz,bir çırpıda interruptan çıkmış oluyor.Şunu demek istiyorum...
Siz butona bastığınız anda İnterrupt oluşur ve kod İnt rutinine dallanır,Port daha Lojik sıfır pozisyonundayken While'ı es geçer rutinden çıkar.
While'ın ne anlamı kaldı o zaman.Ayrıca İnt rutininde While Tehlikeli bir durum.
Donanımı bayrakları kontrol edip bir hamlede çıkmak gerekir.
İnterrupt kod satırları uzun ise ayrı bir Fonksiyon yazıp Fonksiyonu çağırmak çok daha
mantıklı olur çünkü,Kesme Vectörü sınırı belli çok küçük bir dağarcık..

Kullandığınız işlemci nedir bilgim yok ama mantıksız bir durum var ortada.
Kodu biraz şişirin hata vereceğin düşünüyorum.


a.ser20

Dedikleriniz hakkında geniş bilgiye sahip değilim bu bu kodlar nuvotona ait bir işlemciye ait kodlar okuldaki pic hocamız da bu şekilde while(P04==1){} kullanıyordu. Programın çalışmasında olağandışı bir hareket yok fakat yine de söylediklerinize iyice bakıp whilesiz denemeler yapacağım. Ayrıca orada while(P04==1){} olmasa işlemci 1 kez değil defalarca kesmeye girecek ve biz bunu istemiyoruz