Anda di halaman 1dari 24

LAPORAN PRAKTIKUM MICROCONTROLLER dan PLC

TIMER COUNTER

NAMA : GREDYNOV SITANGGANG


NIM : 021900012

Dosen Pembimbing : , Dr. Muhtadan, M.Eng.

PRODI ELEKTRONIKA INSTRUMENTASI


JURUSAN TEKNOFISIKA NUKLIR
POLITEKNIK TEKNOLOGI NUKLIR INDONESIA
BADAN RISET dan INOVASI NASIONAL
YOGYAKARTA
2021/2022
A. Judul.
Timer counter.

B. Tujuan.
1. Mampu memahami fungsi timer/counter dalam mikrokontroler AVR.
2. Mampu mengatur fungsi timer/counter.
3. Mampu membuat program untuk mengendalikan timer/counter serta
untuk aplikasinya.

C. Dasar teori.

Mikrokontroler ATMega8535 memiliki beberapa pre-dimensi


variable (register yang terdapat pada datasheet) dengan fungsi tertentu.
Tiga diantaranya adalah Timer0, Timer1 dan Timer2.

1. Timer0.
Merupakan timer 8 bit jadi dapat menghitung dari 0 sampai dengan
255 yang multi fungsi, fitur-fitur dari Timer0 adalah:
a. Counter 1 kanal.
b. Timer di-nol-kan saat nilai perbandingan tercapai.
c. Sebagai pembangkit gelombang PWM.
d. Sebagai pembangkit frekuensi.

2. Timer1.
Merupakan timer 16 bit jadi dapat menghitung dari 0 sampai
dengan 65535 yang memungkinkan program pewaktu menjadi lebih
akurat, fitur yang ada pada Timer1 antara lain
a. Dua buah unit pembanding
b. Dua buah register pembanding
c. Satu buah input capture unit
d. Dapat menghasilkan gelombang PWM
e. Sebagai pembangkit frekuensi
3. Timer2.
Merupakan timer 8 bit jadi dapat menghitung dari 0 sampai
dengan 255, dengan fitur hampir sama dengan timer0.

Register Timer dan Counter

Masing-masing timer/counter pada ATMega8535/16/32 memiliki


register tertentu yang digunakan untuk mengatur mode dan cara
kerjanya, namun terdapat dua register yang digunakan bersama-sama
oleh ketiga timer/counter tersebut yaitu register TIMSK dan register
TIFR. Selain itu, masing-masing timer/counter memiliki register
tersendiri yang akan dibahas pada subbab berikut.

Register TIMSK

Register Timer/Counter Interrupt Mask (TIMSK) digunakan oleh


ketiga timer ATMega8535 untuk mengaktifkan interupsi. Register ini
memiliki susunan bit seperti pada gambar 1

Gambar 1 Register TIMSK

1. Bit7, Timer/Counter2 Output Compare Match Interrupt Enable


(OCIE2), merupakan bit untuk mengaktifkan interupsi Output
Compare Match (OCM) Timer/Counter2.
2. Bit6, Timer/Counter2 Overflow Interrupt Enable (TOIE2),
merupakan bit untuk mengaktifkan interupsi Overflow
Timer/Counter2.
3. Bit5, Timer/Counter1 Input Capture Interrupt Enable (TICIE1),
merupakan bit untuk mengaktifkan interupsi Input Capture
Timer/Counter1.
4. Bit4, Timer/Counter1 Output Compare A Match Interrupt Enable
(OCIE1A), merupakan bit untuk mengaktifkan interupsi Output
Compare A Match (OCM) Timer/Counter1.
5. Bit3, Timer/Counter1 Output Compare B Match Interrupt Enable
(OCIE1B), merupakan bit untuk mengaktifkan interupsi Output
Compare B Match (OCM) Timer/Counter1.
6. Bit2, Timer/Counter1 Overflow Interrupt Enable (TOIE1),
merupakan bit untuk mengaktifkan interupsi Overflow
Timer/Counter1.
7. Bit1, Timer/Counter0 Output Compare Match Interrupt Enable
(OCIE0), merupakan bit untuk mengaktifkan interupsi Output
Compare Match (OCM) Timer/Counter0.
8. Bit0, Timer/Counter0 Overflow Interrupt Enable (TOIE0),
merupakan bit untuk mengaktifkan interupsi Overflow
Timer/Counter0.

