Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

Kesme Sorunu (CCS C)

Başlatan vitruvius, 29 Aralık 2011, 00:10:49

vitruvius

Merhabalar, engel algılayan bir devre üzerinde çalışıyorum. Engeli 2 tane IR led ve bir opamp kullanarak algılayabiliyorum. Engel yokken opamp çıkışı 0V, engel görünce de yaklaşık 3.5V oluyor ve bir led yakıp bunu gözlemliyorum. Benim istediğim ise bir dc motor engel yokken sürekli dönsün, engel varken de 3 saniye dursun. Bunun için opampın çıkışını PIC'in RB0 pinine girip kesme ile yapmaya çalıştım ama istediğim gibi çalışmıyor.

Şu anda şu şekilde çalışıyor: Engel yokken sürekli dönüyor, IR led'in üzerine elimi getirdiğim zaman motor duruyor. 3 sn sonra tekrar çalışmak istiyor ama dönemiyor. Tekrar çalışmak istemesini motorun tık etmesinden ve led'lerin flaş etmesinden anlıyorum. Eğer motor durduktan sonra elimi IR led'in üzerinde biraz bekletirsem ,opamp'ın çıkışını 1 yaparsam, motor tekrar dönmeye başlıyor. Sonra yine aynı döngü gerçekleşiyor. Motor engeli bir kere gördükten sonra tekrar neden çalışmıyor olabilir?

CCS C'deki kodum şu şekilde:

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

#use fast_io(b)

#int_ext

void ext_kesmesi ()
{
set_pwm1_duty(0); // Motor dursun
delay_ms(3000); 
}

void main ( )
{

setup_timer_1(T1_DISABLED);

set_tris_b(0x01);
output_b(0x00);

ext_int_edge(L_TO_H);

enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);

output_high(pin_b5); // Pic'in çalıştığına dair bir led

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

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



Devre şemam: (Simulasyon yaparken engel olup olmama durumunu bir buton ile kontrol ettim)



