Anda di halaman 1dari 10

Percobaan II

TIMER, COUNTER, INTERPUPT

ERIKSON MANGIHUT TUA SILABAN (14S16028)


Tanggal Percobaan : 08/03/2019
ELSS3203 Praktikum Sistem Mikroprosesor
Laboratorium Sistem Digital – Teknik Elektro
Institut Teknologi Del

Abstrak— The practicum of the two-system I. LANDASAN TEORETIS


microprocessor module will explain the functions of the
board arrogance, namely timer / counter and interrupt. A. ATMega 8535
Timer / counter is a function in Arduino to calculate the ATMega 8535 adalah salah satu mikrokontroler 8
time taken from a process. Meanwhile, the interrupt is an bit buatan Atmel untuk keluarga AVR yang diproduksi
external input that can change the course of the program. secara massal pada tahun 2006. Karena merupakan
Same as previous practicum, the practitioner will use keluarga AVR, maka ATMega8535 juga menggunakan
WINAVR software using C language. The practitioner is arsitektur RISC. ATMega 8535 memiliki beberapa
expected to be able to make programs using timers on the kemampuan :
8051 microcontroller in various timer modes and the type 1. .Sistem mikrokontroler 8 bit berbasis RISC
of timer capable of making programs using the interrupt dengan kecepatan maksimal 16 MHz.
facilities available on the microcontroller 2. Memiliki memori flash 8 KB, SRAM sebesar 512
bytedan EEPROM (Electrically Erasable
Keyword: timer / counter, external clock, interrupt, delay Programmable ReadOnly Memory) sebesar 512
byte.
PENDAHULUAN 3. Memiliki ADC internal dengan ketelitian 10 bit
sebanyak 8 saluran.
4. Memiliki PWM (Pulse Width Modulation -
Timer dan counter adalah suatu pencacah waktu yang GelombangSinyal Termodulasi) internal sebanyak
bisa menghitung naik dan turun. Pencacah berupa register 4 saluran.
8 bit/ 16 bit. Timer adalah suatu sarana yang menghitung 5. Portal komunikasi serial (USART) dengan
durasi kejadian counter atau pencacah. Sedikit berbeda kecepatanmaksimal 2,5 Mbps.
dengan timer, counter adalah sarana untuk mencacah atau 6. Enam pilihan mode sleep, untuk menghemat
menghitung jumlah kejadian. Sedangkan interrupt adalah penggunaandaya listrik.
suatu istilah yang digunakan pada mikrokontroller untuk
menginstrupsi suatu proram yang sedang dikerjakan.
Mikrokontroler ATMega8535 memiliki 40 pin
Tujuan praktikum ini adalah sebagai berikut: untukmodel PDIP, dan 44 pin untuk model TQFP
 Praktikan memahami datasheet ATMega 8535 dan PLCC. Nama-nama pin pada mikrokontroler ini
 Praktikan mampu membuat aplikasi adalah:
timer/counter dan interrupt pada AVR dengan 1. VCCuntuk tegangan pencatu daya positif.
menggunakan Bahasa pemograman C pada 2. GND untuk tegangan pencatu daya negatif.
winAVR. 3. PortA (PA0 - PA7) sebagai port Input / Output dan
 Praktikan mampu membuat aplikasi external memiliki kemampuan lain yaitu sebagai input
interrupt pada AVR dengan menggunakan untuk ADC.
Bahasa pemograman C pada winAVR. 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 E. Mengaktifkan Interrupt
sinyal clock. Ada beberapa register yang harus diaktifkan untuk
9. AVCC untuk pin masukan tegangan pencatu daya
untuk ADC. menggunakan interrupt, yaitu diantaranya:
10. AREF untuk pin tegangan referensi ADC. • Status register (SREG)
Mikrokontroler memiliki arsitektur RISC 8 bit, di
mana semua instruksi dikemas dalam kode 16-bit, Pada bit D7 merupakan pengaturan Global Interrupt
sebagian besar instruksi dieksekusi dalam satu Enable, dengan memberikan nilai biner 1 pada bit tersebut,
siklus clock. Mikrokontroler ATMega 8535
memiliki saluran I/O sebagai berikut: semua jenis interrupt siap untuk diaktifkan.

a) 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
• Timer Interrupt Mask (TIMSK)
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 • General Interrupt Control Register (GICR)
dua arah dan pin fungsi khusus, yaitu
komparator analog, interupsi eksternal
komunikasi serial.