Register TIFR
Register Timer/Counter Interrupt Flag Register (TIFR) memilki
fungsi sebagai penanda, status, atau flag apakah terjadi interupsi atau tidak.
Jika bernilai 1 berarti terjadi interupsi, kemudian program akan melompat
ke vektor interupsi yang sesuai. Susunan dari register TIFR ditunjukkan
pada Gambar 2

Gambar 2 Register TIFR

1. Bit7, Timer/Counter2 Output Compare Match Flag (OCF2),


merupakan flag yang menunjukkan adanya interupsi Output Compare
Match Timer/Counter2.
2. Bit6, Timer/Counter2 Overflow Flag (TOV2), merupakan flag yang
menunjukkan adanya interupsi Overflow Timer/Counter2.
3. Bit5, Timer/Counter1 Input Capture Flag (ICF1), merupakan flag
yang menunjukkan adanya interupsi Input Capture Timer/Counter1.
4. Bit4, Timer/Counter1 Output Compare A Match Flag (OCF1A),
merupakan flag yang menunjukkan adanya interupsi Output Compare
A Match Timer/Counter1.
5. Bit3, Timer/Counter1 Output Compare B Match Flag (OCF1B),
merupakan flag yang menunjukkan adanya interupsi Output Compare
B Match Timer/Counter1.
6. Bit2, Timer/Counter1 Overflow Flag (TOV1), merupakan flag yang
menunjukkan adanya interupsi Overflow Timer/Counter1.
7. Bit1, Timer/Counter0 Output Compare Match Flag (OCF0),
merupakan flag yang menunjukkan adanya interupsi Output Compare
Match Timer/Counter0.
8. Bit0, Timer/Counter0 Overflow Flag (TOV0), merupakan flag yang
menunjukkan adanya interupsi Overflow Timer/Counter0.

Timer/Counter 8 bit (Timer0 dan Timer2)

Timer 8 bit dapat menghitung maksimal hingga 255 (00-FF)


cacahan, dengan periode setiap hitungan (clock) tergantung dari
pengaturan prescaller-nya. Register yang mengatur mode T/C dan
prescaller-nya, digunakan register TCCRx (x adalah 0 atau 2). Contoh
susunan TCCRx yaitu sebagai berikut (contoh untuk TCCR0)

Gambar 3 TCCR0

1. Bit7, Force Output Compare (FOC0), digunakan pada mode non


PWM, jika diset 1 maka pin OC0 akan mengeluarkan sinyal sesuai
yang ditentukan COM01 dan COM00.
2. Bit6 dan Bit 3, Waveform Generation Mode (WGM00 dan
WGM01), digunakan untuk menentukan mode Timer/Counter0,
dengan susunan sesuai Tabel 1

Tabel 1 Mode Timer0 dari konfigurasi WGM00 dan WGM01

TOV0
Timer/Counter
WGM01 WGM00 Update of Flag Set
Mode Mode of TOP
(CTC0) (PWM0) OCR0 on
Operation

0 0 0 Normal 0xFF Immediate MAX


PWM,Phase 0xFF
1 0 1 TOP BOTTOM
Correct
2 1 0 CTC OCR0 Immediate MAX
3 1 1 Fast PWM 0xFF TOP MAX

3. Bit 5 dan 4, Compare Match Output Mode (COM01 dan COM00),


digunakan untuk mengatur keluaran dari pin OC0. Pengaturan
COM01 dan COM00 ini berbeda untuk tiap modenya, yaitu sesuai
dengan Tabel 2, Tabel 3 dan Tabel 4.

Tabel 2 Bentuk keluaran OC0 pada Mode Non-PWM


COM01 COM00 Fungsi
0 0 Operasi normal, OC0 tidak terhubung pin
0 1 Kondisi toggle jika TCNT0=OCR0
1 0 Bernilai 0 setelah TCNT0=OCR0
1 1 Bernilai 1 setelah TCNT0-OCR0

Tabel 3 Bentuk keluaran OC0 pada Mode Fast PWM


