Forum Sains Indonesia

Ilmu Terapan => Teknik Elektro => Ilmu Teknik => Mikrokontroler dan Robotika => Topik dimulai oleh: namasayabudi pada Juli 25, 2010, 03:39:42 PM

Judul: Mau tanya program servo pake C-AVR
Ditulis oleh: namasayabudi pada Juli 25, 2010, 03:39:42 PM
siswa baru mau tanya gan ..
bisa minta tolong .. mungkin agan bepengalaman ..
mau buat gerakan servo yang lambat banget ..
yang biasa gw buat ..

contoh program
gw pake C AVR ..
PORTA.255;
PIRTA.1=1;
delay_us(1850); [nilai A]
PORTA.1=0;
delay_us(18150);

nah si servo di port ini mau di gerakin jadi si 'A' nya berubah jadi 2000 us ..
cuma pengen si stepnya gerakannya lambat banget tiap 10us ato 50us.. gitu .. istilahnya increment delaynya pengen lambat lah .. tau ga ??
gw ga tau programnya .. kalo tau kabarin yah agan2 semua .. pengen bisa ..

gw selama ini masi manual
jadi pake fungsi for

for(i=0;i<50;i++)
{
PORTA.255;
PIRTA.1=1;
delay_us(1850); [nilai A]
PORTA.1=0;
delay_us(18150);
};

for(i=0;i<100;i++)
{
PORTA.255;
PIRTA.1=1;
delay_us(1900); [nilai A]
PORTA.1=0;
delay_us(18100);
};


for(i=0;i<150;i++)
{
PORTA.255;
PIRTA.1=1;
delay_us(1950); [nilai A]
PORTA.1=0;
delay_us(18050);
};


for(i=0;i<200;i++)
{
PORTA.255;
PIRTA.1=1;
delay_us(2000); [nilai A]
PORTA.1=0;
delay_us(18000);
};

nah kalo pake cara yang gw biasa pake ini si servo nya kasar gerakannya .. n kebayang donk program nya sepanjang apa .. hehehe ..
itu aja yang mau di tanya .. thx for attention  .. mudah2an ada yang bisa ngasi solusi ..

Judul: Re: Mau tanya program servo pake C-AVR
Ditulis oleh: 0y1k pada Juli 30, 2010, 08:57:47 AM
yang jadi masalah di delay kan??
fungsi delay harus konstan, hehehe
sedikit manipulasi delay, mungkin anda yang mengembangkan
sy belum pernah mainan dengan servo, jd gak tw cara yg halus untuk bergeraknya, bantu dalam manipulasi coding aja yah
:-)

Kode: [Pilih]
//ini fungsi variabel delay
var_delay_us(int delay) {

char i;

for (i=1;i<=delay;i++)
delay_us(1);
}

//ini untuk menggerakan servo

main() {

char j,k;
int delay1;delay2;

delay1 = 1850;
delay2 = 18150;

for(j=1;j<=4;j++) {

for(k=0;k<200;k++)
{
PORTA.255;
PIRTA.1=1;
var_delay_us(delay1); [nilai A]
PORTA.1=0;
var_delay_us(delay2);
}

delay1 = delay1 + 50;
delay2 = delay2 + 50;
}

}

dicoba deh...
ga perlu coding yg panjang kan??
hehehe