Praksismik_modul1_14s16028_erikson.docx

  • Uploaded by: ericson silaban
  • 0
  • 0
  • April 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Praksismik_modul1_14s16028_erikson.docx as PDF for free.

More details

  • Words: 2,560
  • Pages: 10
Percobaan II TIMER, COUNTER, INTERPUPT ERIKSON Tanggal ELSS3203 Laboratorium Institut Teknologi Del

MANGIHUT

TUA

Percobaan Praktikum Sistem Digital

Abstrak— The practicum of the two-system microprocessor module will explain the functions of the board arrogance, namely timer / counter and interrupt. Timer / counter is a function in Arduino to calculate the time taken from a process. Meanwhile, the interrupt is an external input that can change the course of the program. Same as previous practicum, the practitioner will use WINAVR software using C language. The practitioner is expected to be able to make programs using timers on the 8051 microcontroller in various timer modes and the type of timer capable of making programs using the interrupt facilities available on the microcontroller Keyword: timer / counter, external clock, interrupt, delay

PENDAHULUAN Timer dan counter adalah suatu pencacah waktu yang bisa menghitung naik dan turun. Pencacah berupa register 8 bit/ 16 bit. Timer adalah suatu sarana yang menghitung durasi kejadian counter atau pencacah. Sedikit berbeda dengan timer, counter adalah sarana untuk mencacah atau menghitung jumlah kejadian. Sedangkan interrupt adalah suatu istilah yang digunakan pada mikrokontroller untuk menginstrupsi suatu proram yang sedang dikerjakan. Tujuan praktikum ini adalah sebagai berikut:  Praktikan memahami datasheet ATMega 8535  Praktikan mampu membuat aplikasi timer/counter dan interrupt pada AVR dengan menggunakan Bahasa pemograman C pada winAVR.  Praktikan mampu membuat aplikasi external interrupt pada AVR dengan menggunakan Bahasa pemograman C pada winAVR.

SILABAN : Sistem –

Teknik

(14S16028) 08/03/2019 Mikroprosesor Elektro

I. LANDASAN TEORETIS A. ATMega 8535 ATMega 8535 adalah salah satu mikrokontroler 8 bit buatan Atmel untuk keluarga AVR yang diproduksi secara massal pada tahun 2006. Karena merupakan keluarga AVR, maka ATMega8535 juga menggunakan arsitektur RISC. ATMega 8535 memiliki beberapa kemampuan : 1. .Sistem mikrokontroler 8 bit berbasis RISC dengan kecepatan maksimal 16 MHz. 2. Memiliki memori flash 8 KB, SRAM sebesar 512 bytedan EEPROM (Electrically Erasable Programmable ReadOnly Memory) sebesar 512 byte. 3. Memiliki ADC internal dengan ketelitian 10 bit sebanyak 8 saluran. 4. Memiliki PWM (Pulse Width Modulation GelombangSinyal Termodulasi) internal sebanyak 4 saluran. 5. Portal komunikasi serial (USART) dengan kecepatanmaksimal 2,5 Mbps. 6. Enam pilihan mode sleep, untuk menghemat penggunaandaya listrik.

Mikrokontroler ATMega8535 memiliki 40 pin untukmodel PDIP, dan 44 pin untuk model TQFP dan PLCC. Nama-nama pin pada mikrokontroler ini adalah: 1. VCCuntuk tegangan pencatu daya positif. 2. GND untuk tegangan pencatu daya negatif. 3. PortA (PA0 - PA7) sebagai port Input / Output dan memiliki kemampuan lain yaitu sebagai input untuk ADC. 4. PortB (PB0– PB7) sebagai port Input / Output dan juga memiliki kemampuan yang lain. 5. PortC (PC – PC7) sebagai port Input / Output untuk ATMega8535. 6. PortD (PD0 – PD7) sebagai port Input / Output dan juga memiliki kemampuan yang lain. 7. RESET untuk melakukan reset program dalam mikrokontroler.

8.

XTAL1 dan XTAL2 untuk input pembangkit sinyal clock. 9. AVCC untuk pin masukan tegangan pencatu daya untuk ADC. 10. AREF untuk pin tegangan referensi ADC. Mikrokontroler memiliki arsitektur RISC 8 bit, di mana semua instruksi dikemas dalam kode 16-bit, sebagian besar instruksi dieksekusi dalam satu siklus clock. Mikrokontroler ATMega 8535 memiliki saluran I/O sebagai berikut: Port A (PA0 – PA7) merupakan pin I/O dua arah dan pin masukkan ADC b) Port B (PB0– PB7) merupakan pin I/O dua arah dan pin fungsi khusus, yaitu timer/counter, komparator analog, dan SPI. c) Port C (PC0 – PC7) merupakan pin I/O dua arah dan pin fungsi khusus, yaitu TWI, komparator analog, dan timer oscillator. d) Port D (PD0 – PD7) merupakan pin I/O dua arah dan pin fungsi khusus, yaitu komparator analog, interupsi eksternal komunikasi serial.

