birden fazla motora yön verme

Başlatan yusuffyk, 25 Mart 2012, 17:05:31

yusuffyk

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://yusuffyk.com  ||  http://www.youtube.com/yusuffyk

justice_for_all

Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

yusuffyk

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);
}

}
http://yusuffyk.com  ||  http://www.youtube.com/yusuffyk

vitruvius

#3
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);         
      }
}

yusuffyk

#int_RB ninn esprisi nedir hocam tam olarak ?
http://yusuffyk.com  ||  http://www.youtube.com/yusuffyk

justice_for_all

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
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

yusuffyk

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
http://yusuffyk.com  ||  http://www.youtube.com/yusuffyk

vitruvius

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.

justice_for_all

#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?
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

yusuffyk

durum=input_a;

satırında hata verdi hocam a ne?
http://yusuffyk.com  ||  http://www.youtube.com/yusuffyk

yusuffyk

hocam tam anlamıyla ben anlayamadım bu int_rbyi ya biraz daha açabilir misiniz? nettede bulamadım anlaşılır bi kaynak
http://yusuffyk.com  ||  http://www.youtube.com/yusuffyk

vitruvius

Mesela şu devre için:



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
}
}

yusuffyk

hocam allah razı olsun ya valla adammsın eyvallah tam istediğim gibi oldu teşekkürlerrr :)
http://yusuffyk.com  ||  http://www.youtube.com/yusuffyk

yusuffyk

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
http://yusuffyk.com  ||  http://www.youtube.com/yusuffyk

micelow

Sorunuz iki motoruda aynı anda çalıştırmak mı yani iki motorda aynı anda sağa sola döndürülebilir mi diye soruyorsunuz?
"Bir tek şeye ihtiyacımız var çalışkan olmak."