Percobaan II Timer, Counter, Interrupt Wahyu Pratama (13116053) Asisten: Luki Fabrianto (13115002) Tanggal Percobaan: 11 Maret 2019 EL3203 Praktikum Sistem Mikroprosesor Laboratorium Dasar Teknik Elektro Institut Teknologi Sumatera
Abstrak Pada praktikum kali ini praktikan diberikan beberapa percobaan yang memberikan pemahaman kepada praktikan. Pada percobaan praktikan hanya dapat menyelesaikan dua percobaan saja yaitu percobaan II.A tentang counter, timer dan interrupt dan percobaan II.B praktikan melakukan percobaan tenang external clock sebagai counter. Timer/counter adalah sebuah fungsi didalam arduino untuk menghitung waktu yang telah ditempuh dari suatu proses. Kemudian interrupt itu sendiri adalah inputan eksternal yang dapat merubah jalannya program. Untuk praktikum kali ini praktikan menggunakan WinAVR dan stater-kit arduino ATMega8535. Kata Kunci : Delay, Counter, Interrupt, Timer, ATMega8535.
AVR dengan menggunakan Bahasa pemogramanan C pada Win AVR. Praktikan mampu membuat aplikasi External Interrupt pada AVR dengan menggunakan bahasa pemograman C pada WinAVR.
II.LANDASAN TEORI 2.1 Konfigurasi timer/counter dan interrupt Gambar dan table berikut ini dikutipkan dari datasheet ATMega 8535. Deskripsi register Timer/Counter (Timer/Counter 0) (Hal. 83)
8
bit
I. PENDAHULUAN Pada sebuah sistem mikrokontroller pengaturan input output merupakan dasar yang harus dilakukan terlebih dahulu untuk mengaplikasikan ATMega8535. Pada Praktikum kali ini terdapat empat percobaan, namun hanya 2 percobaan yang mampu diselesaikan praktikan yakni percobaan II.A dan II.B. Setelah praktikum ini praktikan diharapka memahami bagaimana menggunakan software WinAVR dan khazama. Adapun tujuan pada praktikum kali ini sebagai berikut:
Praktikan memahami ATMega 8535
Praktikan mampu membuat aplikasi Timer/Counter dan Interrupt pada
Konfigurasi Mode operasi (hal 83)
Pengaturan perilaku pin OCO (untuk mode
non PWM) (hal 84)
datasheet
Pengaturan sumber clock (hal 85)
Bit 6 – INT0: External Interrupt Request 0 Enable Bit 5 – INT2: External Interrupt Request 2 Enable
Register-register penting (hal 85) Bit 7 – INTF1: External Interrupt Flag 1 Bit 6 – INTF0: External Interrupt Flag 0 Bit 5 – INTF2: External Interrupt Flag 2
III.METODOLOGI 3.1 Alat dan Bahan:
2.2
Konfigurasi External Input
Register-register untuk keperluan external interrupt diuraikan pada hal. 68-70 di datasheet ATMega8535. Di sini diberikan kutipan-kutipannya.
Stater-Kit AVR DT-Combo USBasp Laptop/PC Aplikasi WINAVR
3.2 Langkah Umum Praktikum 1.Sebelum Power Supply dihubungkan pada kit praktikum, atur terlebih dahulu pada tegangan 9volt. Kemudian, hubungkan pada kit praktikum.
2.Hubungkan Training board dengan PC mengunakan downloader USBasp.
3.Hubungkan PORT A (ATMega8535) pada port output (Trainer Board).
Bit 7 – INT1: External Interrupt Request 1 Enable
4.Pastikan sumber clock menggunakan Kristal 8MHz dengan cara mengatur fuse.
3.3.Percobaan Timer/Counter
II.A
Delay
dengan
1.Ketikan script yang ada di modul pada win code vision AVR .
2.Comple dan Build program pada WinAVR.
3.Download ke ATMega 8535,
Kemudian amati keluaran (output) pada lampu LED.
4.Selanjutnya modifikasih sesuai dengan intruksi pada modul praktikum sistem mikroprosesor.
3.4 Percobaan II.B External Clock sebagai Counter
1Hubungkan prosesor ATMega8535 dengan Trainer Board. Seperti pada Trainer Board (lihat Apendiks B).
3.5 Percobaan II.C Aplikasi Interrupt dengan Timer/Counter
1. Pastikan PORT A (ATMega8535) terhubung dengan PORT OUTPUT (Trainer Board).
2.Ketikan script yang ada di modul pada WinAVR .
3.Jalankan dan comple program kemudian build dan amati keluaran (output) pada LED.
4.Selanjutnya
modifikasih sesuai dengan intruksi pada modul praktikum sistem mikroprosesor.
3.6 Percobaan II.D External Interrupt
1.Pastikan PORT A (ATMega8535) terhubung dengan PORT OUTPUT (Trainer Board)
2.Ketikan script yang ada di modul pada WinAVR . 2.Ketikan script yang terdapat pada modul pada WinAVR.
3.Jalankan program kemudian comple dan build programnya pada WinAVR.
3.Jalankan dan comple program kemudian build dan amati keluaran (output) pada LED.
4.Selanjutnya
modifikasih sesuai dengan intruksi pada modul praktikum sistem mikroprosesor. 4.Modifikasi
modifikasih sesuai dengan intruksi pada modul praktikum sistem mikroprosesor.
IV. Data dan Analisis Berikut ini adalah hasil data dari praktikum yang telah dilakukan pada percobaan ini. 4.1Tugas II.A Delay dengan Timer/Counter Tugas II.A.1 Pada percobaan praktikan membuat program yang telah disiapkan pada modul praktikum sistem mikroprosesor di software WinAVR. Kemudian didapatkan hasil percobaan sebagai berikut ini.
Menyala Secara Bergantian Tiap 1 detik Gambar 4.1 ilustrasi dari percobaan II.A.1
DDRA = 0xFF; PORTA 0X00; TCCR1A = 0; TCCR1B =0b00001100;
persamaan diatas didapatkan nilai OCR=28800. Bila diubah kehexadesimal menjadi 0x7080. Setelah OCR1A diganti dengan 0x7080 maka prosedur akan looping hingga menemui nilai OCR1A setelah itu program akan mematikan interrupt (disable).
Perlu diperhatikan juga bahwa gcc pada menpunyai delay bawaan. Jika kita perhatikan terdapat perbedaan antara prosedur delay yang dibuat pada program dan fungsi bawaan gcc. Perbedaannya tersebut ialah penggunaan clock. Jika menggunakan fungsi delay bawaan maka frekuensi clock yang digunakan ialah frekuensi CPU sementara untuk delay frekuensi yang digunakan bisa berbeda-beda. Tugas II.A.2 Pada percobaan Tugas II.A.2 praktikan diminta untuk membuat program yang akan menyalakan LED dari 0x0F ke 0xF0 setelah x detik dimana untuk kelompok kami x bernilai 3 detik. Berikut ini adalah hasil yang telah didapatkan.
//penentuan nilai compare untuk delay 1 detik OCR1AH = 0x70; OCR1AL = 0x80
Dari potongan srcipt diatas menunjukan register A bernilai 0xFF yang menunjukan bahwa register A bertindak sebagai output. Dimana plescalar yang digunakan 256 dan TCCR1B bernilai 0b00001100. Kemudian keluaranya(output) yang dihasilkan seperti gambar 4.1, LED akan menyala berggantian pada bit 0b00001111 dan bit 0b11110000 dengan delay 1 detik. Karena pada percobaan tugas II.A.1 ini delay yang diingikan belum mencapai 1 detik, maka untuk menset agar delaynya 1 detik dapat dilakukan dengan mengganti nilai OCR1A agar delay yang dinginkan benar-benar 1 detik. maka nilai register OCR1A harus di set dengan banyaknya getaran yang dilakukan dalam satu detik di mana program menggunakan frekuensi 7372800Hz dan prescaler 256.
Nilai
= 1 detik, FCPU=7372800, dan prescalarnya=256. Dengan menggunakan
Menyala Secara Bergantian Tiap 3 detik Gambar 4.2 ilustrasi dari percobaan II.A.2
Sama seperti percobaan sebelumnya hal yang pertama yang harus dilakukan yakni dengan mengeset nilai OCR1A nya terlebih dahulu. Nilai OCR1Anya dapat kita cari dengan cara seperti berikut.
Nilai
= 3 detik, FCPU=7372800, dan prescalarnya=1024. Dan didaptkanlah hasil OCR1A=5460 hexadesimal. Kemudian kita setting OCR1A dengan 5460. Namun delay yang dihasilkan belum sampai 3 detik.
4.2.External Clock sebagai Counter Tugas II.B Pada percobaan tugas ii.b.1 memanfaatkan clock sebagai timer. Kemudian didapatkan hasil atau output sebagai berikut.
6
7
6
7
5
4
3
2
1
Menyala bergantian selama 500ms 5 4 3 2 1
0 0
Gambar 4.3 ilustrasi dari percobaan II.B.1
Pada percobaan ini hal yang diharus dilakukan pertama kali ialah mensetting clock external. Bit TCCR0 di set bernilai 0b00000110. Hal ini menunjukkan bahwa sumber external clock diambil pada pin T0(yang dihubungkan dengan IS1). Clock berada pada keadaan falling edge. Hal ini berarti jika tombol interrupt selesai ditekan, program baru menganggap itu sebagai clock. Dengan kata lain, jika tombol ditekan tanpa dilepas, program tidak menganggap itu sebagai clock. Pada saat switch tidak ditekan maka kondisi LED akan selalu bernilai 0b10101010. Selanjutnya pada percobaan II.B.2 praktikan diminta untuk memodifikasi agar delay x sesuai dengan yang diinginkan seperti intruksi pada modul sistem mikroprosesor. Dimana x yang kami inginkan adalah 3 detik. Pada peoban ini berbeda dengan percobaan sebelumnya dimana pada percobaan ini nilai compare 0CR0 yang akan disetting. Praktikan mengeset nilai 0CR0 menjadi 125 sehingga lampu LED akan menyala selama 3 detik. Namun delay yang dihasilkan(output) tidak sampai 3 detik seperti yang telah ditentukan sebelumnya. Ouput yang dihasilkan pada percobaan II.B.2 ini seperti gambar 4.4.
6
7
6
7
5
4
3
2
1
0
Menyala bergantian selama 3s 5 4 3 2 1
0
Gambar 4.4 ilustrasi dari percobaan II.B.2
V.Kesimpulan
Penjelasan deskripsi register Timer/Counter 8 bit, konfigurasi mode operasi, pengaturan perilaku pin OCO, pengaturan sumber clock, dan registerregister untuk keperluan external interrupt, yang dipakai dalam percobaan ini, terdapat dalam datasheet ATMega 8535.
Aplikasi timer/counter dan interrupt dapat dilakukan pada AVR ATMega 8535 dengan mengatur nilai register TCNT dan OCR. TCCR merupakan
register timer yang sedang digunakan, apakah itu timer 0, timer 1, timer2. Sedangkan OCR merupakan register pembanding terhadap TCNT jika ingin dilakukan interrupt. Aplikasi external interrupt dapat dilakukan pada AVR Atmega 8535 dengan mengatur nilai register MCUCR, GICR, dan GIFR.
Referensi: [1] Waskita Adijarto dkk. , Petujuk Praktikum Sistem Mikroprosessor, ITB, Bandung, 2016.
Lampiran: A.Script Tugas II.A
#include
void init_tim(void); void Delay(void); int main(void) { DDRA=0xFF; PORTA = 0x00; init_tim(); while (1) { PORTA = 0x0F; Delay(); PORTA = 0xF0; Delay(); } return 0; } void init_tim(void) { //mode operasi CTC, sumber clock prescaller 256 TCCR1A = 0; TCCR1B = 0b00001100; //overflow interrupt disable TIMSK|=(0<
B.Script Tugas II.B
#include #include #define F_CPU 7372800UL // 8MHz #include void init_tim(void); int main(void) { init_tim(); DDRA=0xFF; while (1) { //penentuan nilai awal timer TCNT0 = 123; //penentuan nilai compare OCR0 = 124; //menanti compare match while(bit_is_clear(TIFR,OCF0)) { PORTA = 0b10101010; } //meng-nol-kan flag TIFR|=_BV(OCF0); PORTA = 0b01010101; delay_ms(500); } return 0; } void init_tim(void) { //mode operasi dan sumber clock TCCR0=0b00000110; //overflow interrupt disable TIMSK=(0<
C.Script Tugas II.C #include #define F_CPU 7372800UL #include #include void init_int(void); ISR(TIMER1_OVF_vect) { unsigned char i; PORTA=0xFF; _delay_ms(200);
TIFR=(1<
D.Script II.D #include #define F_CPU 7372800UL #include #include void Init_Ext_Int(void); ISR(INT0_vect) { unsigned char i=0x01,n; for(n=0;n<8;++n) { PORTA = i; _ delay_ms(250); i=(i<<1)|(i>>7); } } int main(void) { Init_Ext_Int(); sei(); DDRA=0xFF;
while (1) { PORTA = 0b10101010; _delay_ms(500); PORTA = 0b01010101; _delay_ms(500); } return 0; } void Init_Ext_Int(void) { MCUCR=0x02;
MCUCSR=0x00; GICR=0x40; GIFR=0x40; }
E.Berikut ini hasil pada saat praktikum
Gambar 5.1 hasil percobaan II.A
Gambar 5.2 hasil percobaan II.A