1. TUJUAN
Mahasiswa dapat memahami prinsip kerja dari motor servo.
Mahasiswa dapat mengetahui definisi tentang motor servo.
Dapat mengontrol motor servo menggunakan mikrokontroller.
1) PC : 1 unit
2) Modul mikrokontroller ATMEGA 8535 : 1 unit
3) Software CV AVR
4) Motor Servo : 1 unit
5) Power Supply : 1 unit
6) Modul ISP : 1 unit
7) Kabel USB : 1 unit
8) Kabel Power : 1 unit
9) Kabel Jumper : 3 unit
3. SETTING PERCOBAAN
Memilih program pada menu bar mengklik generate, save and exit yes
simpan file dengan nama yang dikehendaki.
Kemudian muncul workspace yang digunakan untuk menulis program untuk
ATMEGA 8535
Sebelum memprogram, memeriksa terlebik dahulu pada bagian timer dengan
ketentuan :
- TCCR1A = 0X82
- TCCR1B = 0X19
- ICR1H = 0XFF
- ICR1L = 0XFF
Jika sudah sesuai kemudian menulis program pada bagian paling bawah dengan
format :
if (PINC. 0 == 0) OCR1A-=10;
if (PINC. 1 == 0) OCR1A+=10;
sprintf(vr,OCR1A = %d , OCR1A);
lcd_gotoxy (0,0);
lcd_puts(vr);
Ton=OCR1A;
Ton=Ton/65535*16.384;
Sprint.f(vr,Ton=%2.3f,Ton);
lcd_gotoxy(0,1);
lcd_puts(vr);
delay_ms(50);
Kemudian meng compile project, dengan mengklik button compile the project
Jika masih terdapat error, menambahkan library pada bagian paling atas yaitu
#include <lcd.h>
#include <stdio.h>
#include <delay.h>
Kemudian compile kembali project, apabila masih error maka perlu melakukan
deklarasi pada globa variables, menambahkan :
char vr [16];
float Ton;
Menglklik setting programmer klik OK kemudian muncul kotak dialog
memiloh ATmel mk II(USB) mengklik OK
Pada menu bar mengklik project configure after build program the chip
OK execute program OK
Mengklik build all program execute program the chip.
k. Menghubungkan motor servo pada port D, dimana pada motor servo terdapat 3 kabel
yaitu kabel merah, hitam dan kuning. menghubungkan kabel merah yang merupakan
VCC dengan port D no 2, lalu menghubungkan kabel hitam yang merupakan Ground
dengan port D no 1, dan kemudian menghubungkan kabel kuning yang merupakan data
dengan port D no 8 pada mikrokontroller.
Mengatur nilai OCR1A pada mikrokontroller dengan menekan push button yang ada
pada board modul mikrokontroller, dimana telah diset pada program. Nilai OCR1A
digunakan untuk mengontrol kecepatan dan gerak motor servo
PB1 = turun (-10)
PB2 = naik (+10)
l. Mengatur nilai OCR1A pada modul mikrokontroller dengan menekan push button yang
ada pada board mikrokontroller.
m. Mengatur nilai OCR1A pada modul mikrokontroller hingga motor servo bergerak untuk
pertama kalinya atau sudut 0
n. Mencatat nilai OCR1A dan nilai Ton pada modul yang ditampilkan pada LCD untuk
nilai 0
o. Mengatur nilai OCR1A pada modul mikrokontroller bertujuan untuk mengontrol motor
servo pada sudut 0 sampai dengan 90
p. Mencatat nilai OCR1A dan nilai Ton pada modul yang ditampilkan pada LCD untuk
nilai 0 sampai dengan 90
q. Mengatur nilai OCR1A pada modul mikrokontroller untuk mengontrol motor servo
pada sudut 90 sampai dengan 180
r. Mencatat nilai OCR1A dan nilai Ton pada modul yang ditampilkan pada LCD untuk
nilai 90 sampai dengan 180
5. DATA PERCOBAAN
(Program percobaan terlampir pada lampiran )
Perhitungan :
T = 1/4.10x2 = 16,384 ms
Ton = Sudut/180 x 1,5 ms + 1 ms
Ton = OCR1A/65535 x 16,384 ms
PROGRAM PERCOBAAN
#include <mega8535.h>
#include <stdio.h>
#include <delay.h>
void main(void)
{
// Declare your local variables here
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In
Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In
Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=Out Func4=In Func3=In Func2=In Func1=In
Func0=In
// State7=T State6=T State5=0 State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x20;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 4000.000 kHz
// Mode: Fast PWM top=ICR1
// OC1A output: Non-Inv.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x82;
TCCR1B=0x19;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0xFF;
ICR1L=0xFF;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
while (1)
{
// Place your code here
if(PINC.0==0)
OCR1A-=20;
if(PINC.1==0)
OCR1A+=20;
hasil=OCR1A;
sprintf(var,"OCR1A=%d ",OCR1A);
lcd_gotoxy(0,0);
lcd_puts(var);
Ton=hasil/65535*16.384;
sprintf(var,"Ton=%2.3f ",Ton);
lcd_gotoxy(0,1);
lcd_puts(var);
delay_ms(50);
};
}