pic 16f877 servo kontrol

Metallian

Üye
Katılım
21 Ara 2012
Mesajlar
2
Puanları
1
#include<16f877.h>
#fuses HS,NOWDT
#use Delay(Clock=20000000)
#byte port_a=5
#byte port_b=6
#byte port_d=8
/*Port kurulumu*/
io_set(){
set_tris_a(0xff);
set_tris_b(0xff);
set_tris_d(0x00);
}
main(){
io_set();
while(1){
/* +90 Yönünde dönüş için Port B'den gelen sinyallere göre bilgi çıkışı*/
switch(~port_b&0x1f){
case 1: output_bit(pin_D0,1); delay_ms(1.1);
output_bit(pin_D0,0); delay_us(18.9);
break;
case 2: output_bit(pin_D1,1); delay_ms(1.1);
output_bit(pin_D1,0); delay_us(18.9);
break;
case 4: output_bit(pin_D2,1); delay_ms(1.1);
output_bit(pin_D2,0); delay_us(18.9);
break;
case 8: output_bit(pin_D3,1); delay_ms(1.1);
output_bit(pin_D3,0); delay_us(18.9);
break;
case 16: output_bit(pin_D4,1); delay_ms(1.1);
output_bit(pin_D4,0); delay_us(18.9);
break;
}
/* -90 Yönünde dönüş için Port A'den gelen sinyallere göre bilgi çıkışı*/
switch(~port_a&0x1f){
case 1: output_bit(pin_D4,1); delay_ms(2);
output_bit(pin_D4,0); delay_us(18);
break;
case 2: output_bit(pin_D3,1); delay_ms(2);
output_bit(pin_D3,0); delay_us(18);
break;
case 4: output_bit(pin_D2,1); delay_ms(2);
output_bit(pin_D2,0); delay_us(18);
break;
case 8: output_bit(pin_D1,1); delay_ms(2);
output_bit(pin_D1,0); delay_us(18);
break;
case 16: output_bit(pin_D0,1); delay_ms(2);
output_bit(pin_D0,0); delay_us(18);
break;
}
}
}
Merhabalar. Günlerdir arayıp sonuç bulamadığım bir problemle ilgili yardımınıza ihtiyacım var, bu forum da yeniyim. Bu ulaştığım kaynaklardan biri, C++ dilini bilmiyorum. Sizlerden ricam bu yardım iştediğim paylaşımı mı düzenlermisiniz ? Bu kodlarla servo motor + 90 ve - 90 yönlerde hareket sağlıyor. Butona bastığım sürece dönmesi ve bıraktığım an durması konusunda 2 haftadır toplamadığım döküman kalmadı ufak uygulamalar var elimde ama 5 servo kontrolüne sıra geldiğinde gerekli düzenlemeyi yapamıyorum. Yardımlarınızı bekliyorum şimdiden teşekkür ederim. Hayırlı forumlar
 
arkadasım c++ dilini bende bilmiyorum,ancak baskalarının yaptıgına kilitlenip kendinizi sınırlamayın.yapacagınız işlem servo surucuye yon bilgisini verip(set yada reset yaparak) ardından dondurmek istediginiz hız ve sureye gore puls uretıp surucuye gondermek.bırcok servoyu aynı mantıkla surebilirsin ancak aynı anda ve girisimli (interpolasyonlu) surmesı oldukca zor oluyor.yinede yapılmayacak bisey degil.tüm yapman gereken matematik hesapları.tabi bu hesaplamalar iki servo icin pek zor olmasada 5 adet servoyu girisimli calıstırması oldukca zor,bunun için hareket kontrol kartları kullanılıyor.gercı ugrasılsa bununda yapılmayacak tarafı yok.5 adet pic in ayrı ayrı calıstıgını düşün ve hedef ve yon bilgilerini verip hepsne birden start verirsen girisimli calısma saglamıs olursun,ancak hareketler cok kısa adımlarda olcaksa bu dataların 5 adet pic e gondermesi hareketlerde kesiklik yaratacaktır.kullanacagınız yerın ne oldugunu bilmedigimden bunun sizin işinizde sorun yaratıp yaratmayacagını soyleyemem,ancak bu sekılde 3 boyutlu bır ısleme makınası yapmak epey yavas olmak zorunda olurdu.
 

Benzer Konular

Forum istatistikleri

Konular
130,065
Mesajlar
932,701
Kullanıcılar
453,050
Son üye
alperen343

Yeni konular

Geri
Üst