Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: yusuffyk - 25 Mart 2012, 17:05:31

Başlık: birden fazla motora yön verme
Gönderen: yusuffyk - 25 Mart 2012, 17:05:31
merhaba arkadaşlar
ben 16f628a ve l293d kullanarak bir devre tasarlıyorum, aşağıdada kurduğum devrenn bir örneği var, her neyse ben ra0, ra1, ra2, ra3 bacaklarına birer buton bağladım ra0 ve ra1 butonlarına basılı tuttuğum sürece birinci motorun yönünü ayarlıyacağım, ra2 veya ra3 buttonlarlada ikinci motora yöne vereceğim, bu basit aslında ama içinden çıkamadığım mevzuu butonlara basılı tuuttuğum sürece motorların dönmesi, bunu başaramadım bir türlü.
ra0 basılı tutunca 1.motor sağa
ra1 baslıı tutunca 1.motor sola
basmayınca durcak tabi
ra2 basınca 2.motor sağa
ra3 basınca 2.motor sola
basmayınca duracak tabi
böyle bir sistem yapmaya çalışıyorum ama c de bir türlü beceremedim yardımlarınızı bekliyorum

(http://3.bp.blogspot.com/_2LFqsK2FWo8/SRBa5YhPkTI/AAAAAAAAAAc/vTFz9j28V0c/s400/dc_motor_yon_kontrol.JPG)
Başlık: Ynt: birden fazla motora yön verme
Gönderen: justice_for_all - 25 Mart 2012, 17:09:55
kodunu eklermisin
Başlık: Ynt: birden fazla motora yön verme
Gönderen: yusuffyk - 25 Mart 2012, 17:16:52
ekler misin derken hocam hiç bi mantık kuramadım bunun için, ama butona basılınca durmadan çalışan kodları yazıyorum, çalıştığı için ikinci motor için kod yazmadım ama mantık olarak kafamda oluşturamıyorum hangi yapıyı kullanmam gerektiğini, while kullansan döngüden çıkaramıyorsun falan tam oluşturamadım anlayacağın, aşağıdaki kod sadece birinci motoru çalıştırıyor basılı tutunca ama motor için 12v vermeme rağmen while içine eklediğim en alttaki

output_bit(input1,!buton_stop);
output_bit(input2,!buton_stop);


kodları yüüznden 12voltluk motor gerilimi 2 voltlara düşüyor haliyle motor çalışmıyor, yardımlarınızı bekliyorum


-------------------


#include <16f628a.h>
#fuses XT
#use delay(clock=4000000)

#define buton_ileri pin_a0
#define buton_geri pin_a1
#define buton_stop pin_a2
#define input1 pin_b0
#define input2 pin_b1


void main ()
{
while(true) {
if (input(buton_ileri)==1 && input(buton_geri)==0 && input(buton_stop)==0)
{
output_bit(input1,buton_ileri);
output_bit(input2,!buton_ileri);
}

if (input(buton_ileri)==0 && input(buton_geri)==1 && input(buton_stop)==0)
{
output_bit(input1,!buton_geri);
output_bit(input2,buton_geri);
}

if (input(buton_ileri)==0 && input(buton_geri)==0 && input(buton_stop)==1)
{
output_bit(input1,!buton_stop);
output_bit(input2,!buton_stop);
}

output_bit(input1,!buton_stop);
output_bit(input2,!buton_stop);
}

}
Başlık: Ynt: birden fazla motora yön verme
Gönderen: vitruvius - 25 Mart 2012, 17:21:09
L293D'yi A portuna, butonları B portuna bağlayıp Int_Rb kesmesi kullanarak while ile kontrol edebilirsiniz.

Örnek vermesi açısından:
#int_RB

void B_degisiklik()
{
      while(input(pin_b5))
      {         
         output_high(pin_a1);
         //delay_ms(50);         
      }
     
      while(input(pin_b6))
      {         
         output_high(pin_a1);
         //delay_ms(50);         
      }
}
Başlık: Ynt: birden fazla motora yön verme
Gönderen: yusuffyk - 25 Mart 2012, 17:23:22
#int_RB ninn esprisi nedir hocam tam olarak ?
Başlık: Ynt: birden fazla motora yön verme
Gönderen: justice_for_all - 25 Mart 2012, 17:24:11
bu program cizimini yaptigin devreye ait değilmi gordugum kadariyla tek motor kontrolu var buton stop ne icin peki?


int_rb nin esprisi b4-b7 pinlerinde herhangi bir degisiklik oldugu zaman kesme uretir yani 0dan 1 e veya 1den sifira degistiginde
Başlık: Ynt: birden fazla motora yön verme
Gönderen: yusuffyk - 25 Mart 2012, 17:26:13
ona aitde butonlar eklenmeden önceki hali diyelim, ayrıca kodlarda deneme yanılma yoluyla gittiğim için ikinci motoru pratikte bağladım ama kodlarda eklemedim bi karışıklık olmasın diye, stop butonu tek motorla deneme yaptığım zamanlarda butonlardan birini anlık bastığımda durmadan çalışan motoru durdurmak için eklediğim buton hocam
Başlık: Ynt: birden fazla motora yön verme
Gönderen: vitruvius - 25 Mart 2012, 17:27:01
Alıntı yapılan: yktronik - 25 Mart 2012, 17:23:22
#int_RB ninn esprisi nedir hocam tam olarak ?

B portunun B4, B5, B6 ve B7 pinlerinin birinin durumu değiştiğinde bunu kesme ile algılarsınız.
Başlık: Ynt: birden fazla motora yön verme
Gönderen: justice_for_all - 25 Mart 2012, 17:38:27
#include <16f628a.h>
#fuses XT
#use delay(clock=4000000)

#define buton_ileri pin_a0
#define buton_geri pin_a1
#define buton_stop pin_a2
#define input1 pin_b0
#define input2 pin_b1


void main ()
{

int8 durum=0;
while(true) {

durum=input_a;

motor_dondur(durum);


}}


void motor_dondur(int8 temp)
{
         switch(temp)
        {
           case 0xFF : output_b(0x00);break;
           case 0xFE : output_b(0x01);break;
           case 0xFD : output_b(0x02);break;
           case 0xFB : output_b(0x04);break;
           case 0xF7 : output_b(0x08);break;
         };

}


soyle denermisin case yazdiklarim hatali olabilir onlari kontrol edersin ayrica yazdigim butona basinca pice sase giden sekilde yazdim tamam mi?
Başlık: Ynt: birden fazla motora yön verme
Gönderen: yusuffyk - 25 Mart 2012, 17:51:21
durum=input_a;

satırında hata verdi hocam a ne?
Başlık: Ynt: birden fazla motora yön verme
Gönderen: yusuffyk - 25 Mart 2012, 18:04:14
hocam tam anlamıyla ben anlayamadım bu int_rbyi ya biraz daha açabilir misiniz? nettede bulamadım anlaşılır bi kaynak
Başlık: Ynt: birden fazla motora yön verme
Gönderen: vitruvius - 25 Mart 2012, 20:07:34
Mesela şu devre için:

(http://img823.imageshack.us/img823/4527/adszly.png)

Soldaki butona basılı tuttuğunuz sürece soldaki led, sağdaki butona basılı tuttuğunuz sürece sağdaki led yanar. Aynı mantıkla istediğiniz motor kontrolünü yapabilirsiniz. Butonlara bastığınızda program void B_degisiklik() kısmına gider.

#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()
{     
   while(input(pin_b4))
      {         
         output_high(pin_a0);               
      } 
   while(input(pin_b5))
      {
         output_high(pin_a3);
      }
}

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); // Kesmeye izin veriliyor.
enable_interrupts(GLOBAL);

while(1)
{
output_a(0x00); //ledleri söndürmek için
}
}
Başlık: Ynt: birden fazla motora yön verme
Gönderen: yusuffyk - 25 Mart 2012, 20:50:45
hocam allah razı olsun ya valla adammsın eyvallah tam istediğim gibi oldu teşekkürlerrr :)
Başlık: Ynt: birden fazla motora yön verme
Gönderen: yusuffyk - 25 Mart 2012, 20:58:09
hocam peki son bi sorum daha olacak, şimdi ben bu kodlarda oynayıp dört butonla dört led yakabiliyorum ama aynı anda iki led yanmıyor, led yerine (l293d yi süreceğim) yani iki motoru aynı anda çalıştıramayacağım buna çözüm olarak ne önerirsin
Başlık: Ynt: birden fazla motora yön verme
Gönderen: micelow - 25 Mart 2012, 21:42:44
Sorunuz iki motoruda aynı anda çalıştırmak mı yani iki motorda aynı anda sağa sola döndürülebilir mi diye soruyorsunuz?
Başlık: Ynt: birden fazla motora yön verme
Gönderen: justice_for_all - 25 Mart 2012, 21:43:21
https://rapidshare.com/files/1012257962/motor.rar.html