E. Mengaktifkan Interrupt Ada beberapa register yang harus diaktifkan untuk menggunakan interrupt, yaitu diantaranya: • Status register (SREG) Pada bit D7 merupakan pengaturan Global Interrupt Enable, dengan memberikan nilai biner 1 pada bit tersebut, semua jenis interrupt siap untuk diaktifkan.

a)

Timer/Counter Timer bekerja dengan memberikan prescaling (pembagi frekuensi) pada clock microcontroller atau clock eksternal. Digunakan prescaling untuk mendapatkan frekuensi yang diinginkan. Register yang digunakan untuk operasi Timer/Counter pada AVR adalah TCNT, TCCR, TIMSK, TIFR, dan OC. TCNT adalah register pencacah dari 0 hingga nilai maksimum yang dapat ditentukan, TCCR berfungsi untuk pengaturan mode operasi timer/counter, TIMSK berfungsi untuk memilih timer/counter berapa yang aktif, TIFR berfungsi untuk mengetahui adanya interupsi akibat operasi counter timer, dan register OC untuk menyimpan nilai pembanding dengan nilai pada register TCNT.

• Timer Interrupt Mask (TIMSK)

• General Interrupt Control Register (GICR)

B.

C. Timer 0 Register 16-bit register Timer 0 diakses sebagai rendah dan tinggi-byte. Low-byte register disebut TL0 (Timer 0 byte rendah) dan high-byte register disebut TH0 (Timer 0 byte tinggi). register ini dapat diakses seperti daftar lain. Misalnya, instruksi MOV TL0, # 4H bergerak nilai ke rendah byte dari timer 0. D. Timer 1 Register 16-bit register Timer 1 diakses sebagai rendah dan tinggi-byte. Low-byte register disebut TL1 (Timer 1 byte rendah) dan high-byte register disebut TH1 (Timer 1 byte tinggi). register ini dapat diakses seperti daftar lain. Misalnya, instruksi MOV TL1, # 4H bergerak nilai ke rendah byte dari Timer 1.

Jenis-jenis Interrupt pada ATmega128

II. HASIL DAN ANALISIS A. Delay dengan Timer/Counter ] Tugas II.A.1 Pada percobaan ini, kita membuat lampu LED menyala selama 1 detik dan mati selama 1 detik begitu seterusnya. Langkah pertama yang harus dibuat dengan menset portB dan mengatur register DDRB dengan nilai 0xFF. Untuk mengatur waktu / delay, kita menggunakan fungsi timer/counter dengan cara mencari nilai OCN terlebih dahulu. Adapun codingan untuk percobaan A1 ini adalah sebagai berikut: #include<mega8535.h> void main () { DDRB = 0xFF; while (1) { TCNT1 = 49910; TCCR1B = 0b101; while ((TIFR & 0b00000100) == 0); TCCR1B = 0; TIFR = 0b00000100; PORTB = ~PORTB; } }

Flowchart dari program adalah sebagai berikut.

Berikut adalah hasil perhitungannya : 𝑛 𝑥 16.000.000 𝑂𝐶𝑁 = 1024 1 𝑥 16.000.000 𝑂𝐶𝑁 = 1024 𝑂𝐶𝑁 = 15626 Setelah mendapat hasil OCN, maka langkah selanjutnya adalah menghitung TCNT1. Nilai maksimum dari TCNT adalah 65535. Maka, untuk mendapatkan TCNT1 dengan delay 1 detik adalah : 𝑇𝐶𝑁𝑇1 = 65535 − 𝑂𝐶𝑁 𝑇𝐶𝑁𝑇1 = 65535 − 15625 𝑇𝐶𝑁𝑇1 = 49910 Dari hasil diatas, maka LED akan menyala dan mati selama 1 detik. Keuntungan dari menggunakan delay dengan Timer/counter adalah bahwa proses pencacahan untuk delay dapat dilakukan dengan frequency yang berbedabeda dengan penyesuaian prescaler dan nilai bit OCR. Karena hasil yang diperoleh sesuai dengan yang diharapkan pada saat praktikum maka dapat disimpulkan percobaan ini berhasil.