B. 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
Jenis-jenis Interrupt pada ATmega128
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.

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.
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 Berikut adalah hasil perhitungannya :
dan mengatur register DDRB dengan nilai 0xFF. Untuk 𝑛 𝑥 16.000.000
mengatur waktu / delay, kita menggunakan fungsi 𝑂𝐶𝑁 =
1024
timer/counter dengan cara mencari nilai OCN terlebih 1 𝑥 16.000.000
dahulu. Adapun codingan untuk percobaan A1 ini adalah 𝑂𝐶𝑁 =
1024
sebagai berikut: 𝑂𝐶𝑁 = 15626
#include<mega8535.h> Setelah mendapat hasil OCN, maka langkah selanjutnya
void main () adalah menghitung TCNT1. Nilai maksimum dari TCNT
{ adalah 65535. Maka, untuk mendapatkan TCNT1 dengan
DDRB = 0xFF;
delay 1 detik adalah :
while (1)
{
TCNT1 = 49910; 𝑇𝐶𝑁𝑇1 = 65535 − 𝑂𝐶𝑁
TCCR1B = 0b101; 𝑇𝐶𝑁𝑇1 = 65535 − 15625
while ((TIFR & 0b00000100) == 0); 𝑇𝐶𝑁𝑇1 = 49910
TCCR1B = 0; Dari hasil diatas, maka LED akan menyala dan mati selama
TIFR = 0b00000100; 1 detik. Keuntungan dari menggunakan delay dengan
PORTB = ~PORTB;
Timer/counter adalah bahwa proses pencacahan untuk
}
} delay dapat dilakukan dengan frequency yang berbedabeda
dengan penyesuaian prescaler dan nilai bit OCR. Karena
Flowchart dari program adalah sebagai berikut. 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:

#include<mega8535.h>
void main ()
{
DDRB = 0xFF;
while (1)
{
Berikut ini hasil yang diperoleh dari percobaan, yang dapat
TCNT1 = 18660;
dilihat pada gambar dibawah ini: 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 langkah


selanjutnya menghitung nilai TCNT1
𝑇𝐶𝑁𝑇1 = 65535 − 𝑂𝐶𝑁
𝑇𝐶𝑁𝑇1 = 65535 − 46875
𝑇𝐶𝑁𝑇1 = 18660

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.

B. External Clock sebagai Counter


Berikut ini hasil yang diperoleh dari percobaan, yang dapat
dilihat pada gambar dibawah ini:
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:

#include <mega8535.h>
#include <alcd.h>
#include <stdio.h>
char str[10];
void main()
{
DDRB.0 = 0;
 DDRA=0xFF; => Kode program yang mengatur PORTB.0 = 1;
port A sebagai output dimana bit 0 sampai bit 7 lcd_init(16);
pada port A akan berperan sebagai output. lcd_clear();
 PORTA = 0xF0; => mengatur pin output lcd_putsf("Counter 0= ");
bernilai 0. TCCR0 = 0b110;
 TCNT1=3035; =>digunakan untuk menyimpan while(1)
{
nilai timer yang diinginkan dan dibagi menjadi 2
sprintf(str,"%i",TCNT0);
register 8 bit, yaitu: TCNT1H dan TCNT1L. lcd_gotoxy(10,0);
 TCCR1B=0B101; =>fungsi register ini digunakan lcd_puts(str);
untuk pengaturan mode operasi Timer/Counter. }
Nilai register diatur sebagai 0B101. }
 TIFR=0B00000100; =>Untuk mengetahui adanya
interupsi akibat operasi Counter Timer .
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:

#include <mega8535.h>
#include <alcd.h>
#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;
Berikut ini hasil yang diperoleh dari percobaan, yang dapat while(1)
dilihat pada gambar dibawah ini: {
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);

}
}

