Anda di halaman 1dari 17

MODUL III

TIMER , COUNTER
Amanda Madeliane Christine (118130067)
Asisten : Cahyadi Anom H (13117058)
Tanggal Percobaan : 17/04/2021
EL2209 Praktikum Sistem Mikroprosesor
Laboratorium Teknik Elektro
Institut Teknologi Sumatera

Abstrak— Pada praktikum kedua ini akan membahas mengenai


Timer dan Counter pada system mikroprosesor ATMega 8535. II. LANDASAN TEORITIS
Praktikum ini diharapkan praktikan dapat membuat aplikasi
Timer/Counter pada AVR dengan menggunakan Bahasa A. Defenisi Timer/ Counter
pemograman Bahasa C. Pada ATMega 8535 memiliki 3 jenis
Time/Counter yaitu Time/Counter0, Time/Counter1, Timer & Counter merupakan fitur yang telah tertanam di
Time/Counter2. PORT pada ATMega 8535 yang berfungsi mikrokontroler AVR yang memiliki fungsi terhadap waktu.
sebagai interrupt adalah PORTB. Fitur Timer/Counter pada Fungsi pewaktu yang dimaksud disini adalah penentuan kapan
mikroprosesor ATMega 8535 ini diatur dengan mengatur program tersebut dijalankan, tidak hanya itu saja fungsi timer
pensettingan atau pemograman beberapa registernya seperti pada yang lainnya adalah PWM, ADC, dan Oscillator. Prinsip kerja
TCCR, TIMSK & TIFR . Pada praktikum ini menggunakan timer dengan cara membagi frekuensi (prescaler) pada clock
simulasi rangkaian LED pada aplikasi proteus 8 dan
pemogramannya melalui Codevision AVR. Terdapat 2 percobaan
yang terdapat pada mikrokontroler sehingga timer dapat
yang akan di lakukan dimana yang pertama yaitu percobaan berjalan sesuai dengan frekuensi yang di kehendaki. Timer
menggunakan 8-bit Timer/Counter0 untuk mengendalikan LED merupakan fungsi waktu yang sumber clocknya berasal dari
dan 16-bit Timer/Counter1 sebagai PWM untuk mengendalikan clock internal. Sedangkan counter merupakan fungsi
kecepatan putar Motor DC. Maka melalui 2 percobaan tersebut perhitungan yang sumber clocknya berasal dari external
hasil yang di dapatkan diharapkan fitur Time/Counter sesuai mikrokontroler. Salah satu contoh penggunaan fungsi timer
dengan pen-settingan pada program dan dapat menjelasankan yaitu pada jam digital yang sumber clocknya bisa menggunakan
mengenai mekanisme eksekusi dari fitur Timer/Counter tersebut. crystal oscillator dan contoh penggunaan counter pada
penghitung barang pada konveyor yang sumber clocknya
Kata Kunci—Timer/Counter, Motor DC, ATMega 8535, berasal dari sensor yang mendeteksi barang tersebut. Pada
Codevision AVR, Proteus 8.
mikrokontroler ATMEGA 8535 memiliki 3 buah timer/counter
yaitu timer/counter0 (8bit), timer/counter1 (16bit), dan
I. PENDAHULUAN
timer/counter2 (8bit). Pada dasarnya Timer/Counter bekerja
Dalam penggunaan seperti aplikasi pengendali suatu proses dengan menghitung pulsa clock. Frekuensi pulsa clock yang
pasti memiliki aspek penting yang perlu diperhatikan salah dihitung tersebut bisa sama dengan frekuensi crystal yang
satunya adalah mengenai timer/counter, dimana biasanya digunakan atau dapat diperlambat menggunakan prescaler
timer/counter ini digunakan sebagai sarana input bagi dengan faktor 8, 64, 256 atau 1024. [1]
mikrokontroler untuk mengukur berbagai hal seperti lebar
pulsa, pengendalian tegangan secara PWM (Pulse Width
Modulation), delay dan lain sebagainya. Pada dasarnya
timer/counter ini merupakan perangkat pencacah/pewaktuan
biner yang saling terhubung satu sama lain ke saluran data yang
ada di mikrokontroler supaya dapat dibaca kedudukan
pencacahnya dan bisa juga untuk merubah kedudukan pencacah
tersebut. Ketika suatu pencacah ini bekerja pada frekuensi yang
berubah-ubah maka dapat disebut bahwa pencacah tersebut
adalah counter yang mana hanya dapta menyatakan banyak
pulsa yang sudah diterima pencacah tersebut.
Adapun tujuan dari percobaan modul ini ialah:

1. Praktikan mampu membuat aplikasi Timer/Counter


pada AVR dengan menggunakan Bahasa pemograman
C. Gambar 1. Pin Fitur Timer/Counter pada ATMega 8535
B. Jenis-jenis Timer/Counter
Adapun jenis-jenis dari Timer/Counter pada ATMega 8535
yaitu :
a. Timer/Counter 0

Timer/Counter 0 merupakan 8 bit timer/counter, pengaturan


Timer/Counter 0 diatur oleh TCCR0 (Timer/Counter control
register 0). Dimana Bit 3-7 digunakan untuk setting PWM dan
Bit 2, 1, 0 (CS02, CS01, CS00) digunakan sebagai pengatur
sumber Clock .

b. Timer/Counter 1

Gambar 3. Diagram Blok Timer/Counter 1 ATMega 8535

Timer/Counter 1 merupakan 16-bit timer/counter sehingga C. Register Timer/Counter


terdapat perbedaan cara pengaksesannya dengan 8-bit Ada beberapa register yang digunakan untuk mensetting fitu
timer/counter. 16-bit (1 word) timer/counter harus diakses Timer/Counter yaitu :
dengan 8 bit high dan 8 bit low. Bit 2, 1, 0 (CS02, CS01, CS00) 1. Timer/ Counter Control Register (TCCRx)
digunakan sebagai pengatur sumber Clock . TCCRx (Timer/Conter Control Register), dimana
prescaler dapat dikonfigurasi disini sekaligus mode operasi
c. Timer/Counter 2 timer. Fungsi register TCCRx adalah sebagai clock selector
dan prescaler, output mode, waveform generation unit, dan
Force Output Compare.
Berikut table control trigger TCCRx :
CSx2 CSx1 CSx0 Deskripsi
Timer/Counter2 adalah 8-bit Timer/Counter, pengaturan
pada Timer/Counter2 diatur oleh TCCR2 (Timer/Counter 0 0 0 Tidak ada sumber clock
Control Register 2). Bit 2, 1, 0 (CS02, CS01, CS00) digunakan 0 0 1 CLK I/O / 1 (tanpa prescaler)
sebagai pengatur sumber Clock . 0 1 0 CLK I/O / 8 (dari prescaler)
0 1 1 CLK I/O / 64 (dari prescaler)
1 0 0 CLK I/O / 256 (dari prescaler)
1 0 1 CLK I/O / 1024 (dari prescaler)
1 1 0 Sumber clock eksternal Falling Edge
1 1 1 Sumber clock eksternal Rising Edge

2. Timer/ Counter Register (TCNT)

TCNTx (Timer/Counter Register), dimana nilai timer


disimpan, merupakan register pencacah mulai dari 0 hingga
nilai maximum. Untuk melakukan setting timer maka kita
tentukan dahulu nilai delay yang kita inginkan lalu bisa kita
dapatkan nilai TCNT. Berikut Rumus TCNT :
Gambar 2. Diagram Blok Timer/Counter 0 ATMega 8535

TCNT : Nilai timer (Hex)


fCLK : Frekuensi clock (crystal) yang digunakan (Hz)
T timer : Waktu timer yang diinginkan (detik)
N : Prescaler (1, 8, 64, 256, 1024)
handling vector. Atau, diberikan logika 1 ke bit flag. Saat bit
1+FFFFh : Nilai max timer adalah FFFFh dan overflow saat i SREG, TOIEx (Timer/Counter x Overflow Interrupt
FFFFh ke 0000h Enable), dan TOVx set, akan terjadi pengeksekusian
Timer/Counter x Overflow Interrupt. Pada mode PWM, bit
3. Status Register (SREG) ini set ketika Timer/Counter x mengubah arah perhitungan
hingga menuju nilai 0x00.