yazdigim kodu incele istersen proteus dosyasida var icinde calisiyor
Başlık: Ynt: birden fazla motora yön verme
Gönderen: yusuffyk - 25 Mart 2012, 22:24:12
eyvallah hocam sağolda yanlız bir ufak problem var, burda bi motoru sağa sola döndürüyorsun taamam da birinci motor dönerken ikinci motora müdahale edemiyoruz, bunun için aklına gelen bir alternatif avr mı? döngülerde bunu yapmak çok zor sabahtan beri düşünüyorum işin içinden çıkamadım ben
Başlık: Ynt: birden fazla motora yön verme
Gönderen: yusuffyk - 25 Mart 2012, 22:37:55
hocam senin yorumunu yeni gördüm benim sorum iki farklı motora istediğim zamanlarda sağ sol yaptırmak, elimde fazla olduğu için bu işi l293d ile yapmak istiyorum, bütün sistem hazır kodlarla sağlamam lazım bu olayı, şimdiki sistemde basılı tuttuğum sürece çalışıyor ama diğer motorakomut vermek için elimi butondan çekip başka butona basmam lazım ama ben aynı anda iki motoruda kullanabilmeliyim
Başlık: Ynt: birden fazla motora yön verme
Gönderen: micelow - 25 Mart 2012, 23:19:17
Bu konuda akla gelen ilk fikir basitte olsa 2 işlemci kullanmak ama illaki bir yolu vardır. ikinci fikir ise  l293d yerine alternatif bir sürücü bakmak.Aklıma gelen son fikir ise programda threat kullanmak yani bir porttan gelen veri işlenirken diğer porttanda gelen verileriyide işleme almak böylelikle 1. motor çalışırken 2. motor için vereceğin komutta işleme alınabilir.
Başlık: Ynt: birden fazla motora yön verme
Gönderen: yusuffyk - 26 Mart 2012, 00:42:01
hocam  threat  nedir, bilmiyorum ama yarın müsait bi zamanda araaştıracağım, olmazsa iki işlemci mantıklı geldi banada o da olmadı sürücüyü değiştirebiliriz, alternatif olması iyi oluyor
ama butonu kontrol ederken başk bir işlem yapmaması kadar saçma bi şey yok, ben while for if falan döngüye soksam onu, başka işlem yaptıramayacağım, ikinci bi işlemci eklesem başka bir işlem için üçüncü işlemci lazım, her taraftan pic fırlayacak arkadaş :D
neyse hocam fikirleriniz için teşekkürler
Başlık: Ynt: birden fazla motora yön verme
Gönderen: justice_for_all - 26 Mart 2012, 08:49:42
nasil bir mudahele istiyosun tam anlatki ona gore dusunelim.
Başlık: Ynt: birden fazla motora yön verme
Gönderen: yusuffyk - 26 Mart 2012, 12:57:26
hocam deneme, yanılma, öğrenme yoluyla çalışıyorum, öncelikle şu motorlar butonlara basıldığında iki motor bağımsız olarak çalışabilmeli
daha sonra başka butonlarlada servo motor kontrol edebilmeliyim,
aralarda da lcdde yazı yazabilmeliyim,
tüm bunlar olurken hiçbiri bir diğerini engellememeli, bunun için while falan kullanırsak döngü kısır döngüye giriyor, bir işlem yapılırken diğerleri duruyor ben böyle değilde bir döngü sürerken başka döngülerde yapabilmeliyim
Başlık: Ynt: birden fazla motora yön verme
Gönderen: justice_for_all - 26 Mart 2012, 13:33:33
benim programimda switch case yapisinda case lere yazdiklarim cogaltilabilir ordan yapabilirsin hangi butonlara basinda durum ne oluyor bunu bulup case bolumune yazman gerek ordan istedigin islemi gerceklestirebilirsin
Başlık: Ynt: birden fazla motora yön verme
Gönderen: yusuffyk - 26 Mart 2012, 13:42:17
hocam senin programı simülasyonda denedim, birinci motoru döndürdüğümde diğer butonları görmüyor, yani aynı anda iki butona basınca sadece birini işleme alıyor, ben ikisinide alsın istiyorum
Başlık: Ynt: birden fazla motora yön verme
Gönderen: justice_for_all - 26 Mart 2012, 13:47:53
iste ben orda case bolumune tek butonla kontrol icin yazdim onlari degistirmen gerek
Başlık: Ynt: birden fazla motora yön verme
Gönderen: omereliusuk - 26 Mart 2012, 13:48:31

