TUJUAN
Mampu membuat program yang menggunakan 16-bit Timer/Counter1 pada mikrokontroller
ATmega8535 sebagai PWM (Pulse Width Modulation) untuk mengontrol kecepatan putar suatu motor
DC.
Mampu membuat program yang menggunakan pin I/O AVR untuk menggerakan motor servo serta
menggunakan 8-bit Timer/Counter2 sebagai waktu tunda.
DASAR TEORI
Mikrokontroller AVR ATmega8535 mempunyai dua 8-bit Timer/Counter (Timer/Counter0 dan
Timer/Counter2) dan satu 16-bit Timer/Counter (Timer/Counter1). Timer/Counter mengalami
overflow pada saat hitungan Timer/Counter (TCNT0/TCNT1/TCNT2) mencapai maksimum (FFH
untuk 8-bit atau 0xFFFF untuk 16-bit Timer/Counter) dan kembali ke hitungan 0x00 atau 0x0000.
Pada mode operasi normal Timer/Counter Overflow Flag (TOV0/TOV1/TOV2) akan otomatis
berlogika ‘1’pada saat Timer/Counter Register menjadi nol. Bit Timer/Counter Overflow Flag dapat
dibersihkan (menjadi berlogika ‘0’) dengan memberikan nilai logika ‘1’pada flag tersebut.
Mode operasi Timer/Counter0 antara lain mode normal, mode CTC, mode Fast PWM, dan mode
Phase Correct PWM. Pemilihan mode operasi diatur pada bit WGM01 dan WGM02. Sumber clock
untuk Timer/Counter ditentukan oleh bit CS02 dan CS00 pada I/O register TCCR0 bit ke 2 sampai 0.
Resolusi PWM untuk Mode Phase Correct PWM dapat 8, 9, atau 10 bit, atau ditentukan nilai ICR1
atau OCR1A. Resolusi minimum yang diperbolehkan sebesar 2-bit (ICR1 atau OCR1A = 0x0003) dan
resolusi maksimum sebesar 16-bit (ICR1 atau OCR1A = 0xFFFF). Resolusi PWM dapat dighitung
dengan menggunakan persamaan :
log(𝑇𝑂𝑃+1)
RPCPWM = log(2)
Frekuensi output PWM ketika menggunakan Phase Correct PWM dapat dihitung dengan
menggunakan persamaan :
𝑓
𝑐𝑙𝑘 𝐼/𝑂
FOC1xPCPWM = 2.𝑁.𝑇𝑂𝑃
Terdapat dua macam motor servo yaitu standard servo dan continuous servo. Standard Servo hanya
dapat berputar pada posisi 00 sampai 1800 sedangkan continuous servo dapat berputar terus menerus
(3600).
Gambar 2 menunjukkan bentuk pulas yang diberikan ke motor servo untuk mengubah posisi putaran
motor servo. Lebar pulsa yang diberikan harus akurat jika tidak maka putaran motor servo akan tidak
tepat pada posisinya.
Catatan : Lebar pulsa yang diberikan ke motor standard servo tidak boleh kurang dari 920 us untuk
full counterclockwise dan tidak boleh lebih dari 2120 us untuk full clockwise sebab dapat menyebabkan
kerusakan pada motor servo. Kerusakan terjadi karena motor berputar melebihi dari batas putaran (00
– 1800 ) yang mana pada batas tersebut motor tidak bias berputar sehingga dapat menyebabkan motor
servo terbakar.
TUGAS PENDAHULUAN
1. Tuliskan tabel Output Compare Match pada Phase Correct & Phase Frequency PWM dan
bagaimana penulisan script untuk menginisiasikannya.
2. Jelaskan kelebihan dari standard servo dibandingakan dengan continuous servo !
#include <mega8535.h>
#include <delay.h>
void main(void){
while (1){
if(PINC.0==0){
delay_ms(10);
temp-=0xFF;
if(temp==0xFF01) temp=0x0000;
}
if(PINC.1==0){
delay_ms(10);
temp+=0xFF;
if(temp==0x00FE) temp=0xFFFF;
}
OCR1A=temp;
};
}
A.2. Percobaan 2
Program 2 ini hamper sama dengan program 1 tetapi terdapat tambahan tombol untuk memilih
arah putaran motor.
#include <mega8535.h>
#include <delay.h>
bit i;
TCCR1A=0x82;
TCCR1B=0x12;
TCNT1=0x0000;
ICR1H=0xFF;
ICR1L=0xFF;
OCR1A=0x0000;
OCR1B=0x0000;
i=1;
temp=0x0000;
while(1){
if(PINC.0==0){
delay_ms(5);
temp-=0xFF;
if(temp==0xFF01) temp=0x0000;
}
if(PINC.1==0){
delay_ms(5);
temp+=0xFF;
if(temp==0x00FE) temp=0xFFFF;
}
if(PINC.2==0){
i =~ i;
if(i==0){
PORTD=0x10;
}
else {
PORTD=0x20;
}
delay_ms(100);
}
OCR1A=temp;
OCR1B=temp;
}; }
A.3 Tugas 1
Buatalah suatu program seperti pada contoh program 2 dengan tambahan 2 tombol. Tombol
pertama (terhubung dengan PINC 7) digunakan untuk menggerakkan motor DC berputar cepat,
sedangkan tombol kedua (terhubung dengan PINC 6) digunakan untuk menghentikan putaran
motor. Tombol yang lain (tombol yang terhubung dengan pin PC0,PC1, dan PC2) mempunyai
fungsi yang sama dengan contoh program 2.
#include <mega8535.h>
#include <delay.h>
unsigned char i, j, k;
void putar_servo(void){
for (k=1; k<=75; k++){
PORTA.0=1;
for(j=1; j<=i; j++)
delay_us(1);
PORTA.0=0;
TIFR&=0x40;
TCNT2=0xB1;
while(!(TIFR&0x40));
TIFR&=0x40;
}
}
TCCR2=0x07;
ASSR=0x00;
while(1){
if(PINC.0==0){
i=30;
putar_servo();
}
if(PINC.1==0){
i=90;
putar_servo();
}
if(PINC.2==0){
i=180;
putar_servo();
}
} }
B.2 Tugas 1
Buatlah suatu program seperti contoh program 1 motor servo dengan menggunakan 5 tombol
untuk memilih posisi motor servo. Setiap tombol mewakili posisi servo berada pada 00, 450, 1350,
dan 1800. Tombol pertama (terhubung pada PINC 0) digunakan untuk posisi motor servo full CW
(1800), tombol kedua (terhubung pada PINC 1) untuk posisi 1350,…, dan seterusnya sampai
tombol kelima (terhubung pada PINC 4) untuk posisi pada full CCW (00).