COM01 COM00 Fungsi
0 0 Operasi normal, OC0 tidak terhubung pin
0 1 Tidak digunakan
Bernilai 0 setelah TCNT0=OCR0 dan bernilai 1 saat
1 0
TOP (puncak)
Bernilai 1 setelah TCNT0-OCR0, dan bernilai 0 saat
1 1
TOP (puncak)

Tabel 4 Bentuk keluaran OC0 pada Mode Phase Correct PWM


COM01 COM00 Fungsi
Operasi normal, OC0 tidak
0 0
terhubung pin
0 1 Tidak digunakan
Bernilai 0 setelah TCNT0=OCR0 saat mencacah
1 0 naik, dan bernilai 1 setelah TCNT0=OCR0 saat
mencacah turun
Bernilai 1 setelah TCNT0=OCR0 saat mencacah
1 1 naik, dan bernilai 0 setelah TCNT0=OCR0 saat
mencacah turun

4. Bit2, 1, dan 0, Clock Select, merupakan kombinasi bit untuk


mengatur prescale dengan susunan sesuai Tabel 5.
Tabel 5 Fungsi kombinasi bit CS00:2
CS02 CS01 CS00 Fungsi
Tidak ada clock, timer/counter
0 0 0
berhenti
0 0 1 Prescale = 1
0 1 0 Prescale = 8
0 1 1 Prescale = 64
1 0 0 Prescale = 256
1 0 1 Prescale = 1024
Sumber clock eksternal pada pin T0, clock
1 1 0
pada transisi turun (falling edge)
Sumber clock eksternal pada pin T0, clock
1 1 1
pada transisi naik (rising edge)

Register pada T/C 8 bit selain TCCRx adalah sebagai berikut

1. Timer/CounterX Register (TCNTx)


Register TCNTx berfungsi untuk menyimpan data cacahan
Timer/Counterx. Register ini memiliki ukuran 8-bit sehingga
maksimal nilai cacahan adalah 0xFF atau 255.
2. Output Compare Register x (OCR0).
Register OCRx berfungsi sebagai data pembanding yang akan
selalu dibandingkan dengan isi register TCNT0. Jika nilai TCNTx
sama dengan nilai OCRx maka akan

terjadi keluaran pada pin OCx sesuai dengan mode yang telah ditentukan
di register TCCRx.

Timer Counter 16 bit (Timer1)

Timer1 sebagai T/C 16 bit, memiliki nilai maksimum cacahan


sebanyak 65536 cacahan atau 0x0000 – 0xFFFF. Register yang berkaitan
dengan Timer1 yaitu TCCR1A, TCCR1B, TCNT1H, TCNT1L, OCR1AH,
OCR1AL, OCR1BH, OCR1BL

1. Timer/Counter1 Control Register A (TCCR1A)


TCCR1A memiliki susunan seperti pada Gambar 4.
Gambar 4 TCCR1A

a. Bit 7:6 merupakan COM1A1:0, dan bit 5:4 COM1B1:0,


berfungsi untuk mengatur pola keluaran pada pin OC1A dan
OC1B seperti ditunjukkan pada Tabel 6, Tabel 7, dan Tabel 8.
Tabel 6 Bentuk keluaran OC1A/OC1B pada Mode Non-PWM
COM1A1/ COM1A0/
Fungsi
COM1B1 COM1B0
0 0 Operasi normal, OC1A/OC1B tidak terhubung pin
0 1 Kondisi toggle jika TCNT1=OCR1A/OCR1B
1 0 Bernilai 0 setelah TCNT1=OCR1A/OCR1B
1 1 Bernilai 1 setelah TCNT1=OCR1A/OCR1B

Tabel 7 Bentuk keluaran OC1A/OC1B pada Mode Fast-PWM


COM1A1/ COM1A0/
Fungsi
COM1B1 COM1B0
0 0 Operasi normal, OC1A/OC1B tidak terhubung pin
 Jika WGM13:0=15, OC1A toggle pada saat
TCNT1=OCR1A dan OC1B sebagai port
0 1 I/O
 WGM yang lain, OC1A/OC1B sebagai port
I/O
Bernilai 0 setelah TCNT1=OCR1A/OCR1B dan
1 0
bernilai 1 setelah mencapai TOP
Bernilai 1 setelah TCNT1=OCR1A/OCR1B dan
1 1
bernilai 0 setelah mencapai TOP