Tugas II.A.2 Percobaan ini juga membuat lampu LED menyala dan mati sesuai waktu yang ditentukan. Hanya saja delay diubah menjadi modulus 9 dari nomor kelompok ditambah 1. Kami adalah kelompok 11 maka modulusnya adalah 2 + 1 = 3. Jadi kami membuat lampu LED menyala dan mati dengan delay selama 3 detik. Adapun codingan untuk percobaan A1 ini adalah sebagai berikut:

Berikut ini hasil yang diperoleh dari percobaan, yang dapat dilihat pada gambar dibawah ini:

#include<mega8535.h> void main () { DDRB = 0xFF; while (1) { TCNT1 = 18660; TCCR1B = 0b101; while ((TIFR & 0b00000100) == 0); TCCR1B = 0; TIFR = 0b00000100; PORTB = ~PORTB; } }

Flowchart dari program adalah sebagai berikut.

Sama dengan sebelum, kita menghitung nilai OCN terlebih dahulu. Berikut hasil perhitungannya : 𝑛 𝑥 16.000.000 𝑂𝐶𝑁 = 1024 3 𝑥 16.000.000 𝑂𝐶𝑁 = 1024 𝑂𝐶𝑁 = 46875 Setelah mendapatkan hasil OCN, maka selanjutnya menghitung nilai TCNT1 𝑇𝐶𝑁𝑇1 = 65535 − 𝑂𝐶𝑁 𝑇𝐶𝑁𝑇1 = 65535 − 46875 𝑇𝐶𝑁𝑇1 = 18660

langkah

Dengan hasil TCNT1, maka LED akan menyala dan mati selama 3 detik. Nilai prescaler menyebabkan proses pencacahan dan pembagian yang berbeda dari clock. Karena hasil yang diperoleh sesuai dengan yang diharapkan pada saat praktikum maka dapat disimpulkan percobaan ini berhasil.

Berikut ini hasil yang diperoleh dari percobaan, yang dapat dilihat pada gambar dibawah ini:

B. External Clock sebagai Counter Tugas II.B.1 Pada percobaan ini, kita menampilkan jumlah counter menggunakan LCD sebanyak n kali keypad ditekan. Program akan diset agar clock yang digunakan adalah clock eksternal. Bit TCCR0 di set bernilai 0b00000110 yang menunjukkan bahwa sumber external clock diambil pada T0. Clock diset dalam keadaan falling edge yang mengartikan apabila program akan berjalan jika tombol interrupt selesai ditekan. Jika tombol interrupt ditekan terus menerus tanpa dilepas maka program tidak akan berjalan dan tidak menampilkannya pada LCD. Adapun codingan untuk percobaan A1 ini adalah sebagai berikut:

    

DDRA=0xFF; => Kode program yang mengatur port A sebagai output dimana bit 0 sampai bit 7 pada port A akan berperan sebagai output. PORTA = 0xF0; => mengatur pin output bernilai 0. TCNT1=3035; =>digunakan untuk menyimpan nilai timer yang diinginkan dan dibagi menjadi 2 register 8 bit, yaitu: TCNT1H dan TCNT1L. TCCR1B=0B101; =>fungsi register ini digunakan untuk pengaturan mode operasi Timer/Counter. Nilai register diatur sebagai 0B101. TIFR=0B00000100; =>Untuk mengetahui adanya interupsi akibat operasi Counter Timer .

#include <mega8535.h> #include #include <stdio.h> char str[10]; void main() { DDRB.0 = 0; PORTB.0 = 1; lcd_init(16); lcd_clear(); lcd_putsf("Counter 0= "); TCCR0 = 0b110; while(1) { sprintf(str,"%i",TCNT0); lcd_gotoxy(10,0); lcd_puts(str); } }

Flowchart dari program adalah sebagai berikut.

Tugas II.B.2 Pada percobaan ini kita memodifikasi program pada Tugas II.B.1 sehingga LED menyala semua selama n detik dan mati semua selama n detik begitu seterusnya ketika keypad ditekan sejumlah n kali, serta output LCD DISPLAY menampilkan jumlah counter sebanyak n kali keypad ditekan. Adapun codingan untuk percobaan A1 ini adalah sebagai berikut:

Berikut ini hasil yang diperoleh dari percobaan, yang dapat dilihat pada gambar dibawah ini:

#include <mega8535.h> #include #include <stdio.h> #include <delay.h> char str[10]; void main() { unsigned int i; DDRB.0 = 0; PORTB.0 = 1; DDRA = 0xFF; lcd_init(16); lcd_clear(); lcd_putsf("Counter 0 = "); TCCR0 = 0b110; while(1) { sprintf(str,"%i",TCNT0); lcd_gotoxy(10,0); lcd_puts(str); i = TCNT0; PORTA = 0xFF; delay_ms (i*1000); PORTA = 0x00; delay_ms (i*1000); } }

Hasil pada kit praktikum sesuai dengan desain kode program pada CV AVR. Pertama niali TCCR sebagai clock external. TCCR0= 0b00000110; Kondisi diatas menunjukkan falling edge clock Nilai TCNT0 dan OCR0 nilainya diatur. TCNT0= 123; OCR0=125; Nilai TCNT dan OCR selalu dibandingkan. Nilai TCNT akan selalu bertambah (+1) setiap penekanan push botton sebanyak 1 kali. Nilai TCNT tidak boleh melebihi nilai OCR. Apabila melebihi maka kembali ke kondisi clear bit. Clock external adlah penekanan push button.

#include <mega8535.h> #include void main() { DDRD.2 = 0; DDRD.3 = 0; PORTD.2 = 1; PORTD.3 = 1; GICR = 0b11000000; MCUCR = 0b00000000; #asm("sei") lcd_init(16); lcd_clear(); lcd_putsf("Ext Interrupt"); while(1); } interrupt[2]void interupsi_ext0(void) { lcd_gotoxy(0,1); lcd_putsf("INT Ext 0"); } interrupt[3]void interupsi_ext1(void) { lcd_gotoxy(0,1); lcd_putsf("INT Ext 1"); }

Flowchart dari program adalah sebagai berikut.

Pada program kita menambahkan i = TCNT0; dan delay untuk mengatur waktu. PORTA = 0xFF ; delay_ms ( i*1000) ; bahwa lampu akan hidup selama i kali keypad ditekan dikalikan dengan 1000 karena delay dalam satuan ms. PORTA = 0x00 ; delay_ms ( i*100) ; bahwa lampu akan mati selama i kali sebanyak keypad ditekan dan dikalikan 1000 karena delay dalam satuan ms. Jadi jika counter =1 maka LED akan menyala dan mati selama 1 detik. Jika counter = 8 maka LED akan menyala dan mati selama 8 detik, begitu seterusnya. C. External Interrupt Tugas II.C.1 Pada percobaan ini, output LCD DISPLAY menampilkan “INT Ext 0” ketika keypad 1 ditekan dan menampilkan “INT Ext 1” ketika keypad 2 ditekan. Adapun codingan untuk percobaan A1 ini adalah sebagai berikut:

8 time s

Berikut ini hasil yang diperoleh dari percobaan, yang dapat dilihat pada gambar dibawah ini:

#include <mega8535.h> #include #include <delay.h> void init_ext_int () ISR(int0_vect) { unsigned char i = 0x01, n; for(n=0;n<8;n++) { PORTA=i; delay_ms(3000); i = (i<<1)| (i>>7); } } int main () { init_Ext_Int(); sei (); DDRA = 0xFF; while (1) { PORTA = 0b00000000; delay_ms (3000); PORTA = 0b11111111; delay_ms (3000); } return 0; } void init_Ext_Int(void) { MCUCR = 0x02; MCUCSR = 0x00; GICR = 0x40; GIFR = 0x40; }

Flowchart dari program adalah sebagai berikut.

Dari percobaan yang telah dilakukan maka dapat disimpulkan bahwa hasil yang didapat sesuai harapan. DDRD2 dan DDRD3 = 0 sehingga PORTD2 dan PORTD3 menjadi input. Untuk mengaktifkan port maka nilai di set menjadi 1.. Hal ini terjadi karena prioritas utama pada ATMega untuk external interrupt lebih tinggi dibandingkan dengan timer interrupt. Sehingga apabila kita perhatikan led pertama – tama akan menyala dan pada LCD akan tertulis eksterna counter. Pada saat besamaan juga akan LED seluruhnya akan menyala. Saat button 1 atau D1 di tekan , sesuai dengan penjelasan sebelumnya bahwa ATMega akan memprioritaskan eksternal interrupt sehingga tulisan pada LCD akan berubah menjadi 1. Selanjutaya led akan padam dan LED akan menyala Selma 1 detik . Apabila button ditekan lagi maka LED akan padam selam n detik, tergantung berapa kali memberi masukkan selanjutnya menyala kembali

Tugas II.C.2

Berikut ini hasil yang diperoleh dari percobaan, yang dapat dilihat pada gambar dibawah ini:

III. SIMPULAN 