#include <mega8535.h>
#include <alcd.h>
void main()
{
DDRD.2 = 0;
Hasil pada kit praktikum sesuai dengan desain kode DDRD.3 = 0;
program pada CV AVR. Pertama niali TCCR sebagai clock PORTD.2 = 1;
PORTD.3 = 1;
external.
GICR = 0b11000000;
TCCR0= 0b00000110; MCUCR = 0b00000000;
#asm("sei")
Kondisi diatas menunjukkan falling edge clock Nilai lcd_init(16);
lcd_clear();
TCNT0 dan OCR0 nilainya diatur.
lcd_putsf("Ext Interrupt");
TCNT0= 123; while(1);
}
OCR0=125; interrupt[2]void interupsi_ext0(void)
{
Nilai TCNT dan OCR selalu dibandingkan. Nilai
lcd_gotoxy(0,1);
TCNT akan selalu bertambah (+1) setiap penekanan push lcd_putsf("INT Ext 0");
botton sebanyak 1 kali. Nilai TCNT tidak boleh melebihi }
nilai OCR. Apabila melebihi maka kembali ke kondisi interrupt[3]void interupsi_ext1(void)
clear bit. Clock external adlah penekanan push button. {
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:

#include <mega8535.h>
#include <alcd.h>
#include <delay.h>
8 void init_ext_int ()
time ISR(int0_vect)
s {
unsigned char i = 0x01, n;
for(n=0;n<8;n++)
{
PORTA=i;
delay_ms(3000);
i = (i<<1)| (i>>7);
}
Berikut ini hasil yang diperoleh dari percobaan, yang dapat }
int main ()
dilihat pada gambar dibawah ini:
{
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.
 Patterson, David, dan John Hennessy.
ComputerOrganization and Design: The
REFERENSI Hardware/Software Interface .2012. Waltham:
Elsevier Inc.

 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.

Lampiran
{
1. Tugas II.A.1 TCNT1 = 49910;
#include<mega8535.h> TCCR1B = 0b101;
void main () while ((TIFR & 0b00000100) == 0);
{ TCCR1B = 0;
DDRB = 0xFF; TIFR = 0b00000100;
while (1) PORTB = ~PORTB;
} lcd_clear();
} lcd_putsf("Counter 0 = ");
TCCR0 = 0b110;
2. Tugas II.A.2 while(1)
#include<mega8535.h> {
void main () sprintf(str,"%i",TCNT0);
{ lcd_gotoxy(10,0);
DDRB = 0xFF; lcd_puts(str);
while (1) i = TCNT0;
{ PORTA = 0xFF;
TCNT1 = 18660; delay_ms (i*1000);
TCCR1B = 0b101; PORTA = 0x00;
while ((TIFR & 0b00000100) == 0); delay_ms (i*1000);
TCCR1B = 0;
TIFR = 0b00000100; }
PORTB = ~PORTB; }
}
} #include <mega8535.h>
#include <alcd.h>
3. Tugas II.B.1 void main()
{
#include <mega8535.h>
DDRD.2 = 0;
#include <alcd.h> DDRD.3 = 0;
#include <stdio.h> PORTD.2 = 1;
char str[10]; PORTD.3 = 1;
void main() GICR = 0b11000000;
{ MCUCR = 0b00000000;
DDRB.0 = 0; #asm("sei")
PORTB.0 = 1; lcd_init(16);
lcd_init(16); lcd_clear();
lcd_putsf("Ext Interrupt");
lcd_clear();
while(1);
lcd_putsf("Counter 0= "); }
TCCR0 = 0b110; interrupt[2]void interupsi_ext0(void)
while(1) {
{ lcd_gotoxy(0,1);
sprintf(str,"%i",TCNT0); lcd_putsf("INT Ext 0");
lcd_gotoxy(10,0); }
lcd_puts(str); interrupt[3]void interupsi_ext1(void)
} {
lcd_gotoxy(0,1);
} lcd_putsf("INT Ext 1");
}

5. Tugas II.C.1
#include <mega8535.h>
#include <alcd.h>
4. Tugas II.B.2 #include <delay.h>
#include <mega8535.h> void init_ext_int ()
#include <alcd.h> ISR(int0_vect)
#include <stdio.h> {
#include <delay.h> unsigned char i = 0x01, n;
char str[10]; for(n=0;n<8;n++)
void main() {
{ PORTA=i;
unsigned int i; delay_ms(3000);
DDRB.0 = 0; i = (i<<1)| (i>>7);
PORTB.0 = 1; }
DDRA = 0xFF; }
lcd_init(16); int main ()
{ while(1);
init_Ext_Int(); }
sei (); interrupt[2]void interupsi_ext0(void)
DDRA = 0xFF; {
while (1) lcd_gotoxy(0,1);
{ lcd_putsf(“INT Ext 0”);
PORTA = 0b00000000; }
delay_ms (3000); Interrupt[3]void interupsi_ext1(void)
PORTA = 0b11111111; {
delay_ms (3000); lcd_gotoxy(0,1);
} lcd_putsf(“INT Ext 1”);
return 0; }
}
void init_Ext_Int(void)
{
MCUCR = 0x02;
MCUCSR = 0x00;
GICR = 0x40;
GIFR = 0x40;
}

6. Tugas II.C.2
#include <mega8535.h>
#include <alcd.h>
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”);

Anda mungkin juga menyukai