Engel algılayan devrem ise şu şekilde: (Burada out yazan kısımdan çıkışı direkt olarak ,araya direnç v.s. koymadan, pic'in RB0 pinine girdim)



Teşekkürler.

skara1214

external interruptın girişinde ledi yakıp delay_ms 3000 den sonrada söndürmeyi deneyin acaba interruptan çıkıyormu?kodlar doğru gzüküyor
Herkes ölür ama herkes gerçekten yaşamaz

vitruvius

Pic'in yaktığı tek led RB5 pinin'deki led. Onu da pic'te sorun olup olmadığını görmek için yakıyorum. O led'den mi bahsediyorsunuz? Bir de engel algılama devresinde verdiğim alıcıdaki led (D3) var. O da engel gördüğü zaman yanıyor. Motor tık ederken bu bahsettiğim iki led flaş yapıyor. Elimi IR led'in üzerinde bir süre bekletirsem kesme'den çıkıyor.

justice_for_all

hocam semadaki yalnisiniz pwm l293 un enable pinine baglanacak in1 ve in2 girisine ise picten 1veya 0 gondereceksiniz yonune gore
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

skara1214

Alıntı yapılan: justice_for_all - 29 Aralık 2011, 00:33:12
hocam semadaki yalnisiniz pwm l293 un enable pinine baglanacak in1 ve in2 girisine ise picten 1veya 0 gondereceksiniz yonune gore
hocam dediğiniz ne derece kullanışlı çünkü ben l298de arkadasın yaptıgı gibi kullanıyorum ve çalışıyor eğer enable bacagından verirseniz logic 0 dayken boşa alıyor motor short brake yapmıyor bunu nasıl çözersiniz?
Herkes ölür ama herkes gerçekten yaşamaz

justice_for_all

#5
Alıntı yapılan: skara1214 - 29 Aralık 2011, 00:45:36
hocam dediğiniz ne derece kullanışlı çünkü ben l298de arkadasın yaptıgı gibi kullanıyorum ve çalışıyor eğer enable bacagından verirseniz logic 0 dayken boşa alıyor motor short brake yapmıyor bunu nasıl çözersiniz?

short break ten kastiniz hizli durmami ?

bosa aliyor derken ne demek istediniz anlamadim?ben l298 ile yaptim dedigim gibi hic bir sorun olmuyo.simdi l293 entegresinin datasheetine baktim input voltaj 2.3v yaziyor arkadasin motorunun donmemesinin sebebi buyuk ihtimal o olabilir.

@vitruvius hocam o motordan o sesi duyunca l293 entegresinin pwmli olan pinini olcebilirmisiniz?
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

skara1214

 in1 ve in2 ikisi birlikte logic1 yada logic 0 olursa içerde kısa devre yapıp  short brake yapıyor yani motoru hızlı durduruyor fakat bunu siz enabledan kontrol ederken motoru boşa alıyor.motorun durması biraz daha zaman alıyor.
Herkes ölür ama herkes gerçekten yaşamaz

justice_for_all

Alıntı yapılan: skara1214 - 29 Aralık 2011, 00:52:45
in1 ve in2 ikisi birlikte logic1 yada logic 0 olursa içerde kısa devre yapıp  short brake yapıyor yani motoru hızlı durduruyor fakat bunu siz enabledan kontrol ederken motoru boşa alıyor.motorun durması biraz daha zaman alıyor.

EN 1A  2A   FUNCTION
H     L   H     Turn right
H     H   L     Turn left
H     L    L     Fast motor stop
H     H   H    Fast motor stop
L      X   X    Fast motor stop

L = low, H = high, X = don't care

bu bilgiler l293 datasheet inden alinma hocam goruldugu gibi 3 sekilde hizli durdurma yapilabiliyor.
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

skara1214


buda l298 hocam.(bunu genel amaçlı koyuyorum tabiki arkadas l293 kullandığına göre siz söylediğinizde haklısınız)
Herkes ölür ama herkes gerçekten yaşamaz

justice_for_all

hocam l298 in input girisleri l293 e gore daha esnek yani onda pwmi her ikisinede kullanabilirsiniz (vin = 0.3 dan 7 volta kadar ).ama l293 te giris voltaji min 2.3 volt olmalidir.
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

skara1214

zaten pwm duty si ile 2.3 voltun üstüne çıkıyor sıkıntı 2.3 volttan kaynaklı değil bence .Normalde çalışıp interrupta girip  ondan sonra çalışmamasının sıkıntısı pwm ayarlarının 0 yapıldıktan sonra verilen değere gelmemesi
Herkes ölür ama herkes gerçekten yaşamaz

justice_for_all

Alıntı yapılan: skara1214 - 29 Aralık 2011, 01:33:47
zaten pwm duty si ile 2.3 voltun üstüne çıkıyor sıkıntı 2.3 volttan kaynaklı değil bence .Normalde çalışıp interrupta girip  ondan sonra çalışmamasının sıkıntısı pwm ayarlarının 0 yapıldıktan sonra verilen değere gelmemesi

o degerede geliyodur hocam cunku parmaginin sensorde nekadar tutarsan tut harici kesmeye bi daha girmez tekrar elini cekip sensorun uzerine getirmesi gerek.harici kesmeye girince 3 saniye bekliyo ve sonsuz donguye giriyo  .
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

vitruvius

Hocam çok teşekkür ederim ilgileriniz için. Bağlantımı justice_for_all'un dediği gibi değiştirince sorun çözüldü. Kodumu da şu şekilde değiştirdim. Böylece engel gördüğü zaman sürekli duruyor, 3sn bekleme olayını kaldırdım. Bundan sonrası kodu geliştirmek =)

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

#use fast_io(b)

#int_ext
void ext_kesmesi ()

{
while(input(pin_b0)) // Engel Gördüğü Sürece
{
set_pwm1_duty(0);  // Motor Dursun
}
}

void main ( )
{

setup_timer_1(T1_DISABLED);

set_tris_b(0x01);
output_b(0x00);

enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);

output_high(pin_b4);  // Pic'in çalıştığına dair bir led
output_low(pin_b5);   // IN1 lojik-0
output_high(pin_b6);  // 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
delay_ms(30);
}
}