III. METODOLOGI
Pada Register SREG digunakan untuk menyimpan
informasi dan hasil operasi aritmatika terakhir. Data SREG Alat dan Bahan
selalu berubah setiap instruksi atau operasi pad ALU dan • Laptop (1buah)
datanya tidak otomatis tersimpan apabila terjadi instruksi • Software Proteus (1buah)
percabangan baik karena interupsi maupun lompatan. Bit 7 – • Software CV AVR (1buah)
I : Global interrupt enable yang digunakan untuk
mengaktifkan interupsi secara umum (interupsi global). Jika
bit I bernilai ‘1’ maka interupsi secara umum aktif, tetapi jika Langkah Kerja
‘0’ maka tidak satupun interupsi yang aktif.
4. Timer/ Counter Interrupt Mask Register (TIMSK) Percobaan A : Penggunaan 8-bit Timer/Counter0 untuk
Mengendalikan LED.
Siapkan alat dan pengankat yang akan digunakan

Register TIMSK (Timer/Counter Interrupt Mask Buat lah rangkaian pada proteus sesuai yang ada dimodul
Register) adalah register yang berisi bit - bit untuk
mengaktifkan interupsi pada setiap timer. Dimana Bit
OCIEx adalah Output Compare Match Interrupt Enable.
Jika bit tersebut diberi logika 1 dan bit I SREG juga Buatlah pemograman pada CV AVR
berlogika 1, maka bisa dilakukan enable interupsi Output
Compare Match Timer/Counter x. Bit TOIEx adalah
Overflow Interrupt Enable. Jika diberi logika 1 dan bit I
SREG juga berlogika 1, maka bisa dilakukan enable Klik Project + compile + built all program
interupsi Overflow Timer/Counter x. Dan Bit TCIE1:
Timer/Counter 1, Input Capture Interrupt Enable.
Overflow adalah suatu keadaan ketika cacahan telah Tambahkan file .hex yang sudah dibuat di CV + OK + Run
mencapai puncak (0xFF = 255) sesuai dengan range dari rangkaian
timer yang digunakan.

5. Timer/ Counter Interrupt Mask Register (TIFR) Amati keadaan LED

Register TIFR adalah register flag dari setiap interupsi


yang digunakan. Register TIFRernilai 1 (set) jika terjadi
compare match antara Timer/Counter x dan data di OCRx
(Output Compare Register x). OCFx di-clear secara
hardware ketika pengeksekusian corresponding interrupt
handling vector. Atau, jika diberi nilai 1 secara lagsung ke
bit flag. Saat bit I SREG, OCIEx, dan OCFx set (berlogika
1), maka Timer/Counter x Compare Match Interrupt
dieksekusi. Bit TOVx adalah Timer/Counter x Overflow
Flag. Bit ini akan set (bernilai 1) saat terjadi overflow di
Timer/Counter x. TOVx akan clear (bernilai 0) secara
hardware saat pengeksekusian corresponding interrupt
Percobaan B : Menggunakan 3 Interrupt secara bersamaan Berikut untuk ilustrasi LED pada rangkaian :

Buat lah rangkaian pada proteus sesuai yang ada dimodul


˅

Beri input berupa pushbutton + hubungkan pada pin PC0


dan PC1
˅

Buatlah pemograman pada CV AVR


˅

Klik Project + compile + built all program ˅

Tambahkan file .hex yang sudah dibuat di CV + OK + Run ˅


rangkaian

˅
Amati hasilnya + buat Flowchartnya

IV. HASIL DAN ANALISIS


