Butona Basılı Olmadığı halde Basılıymış Gibi Görüyor

Başlatan vitruvius, 05 Ocak 2012, 11:44:52

vitruvius

Merhaba, çok basit şekilde butona basıldığında bir dc motoru durdurmak istiyorum. Butona basmadığım halde sürekli butona basılıymış gibi gözüküyor ve motor dönmüyor. Bu durumu butona basıldığında yaktığım ledin sürekli yanık olmasıyla gözlemleyebiliyorum. Arada durduk yere ufak yanıp-sönmeler ve motorun çalışıp-durması oluyor. Butondan çıkan kabloyu pice sokmasam bile durum aynı. Butondan pic'e giren bacakta 0.3V gerilim ölçüyorum. Sorun ne olabilir?

Teşekkürler.

Devre kodum:

#include <16f628A.h>
#fuses XT, NOWDT, NOPROTECT, NOBROWNOUT, NOLVP, NOPUT, NOCPD
#use delay (clock=4000000)

#use fast_io(a)
#use fast_io(b)

#int_RB

void B_degisiklik()
{
// Bu if'li parçacıkta sıkıntı var.
   if (input(pin_b6)) // Durak
      {
        output_high(pin_a1); // Durak Ledi
        set_pwm1_duty(62);
        delay_ms(2000);        
        set_pwm1_duty(0);
        delay_ms(3000);
        output_low(pin_a1);
      }
      
   while(input(pin_b5)) // Engel
      {
         output_high(pin_a2); // Engel Ledi
         set_pwm1_duty(0);
         delay_ms(50);
         output_low(pin_a2);
      }
}

void main ( )
{

setup_timer_1(T1_DISABLED);

set_tris_b(0xF0);
set_tris_a(0x00);

output_b(0x00);
output_a(0x00);

enable_interrupts(INT_RB);
enable_interrupts(GLOBAL);

output_high(pin_b0);  // Pic'in çalıştığına dair bir led
output_low(pin_b2);   // IN1 lojik-0
output_high(pin_b1);  // IN2 lojik-1

setup_ccp1(CCP_PWM);
setup_timer_2(T2_DIV_BY_16,124,1);

while(1)
{
set_pwm1_duty(124);  // Motor Çalışsın
}
}


Şu da devre resmim: (Simulasyonda böyle bir sorunla karşılaşmıyorum)




AsHeS

Dandik bir öneri olacak ama durdurma butonun bağlı olduğu bacakla gnd arasına pF seviyelerinde kondansatör atsan olur gibi sanki.(Bu yazılım dilini bilmediğim için analog bir öneri yaptım.)

Kabil ATICI

Çoğu kişi simülasyon programına aldanıyor.

Buton konusunda çoğu durumda dirençler vcc konumuna bağlanırken, butonlarda gnd ucunu bağlı oluyor.
Bunun sebebi olarak boşta bırakılan işlemci uçlarının çevreden parazit kapma ihtimali olması. Bulunduğumuz ortama elektrik ve manyetik olarak yalıtılmış bir ortam değil hatta biz bile bu tür sorunlara sebep olabiliyoruz. Düşük sinyali kuvvetlendirme işi ie uğraşan kişiler 50Hz'lik sinyalin ne kadar baş belası olduğunu bilir

Bunun bir sebebi de 1 ve 0 gerilim seviyeleridir.  Bunun için entegrenin veri kağıtlarına bakabilirsin. Dolayısı ile  Bacağı Vcc'de tutmak daha iyi olurken (1 eşik seviyesinin üzerinde kaldığı için) bu bacağa direnç ile gnd tuttuğunda parazitlerden etkilenmesi daha kolay olur. (çünkü 0 eşik seviyesi kolaylıkla aşılabilir parazitler oluşabilir). Çünkü yerine göre direnç bile bir alıcı gibi görev görürür.
Böyle değişiklik yaparsan sadece programdaki kontrol betiklerini değiştirmen gerekebilir.

kolay gelsin...
ambar7

ferdem

Sistem simülasyonda çalışıtığından problemin motorun durma/kalkma anlarında oluşan olaylardan kaynaklı olabileceğini düşündüm. Kodlarda da gözüme bir şey çarpmadı. PWM ile alakalı kodları yorum satırı yapın, motoru devreden çıkarın, led hâlâ sürekli yanıyor mu, düzeldi mi? Bu basit bir lojik  fonksiyon, en rahat koşullarda PIC bunu yapabiliyor mu bir kontrol edin. İşin içine motor girince işler karışıyor, mesela şu satırlar bile potansiyel tehlike:
set_pwm1_duty(62);
delay_ms(2000);       
set_pwm1_duty(0);
çalışan motora bir anda dur demek... Beslemeye nasıl etkir? PIC ve motor beslemesinde uçlar arasında yeterli kapasite var mı? PIC ile sürücü devrenin elektriksel izolasyonu gerekebilir. Bunlar benim de zamanında uğraştığım konular, işin içine motor girince olay giriftleşiyor. Söyleyebileceklerim bunlar. İyi çalışmalar.

OptimusPrime

https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

Burak B

Alıntı yapılan: OptimusPrime - 05 Ocak 2012, 13:48:20
low voltage programing açık mı???

Alıntı Yap
#fuses XT, NOWDT, NOPROTECT, NOBROWNOUT, NOLVP, NOPUT, NOCPD

"... a healthy dose of paranoia leads to better systems." Jack Ganssle

OptimusPrime

kapalıymış... :-[

yanlız fuse lere bakmadan programlanıyorda olabilir???
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

justice_for_all

kesmeye grdigi anda rb kesmesıni kapat kesme sonunda tekrar ac bide boyle denermisin
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

jrcapa

Dostum devreyi  board a kurduysan arkadaşın dediği parazitten etkilenme olayı fazla oluyor, butondaki pull-down direnci sağlıklı iş görmüyor,bu direnci kontrol et. Bir de butonlu uygulamalarda,butona basınca değil de butondan el çekince işlem yapılması daha sağlıklı.Şöyle:

if (input(pin_b6)) // Durak
{
while(input(pin_b6));   // Butondan el çekilene kadar bekle   
.... 

vitruvius

Önerileriniz için çok teşekkürler. Butondan pic'e girdiğim bacağı 1k'lık dirençle toprağa bağladım. Sorun düzeldi.