Datasheet pada ATMega 8535 memuat registerTimer/Counter 8 bit, konfigurasi mode operasi, pengaturan sumber clock, dan register untuk keperluanexternal interrupt. Dalam mengimplementasikan aplikasi Timer/Cou nter dan Interrupt pada AVR dapat dilakukandengan mengubah nilai pada register TCNT dan OCR. Dalam mengimplementasikan aplikasi External Interrupt pada AVR dilakukan dengan mengatur konfigurasi pada register MCUCR, GICR, danGIFR.

 REFERENSI 

Hutabarat, Mervin T., Waskita Adijarto, dan Harry Septanto, Praktikum Sistem Mikroprosesor, Sekolah Teknik Elektro dan Informatika Institut Teknologi Bandung, Bandung, 2013.



Waskita Adijarto dkk. , Petujuk Praktikum Sistem Mikroprosessor, ITB, Bandung, 2016.

Patterson, David, dan John Hennessy. ComputerOrganization and Design: The Hardware/Software Interface .2012. Waltham: Elsevier Inc.

Lampiran { 1. Tugas II.A.1 #include<mega8535.h> void main () { DDRB = 0xFF; while (1)

TCNT1 = 49910; TCCR1B = 0b101; while ((TIFR & 0b00000100) == 0); TCCR1B = 0; TIFR = 0b00000100; PORTB = ~PORTB;

lcd_clear(); lcd_putsf("Counter 0 = "); TCCR0 = 0b110; while(1) { sprintf(str,"%i",TCNT0); lcd_gotoxy(10,0); lcd_puts(str); i = TCNT0; PORTA = 0xFF; delay_ms (i*1000); PORTA = 0x00; delay_ms (i*1000);

} } 2. Tugas II.A.2 #include<mega8535.h> void main () { DDRB = 0xFF; while (1) { TCNT1 = 18660; TCCR1B = 0b101; while ((TIFR & 0b00000100) == 0); TCCR1B = 0; TIFR = 0b00000100; PORTB = ~PORTB; } } 3. Tugas II.B.1 #include <mega8535.h> #include #include <stdio.h> char str[10]; void main() { DDRB.0 = 0; PORTB.0 = 1; lcd_init(16); lcd_clear(); lcd_putsf("Counter 0= "); TCCR0 = 0b110; while(1) { sprintf(str,"%i",TCNT0); lcd_gotoxy(10,0); lcd_puts(str); } }

4. Tugas II.B.2 #include <mega8535.h> #include #include <stdio.h> #include <delay.h> char str[10]; void main() { unsigned int i; DDRB.0 = 0; PORTB.0 = 1; DDRA = 0xFF; lcd_init(16);

} } #include <mega8535.h> #include void main() { DDRD.2 = 0; DDRD.3 = 0; PORTD.2 = 1; PORTD.3 = 1; GICR = 0b11000000; MCUCR = 0b00000000; #asm("sei") lcd_init(16); lcd_clear(); lcd_putsf("Ext Interrupt"); while(1); } interrupt[2]void interupsi_ext0(void) { lcd_gotoxy(0,1); lcd_putsf("INT Ext 0"); } interrupt[3]void interupsi_ext1(void) { lcd_gotoxy(0,1); lcd_putsf("INT Ext 1"); }

5. Tugas II.C.1 #include <mega8535.h> #include #include <delay.h> void init_ext_int () ISR(int0_vect) { unsigned char i = 0x01, n; for(n=0;n<8;n++) { PORTA=i; delay_ms(3000); i = (i<<1)| (i>>7); } } int main ()

while(1);

{ init_Ext_Int(); sei (); DDRA = 0xFF; while (1) { PORTA = 0b00000000; delay_ms (3000); PORTA = 0b11111111; delay_ms (3000); } return 0; } void init_Ext_Int(void) { MCUCR = 0x02; MCUCSR = 0x00; GICR = 0x40; GIFR = 0x40; }

6. Tugas II.C.2 #include <mega8535.h> #include void main() { DDRD.2 = 0; DDRD.3 = 0; PORTD.2 = 1; PORTD.3 = 1; GICR = 0b11000000; MCUCR = 0b00000000; #asm(“sei”) lcd_init(16); lcd_clear(); lcd_putsf(“Ext Interrupt”);

} interrupt[2]void interupsi_ext0(void) { lcd_gotoxy(0,1); lcd_putsf(“INT Ext 0”); } Interrupt[3]void interupsi_ext1(void) { lcd_gotoxy(0,1); lcd_putsf(“INT Ext 1”); }

More Documents from "ericson silaban"