Penjelasan Source Code :
Data Hasil Percobaan
#include <mega8535.h> // Header file ATMega8535
Gambar Rangkaian Percobaan : unsigned char led=0xfe; // Pertukaran byte
void main(void) // Tipe datanya
Percobaan A : Penggunaan 8-bit Timer/Counter 0 untuk {
mengendalikan LED // Please write your application code here
DDRA=0xff; // A sebagai output
Gambar Rangkaian Percobaan A : PORTA=led; // Seluruh port A bernilai LED
TCNT0=0x00; // Mencacah dari nilai 0-255
TCCR0=0x05; // Clock / 1024 dari prescalar
TIMSK=0x01; // Interupsi timer
TIFR=0x00; // Register flag interupsi yang digunakan
#asm ("sei"); // Pengatur SREG=1 atau enable interupsi
while(1) // Dieksekusi berulang-ulang
{PORTA=led;}
}
interrupt [TIM0_OVF] void timer0_overflow(void) //
Inisialisasi dan aktivasi interupsi timer 0, lalu setalh interupsi
digeser ke kanan
{
TCNT0 = 0x00;
led<<=1;
Hasil yang didapatkan : Lampu LED menyala satu per satu led|=1;
secara bergantian, dan terjadi terus berulang-ulang. Waktu if (led==0xff) {led=0xfe;}
pergantian nyala LED sangat cepat karena pengaturan // else {led=0xff;}
clocknya. PORTA=led;
}
Percobaan B : Penggunaan 16-bit Timer/Counter 1 sebagai if (temp==0000) temp=0x0000;
PWM untuk mengendalikan kecepatan putar Motor DC }
if (PINC.1==0) //jika tombol di terhubung dengan PC1
Gambar Rangkaian Percobaan A : { delay_ms(100); // berputar sampai berhenti
temp+=0xFF;
if (temp==00FE) temp=0xFFFF;
}
OCR1A=temp;
};
}

Flowchart Percobaan :

Hasil yang didapatkan :


No Kondisi Deskripsi
1. Awal Motor DC berputar normal
2. PC0 Motor DC berputar lebih lambat dari
Ditekan keadaan normal
dan
ditahan
3. PC1 Motor DC berputar lebih cepat dari
Ditekan keadaan normal
dan
ditahan

Penjelasan Source Code :


#include <mega8535.h>
#include <delay.h>

void main (void)