Tabel 8 Bentuk keluaran OC1A/OC1B pada Mode Phase Correct-PWM


COM1A1/ COM1A0/
Fungsi
COM1B1 COM1B0
0 0 Operasi normal, OC1A/OC1B tidak terhubung pin
 Jika WGM13:0=9 atau 14, OC1A toggle
pada saat TCNT1=OCR1A dan OC1B
0 1 sebagai port I/O
 WGM yang lain, OC1A/OC1B sebagai port
I/O
Bernilai 0 setelah TCNT1=OCR1A/OCR1B saat
1 0 mencacah naik dan bernilai 1 setelah
TCNT1=OCR1A/OCR1B saat mencacah turun
Bernilai 1 setelah TCNT1=OCR1A/OCR1B saat
1 1 mencacah naik dan bernilai 0 setelah
TCNT1=OCR1A/OCR1B saat mencacah turun

b. Bit3 adalah Force Output Compare for Channel A (FOC1A), dan


Bit 2 adalah Force Output Compare for Channel B (FOC1B),
digunakan pada mode Non-PWM. Jika FOC1A diset 1, maka
pin OC1A akan dipaksa menghasilkan sinyal sesuai
pengaturan pada COM1A1:0. Demikian pula jika FOC1B diset
1, maka pin OC1B akan dipaksa mengeluarkan sinyal sesuai
pengaturan pada COM1B1:0.
c. Bit1:0, Waveform Generation Mode (WGM11 dan
WGM10). Kedua bit ini bersama-sama dengan WGM13 dan
WGM12 pada register TCCR1B menentukan mode
pembangkitan runtun Timer/Counter1. Fungsi WGM10:13
ditunjukkan pada Tabel. 9

Tabel 9 Deskripsi Waveform Generation Mode (WGM)


2. Timer/Counter1 Control Register B (TCCR1B)

Gambar 5 TCCR1B

a. Bit 7, Input Capture Noise Canceler (ICNC1), merupakan bit


untuk mengaktifkan filter pada pin ICP1. Jika ICNC1 diset 1,
berarti filter pada ICP1 diaktifkan.
b. Bit 6, Input Capture Edge Select (ICES1), merupakan bit untuk
mengatur pemicu kejadian input capture. Jika ICES1 bernilai
0, maka input capture terpicu oleh transisi turun (falling edge)
pada pin ICP1, sedangkan jika bernilai 1, maka input capture
terpicu oleh transisi naik (rising edge)pada ICP1.
c. Bit 5 tidak digunakan
d. Bit 4:3, WGM13:12, digunakan bersama-sama dengan
WGM11:WGM10. Lihat Tabel 9.
e. Bit 2:0, Clock Select (CS12:0), merupakan bit untuk mengatur
prescale yang akan digunakan oleh Timer/Counter1 dimana
penggunaannya sama dengan CS02:0 pada Tabel 5.

3. Timer/Counter Register 1 (TCNT1H dan TCNT1L)

Register TCNT1H dan TCNT1L merupakan register untuk


menyimpan data cacahan Timer/Counter1. TCNT1H (High)
merupakan MSB dari 16 bit, dan TCNT1L (Low) sebagai LSB dari
16 bit. Gabungan keduanya mampu menyimpan hingga 65535
cacahan.

4. Output Compare Register 1 A (OCR1AH dan OCR1AL)

Gabungan kedua register ini sering disebut dengan OCR1A


yang berfungsi untuk menyimpan data pembanding 16 bit yang
selalu dibandingkan dengan register TCNT1.

5. Output Compare Register 1 B (OCR1BH dan OCR1BL)


Gabungan kedua register ini sering disebut dengan OCR1B
yang berfungsi untuk menyimpan data pembanding 16 bit yang
selalu dibandingkan dengan register TCNT1.
6. Input Capture Register 1 (ICR1H dan ICR1L)
Register ini digunakan untuk mengukur rentang waktu
sebuah kejadian. Dengan input capture dapat diukur frekuensi dan
duty cycle suatu sinyal.

Prescaler
Pada dasarnya Timer hanya menghitung pulsa clock. Frekuensi
pulsa clock yang dihitung bisa sama dengan frekuensi kristal atau dapat
diperlambat menggunakan prescaler dengan faktor 8, 64, 256, 1024.

