You are on page 1of 17

LAPORAN RESMI

PRAKTIKUM MIKROKONTROLER
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA

Dosen Pembimbing :
Bpk. Akhmad Hendriawan

Peserta Praktikum :
Muhammad Ilyas Rois (1103151015) / 2 D3 EA
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
SURABAYA
2017

TIMER AVR

A. TUJUAN
1. Mahasiswa dapat memahami dasar-dasar penggunaan Eclipse
2. Mahasiswa mampu mengkonfigurasi pin AVR sebagai input & output dan
mampu melakukan manipulasi per-bit pada AVR

B. TEORI
Eclipse adalah IDE (Integrated Development Environment) untuk
mengembangkan perangkat lunak dan dapat dijalankan di semua platform (platform-
independent). Eclipse adalah IDE multiplatform yang mempunyai dukungan banyak
vendor dan banyak aplikasi plugin. Eclipse banyak digunakan oleh developer PHP,
developer C++, Developer QT, Developer Java dalam mengembangkan aplikasi karena
kemudahan penggunaannya, dukungan highlight syntax dan code completion yang
sangat membantu dalam mempercepat pengembangan aplikasi. Pada praktikum ini,
Mahasiswa diharapkan dapat memulai menggunakan Eclipse untuk mengembangkan
aplikasi embedded C menggunakan plugins AVR.
AVR sendiri adalah jenis mikrokontroller yang paling sering dipakai dalam
bidang elektronika dan intrumentasi. Mikrokontroller AVR ini memiliki arsitektur RISC
(Reduse Intruction Set Computing) delapan bit, di mana semua intruksi dikemas dalam
kode 16-bit dan sebagian besar intruksi dieksekusi dalam 1 siklus clock.
Nama AVR sendiri berasal dari “Alf (Egil Bogen) and Vegard (Wollan)’s Risc
processor” di mana Alf Egil Bogen dan Vegard Wollan adalah dua penemu yang
berkebangsaan Norwegia yang menemukan mikrokontroller AVR yang kemudian
diproduksi oleh Atmel. Pada praktikum ini kita gunakan AVR ATmega2560 dimana
AVR jenis ini memiliki 32 buah aluran Input/Output (I/O) yaitu PORTA, PORTB,
PORTC, PORTD yang masing-masing PORT memiliki 8 buah pin.
C. Peralatan yang digunakan :
1. Software Eclipse
2. Plugin AVR Eclipse
3. TooSet GCC-AVR Compiler
4. AVR development board Xtal 16 MHz, BarLED portA, PushBtn1
5. Programmer

D. Langkah Percobaan :
1. Membuka software Eclipse IDE pada komputer
2. Memilih New > C Project kemudian beri nama Project dan lalu pilih AVR Close
Target Aplication

3. Uncheck Bagian debug kemudian klik Next


4. Memilih MCU yaitu Atmega 2560 dan memilih frequency MCU 16000000 Hz

5. Meng-Klik kanan pada project yang telah dibuat lalu klik New>Source File
6. Setelah memberikan nama pada source folder kemudian beri nama main.c pada
source file lalu klik Finish
7. Kemudian klik menu project pada menu bar diatas lalu klik properties
8. Mencari menu AVR>AVRDude lalu klik New pada programer configuration
tersebut.

9. Memilih Atmel STK 500 ,pilih /dev/ttyUSB0 kemudian isi “-D” pada kolom
“Use this field to add any avrdude option not covered by the plugin” dan klik
OK kemudian Apply
10. Menuliskan Program yang diinginkan lalu Klik compile sebelum terupload
,setelah itu menekan tombol gambar AVR untuk mengupload
program.Kemudian mengamati apa yang akan terjadi.

11. Mengupload program dengan menekan lambing AVR pada menu atas Eclipse
IDE

E. PROGRAM PERCOBAAN
1. Timer 0 Mode Normal
#include <avr/io.h>

void TimerInit();
unsigned char periode;

int main(void)
{
DDRB |=_BV(PB7);
TimerInit();
while(1)
{
if(TIFR0&(1<<TOV0)) {
TCNT0=(unsigned char)-3;
TIFR0|=(1<<TOV0);
PORTB^=(1<<PB7);
}
}
}
void TimerInit(void){
TCNT0=(unsigned char)-3;
TCCR0B=(1<<CS01);
}

2. Timer 0 Mode Normal dengan Interrupt


#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>

void TimerInit();
unsigned char periode;

ISR (TIMER0_OVF_vect)
{
PORTB ^=(1<<PB7);
TCNT0= -33;
}
int main(void)
{
DDRB |= _BV(PB7);
TimerInit();
sei();
while(1)
{
sleep_mode();
}
}
void TimerInit (void)
{
TCNT0 = (unsigned char)-33;
TCCR0B=(1<<CS01);
TIMSK0 |=(1<<TOIE0);
}

3. Timer 0 Mode CTC


#include <avr/io.h>
void TimerInit();
unsigned char periode;

int main(void)
{
DDRB |=_BV(PB7);
TimerInit();
while(1)
{
if(TIFR0&(1<<OCF0A)) {
PORTB^=(1<<PB7);
TIFR0|=(1<<OCF0A);
}
}
}
void TimerInit(void){
TCCR0B=(1<<CS01);
TCCR0A|=_BV(WGM01);
OCR0A=3;
}

4. Timer 0 Mode CTC dengan Interrupt


#include<avr/io.h>
#include<avr/interrupt.h>
#include<avr/sleep.h>