int x=0;
if input(pin_a0)x|=0x01;
if input(pin_a1)x|=0x02;
if input(pin_a2)x|=0x04;
if input(pin_a3)x|=0x08;
if(x==0x03) x&=0x0c;
if(x==0x0c) x&=0x03;
if(x==0x0f)x=0;



output_bit(pin_b0,bit_test(x,0));
output_bit(pin_b1,bit_test(x,1));
output_bit(pin_b2,bit_test(x,2));
output_bit(pin_b3,bit_test(x,3));


zil çaldı. devamı 2saat sonra. birdüzenleme yapılacak. ihtimaller değerlendirilecek.if((x==0x0f)||(x==0xc0)(x==0x03))x=0;
kodlar değişti.
Başlık: Ynt: birden fazla motora yön verme
Gönderen: justice_for_all - 26 Mart 2012, 15:31:14
#include <16f628a.h>
#fuses XT
#use delay(clock=4000000)


void main ()
{
   int8 durum=0;
   
   output_a(0xFF);
   output_b(0x00);
   set_tris_a(0xFF);
   set_tris_b(0x00);
   while(true)
   {

      durum=input_a();
     
      output_b(~durum & 0x0f);

   }

}


bu sekilde istedigin gibi kontrol edersin motoru
Başlık: Ynt: birden fazla motora yön verme
Gönderen: omereliusuk - 26 Mart 2012, 16:29:54
Alıntı yapılan: justice_for_all - 26 Mart 2012, 15:31:14
#include <16f628a.h>
#fuses XT
#use delay(clock=4000000)


