Professional Documents
Culture Documents
Basic Timer AVR
Basic Timer AVR
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
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);
}
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);
}
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;
}
void TimerInit();
unsigned char periode;
ISR (TIMER0_COMPA_vect)
{
PORTB ^= (1<<PB7);
}
while (1)
{
sleep_mode();
}
}
void TimerInit(void)
{
TCCR0B = (1<<CS01);
TIMSK0 |= (1<<OCIE0A);
TCCR0A |= _BV(WGM01);
OCR0A = 33;
}
}
}
void TimerInit(void) {
TCCR0B=(1<<CS01);
OCR0A=250;
TCCR0A|=_BV(WGM01);
TCCR0A|=(1<<COM0A0);
}
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.
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.