Misal suatu AVR dengan kristal 8 MHz, timer yang digunakan


adalah Timer1 16 bit, maka maksimum waktu yang dihasilkan adalah

Tmax = 1⁄fclock × (FFFFh + 1)


= 0,125 µ𝑠 × 65536
= 0,00819 𝑠
Untuk menghasilkan waktu yang lebih lama, dapat digunakan prescaler
misal yang digunakan 1024 maka waktu maksimum yang dihasilkan timer
adalah

Tmax = 1⁄fclock × (FFFFh + 1) × N


= 0,125 µ𝑠 × 65536 × 1024
= 8,3886 𝑠

Perhitungan Waktu Timer

𝑇𝑡𝑖𝑚𝑒𝑟 × 𝑓𝑐𝑙𝑜𝑐𝑘 Eq 1
𝑇𝐶𝑁𝑇 = (1 + FFFFH) − ( )
𝑁
Keterangan
TCNT : Nilai timer (Hex/Dec)
fclock : frekuensi kristal (Hz)
Ttimer : waktu yang diinginkan (detik)
N : prescaler (1, 8, 64, 256, 1024)
1+FFFFh : Nilai maksimum timer 16 bit adalah FFFFh atau 8 bit
adalah FFh dan saat overflow.

D. Peralatan.
1. Software proteus
2. Software CodeVision AVR

E. Langkah kerja.
1. Membuka lembar kerja simulator proteus, beri nama proyek
“Program1AVR” atau bisa nama yang lain.
2. Menghubungkan salah satu port dengan display led.
3. Menghubungkan switch kedalam pin T0, T1, dan T2.
4. Membuat program dibawah dengan CodeVision AVR, kemudian
download dan amati hasilnya.
Program 1
/*membuat timer dengan TC0, fc=8Mhz
*/
#include <mega16.h>
#include <delay.h>
unsigned char lamp=0xCC;
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=0X00; //set nilai T/C0
lamp=~lamp;
PORTB=lamp;
}
void main(void)
{
DDRB=0XFF; //PortD sebagai keluaran
PORTB=lamp; //data led dikeluarkan pada Port D
TCNT0=0X00; //Set nilai awal T/C0
TCCR0=0X05; //Set skala clock 1024
TIMSK=0X01; //Aktifkan interupt timer0
TIFR=0X00; //Hapus bendera interupt timer0
#asm("sei") //aktifkan interupsi global
while(1)
{
};
}

Program 2 : Timer untuk membuat delay 1 detik


/*membuat timer dengan TC0, fc=8Mhz
untuk delay 1 detik
*/
#include <mega16.h>
#include <delay.h>
unsigned char lamp=0xCC;
unsigned char count=0;
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=0X64; //set nilai T/C0
count++;
if (count==50)
{
lamp=~lamp;
PORTB=lamp;
count=0;
}
}
void main(void)
{
DDRB=0XFF; //PortD sebagai keluaran
PORTB=lamp; //data led dikeluarkan pada Port D
TCNT0=0X64; //Set nilai awal T/C0
TCCR0=0X05; //Set skala clock 1024
TIMSK=0X01; //Aktifkan oscillosc timer0
TIFR=0X00; //Hapus bendera oscillosc timer0
#asm(“sei”) //aktifkan interupsi global
while(1)
{
};
}

Program 3 : Membuat counter mode FAST PWM dengan TC 1


/*program timer mode fast PWM dengan TC0
fc=8Mhz
membuat sinyal PWM. Amati keluaran 0C0 dengan diaplikasikan pada led
*/
#include <mega8535.h>
#include <delay.h>

void main(void)
{
DDRB=0XFF; //PortB out, karena OC0 ada di sini
PORTB=0xFF;
TCCR0=0X6A; //configurasi fast pwm prescaler 8 bit
TCNT0=0; //set nilai awal tcnt1
OCR0=127; //set nilai OCR1A
while(1)
{
unsigned char A;
for(A=0;A<255;A++)
{
OCR0=A;
delay_ms(40);
};
};
}

Program 4 : Membuat counter dari TC0