{
unsigned int temp; Analisa
PORTC = 0x00;
DDRC = 0x00; // C sbg input Pada percobaan pertama yaitu menggunakan 8-bit
PORTD = 0x00; Timer/Counter 0 untuk mengendalikan LED. Hasil yang
DDRD = 0x30; // PD4 & PD5 sbg output didapatkan adalah LED tampak menyala satu per satu secara
TCCR1A = 0x82; // PWM, phase correct bergantian dan berulang-ulang. Hal ini terjadi dapat dilihat dari
TCCR1B = 0x12; // Clock = ( 4 MHz/8 ) settingan program pada register-register yang berkaitan tentang
TCNT1 = 0x0000; // Mencacah dari nilao 0-65535 Timer/Counter0. Dimulai dari pengaturan PORT A sebagai
ICR1H = 0xFF; // Resolusi phase correct PWM 16-bit output dan bentuk outputnya berupa nyala LED, kemudian di
ICR1L = 0xFF; // Resolusi phase correct PWM = {log atur register TCNT0=0x00 untuk mencacah nilai 0 sampai 255,
(TOP+1)}/{log (2)} menyimpan nilai timer yang diinginkan yang mana ketika
// = {log (655335+1)}/{log(2)} register timer sudah mencapai max timernya maka TCNT0 ini
// = 4.8165 / 0.301 akan menghapus isinya lalu LED yang di pasang pada PORT
// = 16 bit C akan bergeser satu digit sampai pada digit ke 8 maka data
OCR1A = 0x0000; LED akan dikembalikan ke posisi awal. Pada register
temp = 0x0FF0; //Nilai Awal PWM TCCR0=0x05 diset Clock/1024 dari prescalar. Kemudian pada
while (1) register TIMSK=0x01 digunakan untuk mengatur interupsi
{ timer yang digunakan, register TIFR=0x00 digunakan untuk
if (PINC.0==0) //jika tombol di terhubung dengan PC0 menandakan register interupsi yang digunakan. Adanya Bahasa
{ delay_ms(100); // berputar sampai berhenti assembly “sei” membuat program ini menjadi enable untuk
temp-=0xFF; melakukan fitur interupsi dan while(1) untuk mengulang-ulang
pengeksekusian secara terus menerus. Yang membuat LED perintah dijalankan (delay), sebagai oscilator,
menyala satu per satu secara bergantian kekanan adalah adanya PWM, ADC, dan lain-lain.
statement interrupt [TIM0_OVF] void timer0_overflow(void) ,
dimana statement ini mengakibatkan program menginisialisasi
interupsi timer0 dan akan mengaktifkan interupsi timer0 VI. REFERENSI
sebelum interupsi mikrokontroller akan menyalakan led,
kemudian setelah interupsi maka led digeser kanan. [1] https://oscarliang.com/arduino-timer-and-interrupt-tutorial/
Pada percobaan kedua yaitu menggunakan 16-bit
Timer/Counter 1 sebagai PWM untuk mengendalikan
[2] TIMER / COUNTER ATMEGA8535 | Lumba-Lumba Putih
kecepatan putar Motor DC. Hasil yang di dapatkan adalah
(wordpress.com)
kecepatan putar Motor DC yang berbeda-beda yaitu saat awal
[3] Timer/Counter 1 Mikrokontroler AVR ATMEGA32 |
putaran tampak dalam keadaan normal, saat PC0 ditekan
Robotics University (robotics-university.com)
putaran tampak lebih melambat dari keadaan normal dan saat
PC1 ditekan putaran tampak lebih cepat dari keadaan normal.
Hal ini disebabkan karena adanya pengaturan pada syntax
program Timer/Counter1. Pada percobaan ini PORTC diatur
sebagai input dan PORTD diberi nilai 0x30 yang mana yang
aktif yaitu PD4 dan PD5 sebagai output. Pada register TCCR1A
diberi nilai 0x82 yang berfungsi bahwasannya program ini
menggunakan sumber clock eksternal yaitu PWM , phase
correct dan pada TCCR1B=0x12 berarti menggunakan
Clock(4MHz/8). Pada TCNT1=0x0000 maka program akan
mencacah nilai 0 sampai 65535, pada ICR1 digunakan untuk
menyimpan output komparator analog dan mendefinisikan nilai
TOP time/counter1 pada mode tertentu. Ketika OCR1 =
TCNT1 pulsa PWM pada pin OC1A dan pin OC1B
dibangkitkan. Ketika nilai PWM awal adalah Temp=
0x00FF0, Motor DC berputar sesuai dengan nilai pada temp.
Namun, saat diberi kondisi if (PINC.0==0) maka PC0 akan
terhubung dengan pushbutton yang mengakibatkan nilai temp-
= 0xFF yakni menjadi temp=0x0000 dimana putaran Motor DC
melambat dari sebelumnya dan berhenti pada temp=0xFF01,
dan saat kondisi if (PINC.1==0) maka PC1 akan terhubung
dengan pushbutton yang mengakibatkan nilai temp+= 0xFF
yakni menjadi temp=0xFFFF dimana putaran Motor DC makin
kencang dari sebelumnya dan mencapai max pada
temp=0x00FE. Pada percobaan ini dieksekusi terus menerus
akibat adanya syntax while(1).

V. SIMPULAN

1. Timer/ Counter pada Mikrokontroler ATMega


8535 ada 3 yaitu Timer/Counter0, Timer/
Counter1, dan Timer/Counter2. Pengoperasia
Timer/Counter adalah dengan mengubah nilai
register yang berhubungan dengan peripheral
timer/counternya , yaitu TCCRx, TCNTx, TIFR
dan TIMSK. Fungsi register TCCRx adalah
sebagai pengatur sumber clock dan prescaler,
output mode, waveform generation unit, dan
Force Output Compare. Fungsi register TCNT
adalah sebagai penyimpan/menghapus isi register
timer atau nilai timer yang diinginkan. Fungsi
register TIMSK adalah untuk menentukan
interupsi timernya dan TIFR adalah untuk
memberi tanda mana interupsi timer yang sedang
digunakan. Fungsi Timer/Counter ini adalah
memudahkan dalam menentukan kapan suatu
Lampiran

Link Video Yotube : https://youtu.be/nc7wgVj0C1w

Kartu Praktikum
BCP

Anda mungkin juga menyukai