void main ()
{
   int8 durum=0;
   
   output_a(0xFF);
   output_b(0x00);
   set_tris_a(0xFF);
   set_tris_b(0x00);
   while(true)
   {

      durum=input_a();
     
      output_b(~durum & 0x0f);

   }

}


bu sekilde istedigin gibi kontrol edersin motoru

peki pinler rasgele olursa ne yapacaksın? o zaman işler değişiyor...

yazdığım kodları bir dene istediğin pinlere istediğin çıkışları ve istediklerine de  girişleri bağla.

while(true){
int x=0;
if input(pin_a0)x|=0x01;
if input(pin_a1)x|=0x02;
if input(pin_a2)x|=0x04;
if input(pin_a3)x|=0x08;
if(x==0x03) x&=0x0c;
if(x==0x0c) x&=0x03;
if(x==0x0f)x=0;
output_bit(pin_b0,bit_test(x,0));
output_bit(pin_b1,bit_test(x,1));
output_bit(pin_b2,bit_test(x,2));
output_bit(pin_b3,bit_test(x,3));
}
Başlık: Ynt: birden fazla motora yön verme
Gönderen: yusuffyk - 26 Mart 2012, 21:02:24
justice_for_all hocam tam istediğim gibi oldu sağolasın
omereliusuk hocam senin kodlarda olabilir mantığını öğrenmek için  denedim ama çalıştıramadım hcam bir sürü hata veriyor kodlarda
Başlık: Ynt: birden fazla motora yön verme
Gönderen: omereliusuk - 26 Mart 2012, 22:12:37
int x=0;
if (!input(pin_a0))x|=0x01;
if (!input(pin_a1))x|=0x02;
if (!input(pin_a2))x|=0x04;
if (!input(pin_a3))x|=0x08;
if(x==0x03) x&=0x0c;
if(x==0x0c) x&=0x03;
if(x==0x0f)x=0;
output_bit(pin_b0,bit_test(x,0));
output_bit(pin_b1,bit_test(x,1));
output_bit(pin_b2,bit_test(x,2));
output_bit(pin_b3,bit_test(x,3));