/*
Program counter dengan TC0, fc=8Mhz
*/
#include <mega16.h>
#include <delay.h>
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
unsigned char i;
TCNT0=0XF6;
for(i=1;i<6;i++)
{
PORTD=0X0F;
delay_ms(500);
PORTD=0XF0;
delay_ms(500);
};
PORTD=0XFF;
}

void main(void)
{
DDRB=0X00;
PORTB=0XFF;
DDRD=0XFF;
PORTD=0XFF;
TCCR0=0X07; //T0 clock eksternal
TCNT0=0XF6;
TIMSK=0X01; //T0 interupt overflow
#asm("sei")
while(1)
{
PORTD=~TCNT0;
};
}
F. Hasil percobaan
Program 1

Gambar 6 rangkaian simulasi program 1

(a) (b)
Gambar 7 hasil simulasi program 1 (a)ketika on (b)ketika off
Program 2

Gambar 8 rangkaian simulasi program 2

(a) (b)
Gambar 9 hasil simulasi program 2 (a)ketika on (b)ketika off
Program 3

Gambar 10 rangkaian simulasi program 3

Gambar 11 hasil simulasi program 2


Program 4

Gambar 12 rangkaian simulasi program 4

(a) (b)
Gambar 13 hasil simulasi program 4 (a)ketika on (b)ketika off
G. Pembahasan
Pada program 1 , didalam program ini membuat timer dengan TC0
, diamana pada port B digunakan sebagai keluaran sehingga port ini
digunkaan unutk keluaran data led.,register TIMSK bertugas unutk
mengatifkan interupsi timer0 , register TCCR me-set skala clock yang
digunakan sebesar 1024 , register TCNT di set awal ,yang menandakan
bahwa register ini telah siap unutk diisi dan refgister TIFR menghapus flasg
interrupt timer0. Pada hasil simulasi , lampu led berkedip dengan cepat

Pada program 2, didalam program ini membuat timer dengan TC0


untuk delay 1 detik , ssmaa seperti sebelumnya dimana pada program ini
menggunakna interupsi. Disini terjadi proses looping pada char count
dimana set awal count adalah bernilai 0 , kemudian pada interrupsi terjadi
looping Dimana terdapat penambahan count hingga nilai 50 ketik anilia
telah memenuhi maka lampu akan dibalik dan portB akan menyalakan
lampu. Di program in Port B digunkan sebagia keluaran lampu, namuun
unutk register TIMSK digunakan sebagia pengaktifasi oscillator timer0

Pada program 3, pada program ini portB digunakna sebgaia output ,


register TCCR0 mengkonfigurasi fast PM dengan prescaler 8 bit serta
dengan set nilai OCRIA sebesar 127. Disini terdapat perulaan atau looping
dimana ketika char A sama dengan 0 dan A<255 , maka akan terjadi
pnambhana seiring dengan wakti penambahan selama 40 ms , penambahan
in akan memengaruhi tampilan grafik pada osiloskop, dimana gelombang
yang dihasilkan lebarnya semakin besar dan setelah mencapai batas akan
kembali lagi seperti semula

Pada program 4 (Counter dari TC0), TCNT adalah register yang


digunakan untuk set nilai awal (F6 atau 11110110) sehingga nilai awalnya
adalah 246. TCCR 0x07 sehingga memiliki bilangan biner 00000111. Nilai
WGM0 nya 0 dan WGM1nya 0 maka modenya adalah normal. Untuk
COM01 dan COM00, sama sama bernilai 0 maka memiliki fungsi operasi
normal, OC0 tidak terhubung pin. Untuk CS02, CS01, CS00, masing
masing memiliki nilai 1 1 1, memiliki fungsi sumber clock eksternal pada
pin T0, clock pada transisi naik (rising edge).

H. Kesimpulan
 Praktikan mampu memahami fungsi timer/counter dalam
mikrokontroler AVR
 Praktikan mampu mengatur fungsi timer/counter
 Praktikan mampu membuat program untuk mengendalikan
timer/counter serta untuk aplikasinya.
I. Daftar pustaka
Dr. Muhtadan, M.Eng.2021. Petunjuk Praktikum Mikrokontroler – Timer
dan Counter.Yogyakarta.: PTNI-BRIN

J. Lampiran.
https://youtu.be/RQ7S5xIqq0c (link hasil simulasi praktikum timer
counter )

Anda mungkin juga menyukai