void TimerInit();
unsigned char periode;

ISR (TIMER0_COMPA_vect)
{
PORTB ^= (1<<PB7);
}

int main (void)


{
DDRB |= _BV(PB7);
TimerInit();
sei();

while (1)
{
sleep_mode();
}
}

void TimerInit(void)
{
TCCR0B = (1<<CS01);
TIMSK0 |= (1<<OCIE0A);
TCCR0A |= _BV(WGM01);
OCR0A = 33;
}

5. Timer 0 dengan OC0A Enable


#include <avr/io.h>
void TimerInit();
unsigned char periode;
int main(void) {
DDRB|=_BV(PB7);
TimerInit();
while(1) {

}
}
void TimerInit(void) {
TCCR0B=(1<<CS01);
OCR0A=250;
TCCR0A|=_BV(WGM01);
TCCR0A|=(1<<COM0A0);
}

6. Timer 1 Mode CTC


#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <avr/sleep.h>

void TimerInit();
int main (void) {
DDRB|=_BV(DDB7);
TimerInit();
while (1) {
if(TIFR1&_BV(OCF1A)) {
PORTB^=(1<<PB7);
TIFR1|=_BV(OCF1A);
}
}
}
void TimerInit() {
TCCR1B|=_BV(WGM12);
TCCR1B|=_BV(CS11);
OCR1A=250;
}
F. ANALISA
Pada percobaan kali ini merupakan percobaan mengenai timer / counter pada
AVR dimana pada AVR sendiri terdapat beberapa macam timer yaitu timer 8 bit dan 16
bit. Timer 0 merupakan salah satu timer AVR yang berjenis 8 bit yang memiliki nilai
maksimal sebesar 28 = 255.
Pada percobaan pertama dilakukan percobaan pada Timer 0 Mode Normal. Pada
percobaan ini dihasilkan output berupa Generate Frekuensi yang diatur menggunakan
program dan hasil frekuensi akan tampil pada layar universal counter. Frekuensi yang
akan diinginkan adalah sebesar 200Hz, 2KHz, 4KHz, 16KHz, 300KHz dengan
menggunakan Xtal sebesar 16MHz.
Pada percobaan kedua , dilakukan percobaan yang berjudul Timer 0 Mode
Normal dengan Interrupt. Hampir sama dengan percobaan 1 hanya saja pada percobaan
ini menggunakan interrupt. Pada percobaan ini timer akan melakukan counter mulai dari
nilai yang diberikan pada TCNT hingga mencapai nilai maksimal, proses counter ini
dilakukan di dalam interrupt bukan di dalam program utama. Karena proses counter
dilakukan di luar program utama sehingga frekuensi outputnya berbeda dengan timer
tanpa interrupt. Generate frekuensi yang digunakan adalah 1KHz, 2Khz, 4KHz, 16KHz,
20KHz, dan 30KHz.

Pada percobaan ketiga adalah percobaan yang berjudul Timer 0 mode


CTC. Hasil output yang dihasilkan hampir sama dengan percobaan sebelumnya yaitu
meng generate frekuensi 1kHz, 2kHz, 4kHz, 16kHz, 20kHz, 30kHz. Pada praktikum ini
digunakan perintah OCR0A yg fungsinya berbeda dari TCNT, yaitu membandingkan
nilai CNT, bila telah mencapai CNT yang diinginkan maka timer akan reset.
Perbandingan ini membandingkan antara CNT dari prescaller terbaik yang dipilih.

Pada percobaan ke empat digunakan timer 0 mode CTC dengan


interrupt, sama halnya dengan percobaan ketiga namun yang membedakan yaitu ketika
counter telah mencapai nilai atau sama dengan OCR maka program interrupt (Interrupt
Service Runtime) akan dijalankan.

Pada percobaan kelima merupakan percoban yang menggunkan timer hardware


dimana pada timer ini hanya perlu sekali setting untuk menghasilkan frekuensi yang
sama selama AVR diberi sumber tegangan. Pada timer jenis ini yang berperan penting
agar timer dapat berjalan dibebankan pada hardware karena secara kemampuan AVR
mampu menjalankan timer menggunkan hardware yang ada didalamnya.
Percobaan terakhir atau percobaan kelima merupakan percobaan yang
menggunakan timer 1 dnegan mode CTC. Dimana pada timer 1 merupakan timer AVR
berjenis 16 bit dnegan nilai maksimal counter sebesar 65535. Sehingga timer 1 memiliki
lebar data yang lebih panjang dari pada timer 0.

G. KESIMPULAN
Setelah melakukan percobaan kali ini dapat disimpulkan bahwa :
1. Semakin besar nilai CNT maka semakin besar pula frekuensi yang dihasilkan
dengan prescaller yang sama.
2. Semakin besar prescaller yang digunakan maka semakin kecil nilai CNT nya karena
prescaller adalah pembagi clock.
3. Makin kecil nilai maximum TCNT makin kecil pula waktu intervalnya

4. Nilai CNT yang digunakan berubah ubah sesuai dengan frekuensi dan presscaller
yang digunakan dan semakin besar nilai CNT maka semakin besar pula frekuensi
yang dihasilkan dengan prescaller yang sama.
5. TIFRO merupakan register untuk mengaktifkan interrupt counter.
6. Pada frekuensi yang dihasilkan pada setiap mode memiliki nilai yang berbeda
karena perbedaan cara perhitungan pada tiap tiap mode.

You might also like