MAKALAH
“Timer atau Counter 0 dan 1”
Oleh : Rizky Dwi N (1431110061 ) Satrio Teguh Yulianto (1431110023)
D3 TEKNIK ELEKTRO – JURUSAN TEKNIK ELEKTRO POLITEKNIK NEGERI MALANG TAHUN 2015/2016
i
KATA PENGANTAR Puji syukur saya ucapkan kehadirat Tuhan Yang Maha Esa, karena dengan karuniaNya saya dapat menyelesaiakan makalah yang berjudul “Timer atau Counter 0 dan 1”. Meskipun banyak hambatan yang saya alami dalam proses pengerjaannya, tapi saya berhasil menyelesaikan makalah ini tepat pada waktunya. Makalah dengan judul “Timer atau Counter 0 dan 1” menjelaskan tentang Timer /Counter sebagai suatu peripheral yang tertanam didalam microcontroller yang berfungsi pewaktu. Dengan peripheral ini pengguna microcontroller dapat dengan mudah menentukan kapan suatu perintah dijalankan (delay), tentu saja fungsi timer tidak hanya untuk penundaan perintah saja, timer juga dapat berfungsi sebagai oscilator, PWM, ADC, dan lain-lain. Dengan Timer/Counter tersebut diharapkan dapat membantu dan memudahkan pekerjaan manuisa. Tidak lupa saya sampaikan terimakasih kepada dosen pembimbing yang telah membantu dan membimbing saya dalam mengerjakan makalah ini. Saya juga mengucapkan terimakasih kepada teman-teman yang sudah memberi kontribusi baik langsung maupun tidak langsung dalam pembuatan makalah ini. Tentunya ada hal-hal yang ingin saya berikan kepada masyarakat dari hasil makalah ini. Karena itu saya berharap semoga makalah ini dapat menjadi sesuatu yang berguna bagi kita bersama. Saya menyadari bahwa dalam menyusun makalah ini masih jauh dari kesempurnaan, untuk itu saya sangat mengharapkan kritik dan saran yang bersifat membangun guna sempurnanya makalah ini. Saya berharap semoga makalah ini bisa bermanfaat bagi penulis khususnya dan bagi pembaca pada umumnya. Malang, 06 April 2016
Penulis
ii
DAFTAR ISI
Contents KATA PENGANTAR.................................................................................................................ii DAFTAR ISI.............................................................................................................................iii BAB I.........................................................................................................................................1 PENDAHULUAN......................................................................................................................1 1.1 Latar Belakang.................................................................................................................1 1.2 Rumusan Masalah............................................................................................................2 1.3Tujuan................................................................................................................................2 BAB II........................................................................................................................................3 PEMBAHASAN........................................................................................................................3 2.1 PENGERTIAN TIMER/COUNTER................................................................................3 2.2 Contoh Mikrokontroler untuk Timer/Counter..................................................................4 2.3 CONTOH SEDERHANA PROGRAM TIMER............................................................10 BAB III.....................................................................................................................................14 PENUTUP................................................................................................................................14 3.1 Kesimpulan....................................................................................................................14 3.2 Saran...............................................................................................................................14 DAFTAR PUSTAKA...............................................................................................................15
Contents
iii
BAB I PENDAHULUAN 1.1 Latar Belakang Timer /Counter adalah suatu peripheral yang tertanam didalam microcontroller yang berfungsi pewaktu. Dengan peripheral ini pengguna microcontroller dapat dengan mudah menentukan kapan suatu perintah dijalankan (delay), tentu saja fungsi timer tidak hanya untuk penundaan perintah saja, timer juga dapat berfungsi sebagai oscilator, PWM, ADC, dan lain-lain. Cara kerja timer adalah dengan cara memberikan prescaling (membagi frekuensi) pada clock yang terpasang pada microcontroller sehingga timer dapat berjalan dengan frekuensi yang diinginkan. Dalam contoh microcontroller yang saya bahas disini saya hanya menggunakan microcontroller Atmel-AVR ATmega16 karena hanya microcontroller jenis ini yang saya punya. Didalam ATmega16 dan beberapa microcontroller AVR lainnya sudah terdapat 3 buah timer, yaitu TIMER0 (8 bit), TIMER1 (16 bit)dan TIMER2 (8 bit). Perbedaan timer yang 8 bit dan timer 16 terdapat pada maksimal waktu yang dapat dijangkau, semakin besar bit suatu timer semakin besar waktu yang dapat dicapai. Sebagai contoh TIMER1 yang memiliki kapasitas hingga 16 bit dapat menjangkau waktu hingga 67 detik lebih pada clock 1MHz berbeda dengan TIMER0 dan 2 yang memiliki kapasitas hanya 8 bit sehingga hanya dapat menjangkau maksimal 0,2 detik pada clock 1MHz namun ini bukan merupakan kekurangan. Timer dioperasikan dengan mengubah nilai register yang berhubungan dengan peripheral timer, yaitu TCCRx, TCNTx, dan TIMSK. Fungsi register TCCRx adalah sebagai clock selector dan prescaler, output mode, waveform generation unit, dan Force Output Compare. Fungsi register TCNT adalah sebagai penyimpan nilai timer yang diinginkan. Fungsi register TIMSK adalah untuk menentukan timer mana yang akan kita gunakan apakah TIMER0, TIMER1,atau TIMER2.
1
1.2 Rumusan Masalah 1.1.1 Apakah yang dimaksud dengan Timer/ Counter ? 1.1.2 Apakah contoh Mikrokontroler untuk Timer/Counter? 1.1.3 Bagaimanakah contoh Program sederhana dari Timer/Counter?
1.3Tujuan 1.1.4 Mahasiswa dapat mengetahui apa yang dimaksud dengan Timer/Counter 1.1.5 Mahasiswa dapat megetahui contoh Mikrokontroler untuk Timer/Counter 1.1.6 Mahasiswa dapat mengetahui contoh Program sederhana dari Timer/Counter
2
BAB II PEMBAHASAN
2.1 PENGERTIAN TIMER/COUNTER Pada dasarnya, Timer/Counter merupakan seperangkat pencacah (counter) biner yang terhubung langsung ke saluran data mikrokontroler, sehingga mikrokontroler
bisa
membaca
kondisi
pencacah
dan
bila
diperlukan
mikrokontroler dapat pula merubah kondisi pencacah tersebut. Seperti layaknya pencacah biner, saat sinyal detak (clock) yang diberikan sudah melebihi kapasitas pencacah, maka pencacah akan memberikan sinyal overflow atau limpahan. Sinyal overflow ini merupakan suatu hal yang penting dalam pemakaian Timer/Counter. Terjadinya overflow ini akan dicatat dalam suatu register tertentu. Konsep dasar Timer/Counter ditampilkan dalam bentuk blok diagram di bawah ini:
Membaca Kedudukan Pencacah
Sumber Detak yang Bisa Diatur
Pencacah Biner
Overflow Pencacah
Merubah Kedudukan Pencacah
Gambar 8.1. Konsep Kerja Timer/Counter Sinyal detak yang diberikan ke pencacah dibedakan menjadi dua macam, yaitu sinyal detak dengan frekuensi tetap yang sudah diketahui besarnya dan sinyal detak dengan frekuensi yang bisa bervariasi. Jika sebuah pencacah bekerja dengan frekuensi tetap, maka dikatakan pencacah tersebut bekerja sebagai Timer
3
atau pewaktu, karena kondisi pencacah tersebut setara dengan waktu yang bisa ditentukan secara pasti. Sedangkan jika sebuah pencacah bekerja dengan frekuensi yang bervariasi, dikatakan pencacah tersebut bekerja sebagai Counter atau pencacah, karena kondisi pencacah tersebut menyatakan banyaknya pulsa detak yang sudah diterima. Untai kedua pencacah tersebut merupakan pencacah biner naik (count up binary counter). 2.2 Contoh Mikrokontroler untuk Timer/Counter Mikrokontroler 8051 dilengkapi dengan dua perangkat Timer/Counter, yaitu Timer0 dan Timer1. Untuk dapat mengakses Timer/Counter digunakan register-register khusus yang tersimpan dalam Special Function Register (SFR). Register-register tersebut adalah TMOD, TCON, TH1, TL1, TH0 dan TL0. Register TH1, TL1, TH0 dan TL0 merupakan SFR yang dipakai untuk membentuk pencacah biner Timer1 dan Timer0. Kapasitas keempat register tersebut masing-masing 8 bit dan bisa disusun menjadi 4 (empat) macam mode pencacah yang akan dijelaskan kemudian. Sedangkan TMOD adalah register untuk menentukan kerja dari Timer0 atau Timer1. Susunan register TMOD adalah sebagai berikut: TMOD: TIMER/COUNTER MODE CONTROL REGISTER. NOT BIT ADDRESSABLE.
Gambar 8.2. Register TMOD Nibble atau 4-bit kiri digunakan untuk setting Timer atau Counter 1 sedangkan Nibble atau 4-bit kanan digunakan untuk Timer atau Counter 0. Keterangan masing-masing bit adalah sebagai berikut, GATE
: Bit ini dipakai untuk menentukan kendali ON/OFF timer. Jika bit ini LOW, maka kendali dilakukan secara software atau program, 4
Timer1 akan ON selama bit TR1 pada Register TCON bernilai HIGH. Tetapi jika bit ini HIGH, berarti ON/OFF Timer atau Counter bergantung pada kondisi pin INT, Timer 1 akan ON selama pin INT1 bernilai HIGH. C/T
: Bit ini dipakai untuk menentukan jenis operasi. Jika bit ini HIGH, berarti alat ini digunakan sebagai Counter, tetapi jika bit ini LOW, alat ini digunakan sebagai Timer.
M1 M0
: Adalah pasangan bit untuk menentukan 1 dari 4 mode operasi. Kombinasi
M1M0
akan
menentukan
mode
operasi
Timer/Counter. Mode dan kombinasi M1M0J diperlihatkan pada Tabel 8.1 di bawah ini. Tabel 8.1. Mode Timer/Counter MODE 0 1 2 3
M1 M0 00 01 10 11
NAMA Timer 13 bit Timer 16 bit Timer Isi Ulang 8 bit Timer Split
MAKSIMUM 8,192 pulsa 65,536 pulsa 256 pulsa -
Jika pasangan ini bernilai 00 berarti Timer/Counter bekerja pada mode 0 dengan kapasitas maksimum 13-bit atau 8192 pulsa. Jika M1M0 = 01 atau mode 1, maka kapasitas maksimumnya 16-bit atau 65536 pulsa. Sedangkan Mode 2 merupakan mode auto reload atau isi ulang dengan kapasitas 8-bit atau 256 pulsa. Pada mode 2 ini, selama Timerx running, isi register TLx terus bertambah. Jika TLx overflow, maka TFx aktif dan TLx diisi ulang dengan data yang berada pada THx. Register lain yang berhubungan dengan kerja Timer/Counter adalah register TCON. Register ini berisi bit-bit kendali untuk mengatur kerja Timer/Counter. Berikut ini susunan register TCON. TCON: TIMER/COUNTER CONTROL REGISTER. BIT ADDRESSABLE. TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
Gambar 8.3. Register TCON
5
Bit TF1 dan TR1 untuk mengendalikan Timer/Counter1 sedangkan bit TF0 dan TR0 digunakan untuke mengatur Timer/Counter0. Bit TFx atau Timer Flag overflow adalah bit indikator terjadinya overflow atau meluap pada Timer/Counter x. Jika terjadi overflow bit ini menjadi HIGH. Bit ini dikembalikan ke kondisi LOW dengan 2 cara, yaitu software atau hardware. Secara software bit ini dapat dikembalikan ke LOW dengan instruksi CLR TFx, sedangkan secara hardware, bit ini akan dikembalikan ke LOW setelah pengambilan alamat interupsi dari interrupt vector, tentu saja cara hardware ini harus melibatkan operasi interupsi. Sedangkan bit TRx adalah pengendali gerbang masuk pulsa, jika TRx HIGH maka pulsa diizinkan masuk pencacah. Sejak saat ini, pencacah akan mulai menghitung cacahannya, baik sebagai Timer atau Counter. Bit-bit yang lain dari register TCON ini akan dibahas pada modul berikutnya mengenai Interrupt. Misalnya jika diinginkan untuk menggunakan Timer/Counter 0 sebagai Timer 16-bit. Maka bit-bit setting yang kita berikan untuk TMOD adalah data biner “xxxx 0001”. Tanda x atau don’t care berarti bahwa bit-bit tersebut tidak terkait dengan Timer/Counter 0. Bit ke-3 berisi 0 yang berarti pencacah menggunakan detak awal dari program, bukan dari eksternal input. Bit ke-2 diisi 0 yang maksudnya operasi yang dilakukan adalah Timer. Sedangkan bit ke-1 dan ke-0 atau M1M0 berisi 01, yang berarti pengaturan Timer menggunakan Mode 1 dengan pencacah 16 bit. Gambar di bawah ini adalah diagram operasi Timer 16bit dari pengaturan yang telah dilakukan.
Gambar 8.4. Diagram operasi Timer 16-bit.
6
Sebelum penjelasan diagram tersebut, perhatikanlah ilustrasi berikut ini. Bayangkan sebuah odometer pada kendaraan bermotor. Odometer ini berukuran 6 digit dengan digit paling kanan berupa kelipatan 100 meter. Tulisan 002341 pada odometer ini menandakan bahwa kendaraan tersebut telah berjalan sejauh 234,1 km sejak angka pada odometer di-set 000000. Jika kendaraan terus bergerak konstan dengan kecepatan 100 m/s, maka angka pada odometer akan bertambah satu setiap detik. Hal ini akan berlanjut terus sampai odometer mencapai angka 999999, kemudian 000000. Peralihan dari bilangan 999999 ke 000000 disebut keadaan overflow atau meluap. Jika kendaraan bergerak konstan, maka perubahan display odometer akan berlangsung teratur, sehingga kita dapat menggunakannya sebagai Timer atau stopwatch. Misalkan pada saat start, display odometer menunjukkan angka 996400. Maka pada saat overflow kendaraan tersebut telah berjalan sejauh 360 km atau 3600 detik. Prinsip kerja Timer digital mirip dengan cara kerja odometer, sehingga kita dapat menggunakan analogi odometer dengan Timer Digital. Angka yang tertera pada display odometer dapat dianalogikan dengan angka yang berada pada pasangan register TH dan TL. Bertambahnya angka pada display odometer disebabkan oleh bergeraknya kendaraan, sedangkan bertambahnya isi THx TLx disebabkan oleh bit TRx. Jika TRx HIGH, maka pasangan register THx TLx akan bertambah setiap satu siklus mesin, 12 kali periode kristal. Jika prosesor menggunakan kristal 12 MHz, maka selama TRx HIGH, isi pasangan register THx TLx akan bertambah 1 setiap 1 s. Jika keadaan ini berlangsung terus, maka suatu saat pasangan THx TLx akan mengalami overflow, pada saat itu bit TFx akan menjadi HIGH. Contoh berikut ini menggambarkan prinsip pemrograman Timer/Counter. Jika diinginkan Timer 0 sebagai stopwatch durasi 10 ms, maka telah dirancang program yang ditulis dengan nama file timer1.asm. Kemudian, hasil listingnya berupa file timer1.lst adalah sebagai berikut: ASEM-51 V1.3
Copyright (c) 2002 by W.W. Heinz
PAGE 1
7
MCS-51 Family Macro Assembler A S E M - 5 1 V 1.3 ===================================================== Line I Addr Code
Source
1:
$MOD51
2:
ORG 0H
3:
0000 75 89 11
MOV TMOD,#00010001B
;Pengaturan
Timer 4:
0003 C2 8C
5:
0005 75 8C D8
CLR TR0
;Timer0 Off
MOV TH0,#0D8H
;Pengaturan
MOV TL0,#0F0H
;10000
TH0 dan TL0 6:
0008 75 8A F0
pulsa
sebelum overflow 7:
000B D2 8C
8:
000D 30 8D FD
SETB TR0
;Timer0 On
JNB TF0,$
;Tunggu
sampai
pencacah overflow 9:
0010 C2 8D
CLR TF0
;Nonaktifkan kembali
Timer0 10: 11:
END Pada program diatas, baris ke-3 merupakan pengaturan Timer pada register
TMOD1. Pada pengaturan tersebut, ditentukan menggunakan Timer0, detak pencacah dari program dan menggunakan Mode 1. Kemudian, untuk memastikan bahwa Timer belum bekerja, harga TR0 pada register TCON direset ke 0, sebagaimana tertulis pada baris ke-4. Baris ke-5 dan ke-6 menentukan harga -10000 (10000 pulsa sebelum overflow). Nilai -10000 desimal diubah terlebih dahulu ke heksadesimal, menjadi D8F0H. Kemudian nilai ini dibagi ke dalam dua lokasi, D8H disimpan ke lokasi memori tinggi (TH0) dan F0H disimpan ke lokasi memori rendah (TL0). Setelah itu, pencacahan dimulai
8
dengan menset harga TR0 menjadi 1, seperti tercantum pada baris ke-7. Pada saat ini, pencacahan telah dimulai. Program loop ke diri sendiri dibuat pada baris ke-8 untuk menunggu sehingga pencacahan mencapai overflow. Ketika telah mencapai overflow, Timer Flag (TF) dinonaktifkan kembali. Secara keseluruhan, program ini akan menghasilkan sebuah timer selama 10000 pulsa (atau setara dengan 10 ms). Program diatas, mengharuskan programmer menghitung nilai negatif dari rencana pencacahan dalam bilangan terlebih dahulu. Hal ini tentu saja merepotkan. Maka, kemudian assembler ASM51 memberikan jalan yang lebih mudah. Yaitu dengan melakukan pengisian TH dan TL langsung dengan bilangan desimalnya. Dengan cara ini, program diatas ditulis kembali menjadi file timer2.asm. Kemudian listing programnya, timer2.lst, adalah sebagai berikut: ASEM-51 V1.3
Copyright (c) 2002 by W.W. Heinz
PAGE 1 MCS-51 Family Macro Assembler A S E M - 5 1 V 1.3 ===================================================== Line I Addr Code
Source
1:
$MOD51
2:
ORG 0H
3:
0000 75 89 11
MOV TMOD,#00010001B ;Pengaturan
Timer 4:
0003 C2 8C
5:
0005 85 D8 8C
CLR
TR0
;Timer0 Off
MOV TH0,#HIGH-10000
;Pengaturan
MOV TL0,#LOW-10000
;10000
TH0 dan TL0 6:
0008 85 F0 8A
pulsa
sbelum overflow 7:
000B D2 8C
SETB TR0
;Timer0 On
9
8:
000D 30 8D FD
JNB
TF0,$
;Tunggu
sampai
pencacah overflow 9:
0010 C2 8D
CLR
TF0
;Nonaktifkan kembali Timer0
10: 11:
END
12: Sebenarnya, program ini sama dengan program sebelumnya, kecuali pada baris ke-5 dan ke-6. Terjadi sedikit perbedaan, namun menghasilkan bilangan yang sama yaitu nilai heksadesimal dari -10000.
2.3 CONTOH SEDERHANA PROGRAM TIMER Program berikut ini merupakan contoh sederhana penggunaan Timer. Pada contoh ini akan dirancang suatu penghasil pulsa dengan frekuensi tertentu. Rangkaian minimum program terdiri dari mikrokontroler dan keluaran untuk menghasilkan pulsa yang diinginkan, seperti yang tampak pada Gambar 8.5 di bawah ini.
PULSA
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
AT89C51 Gambar 8.5. Rangkaian Penghasil Pulsa
10
Program ditulis dengan nama pulsa.asm. Setelah tak ada kesalahan, maka akan dihasilkan listing programnya dengan nama pulsa.lst, sebagai berikut:
ASEM-51 V1.3
Copyright (c) 2002 by W.W. Heinz
PAGE 1 MCS-51 Family Macro Assembler A S E M - 5 1 V 1.3 ===================================================== Line I Addr Code
Source
1:
$MOD51
2:
ORG 0H
3:
0000 75 89 11
MOV
TMOD,#00100000B ;Pengaturan Timer1
4:
0003 85 FF 8D
MOV
TH1,HIGH-10;Pengaturan Harga TH1 dan
5:
0006 85 F6 8B
MOV
TL1,LOW-10 ;10 pulsa sebelum overflow
6:
0009 D2 8E
SETB
TR1
;Timer1 On
JNB
TF1,$
;Tunggu,
TL1
7: 8:
000B
9:
000B 30 8F FD
ULANG: hingga
pencacah
overflow 10:
000E B2 90
CPL
P1.0
;Keadaan P1.0 toggle
11:
0010 C2 8F
CLR
TF1
;Timer1 Off dan isi ulang
12:
0012 80 F7
SJMP
ULANG
;Ulangi terus
13: 14:
END
15:
Pada program diatas, baris ke-3 merupakan pengaturan Timer pada register TMOD1. Pada pengaturan tersebut, ditentukan menggunakan Timer1, detak pencacah dari program dan menggunakan Mode 2 isi ulang 8 bit. Baris ke-4 dan ke-5 menentukan harga -10 (10 pulsa sebelum overflow) dalam format yang
11
mudah, yang disimpan ke lokasi memori tinggi (TH1) dan lokasi memori rendah (TL0). Setelah itu, pencacahan dimulai dengan menset harga TR1 menjadi 1, seperti tercantum pada baris ke-6. Pada saat ini, pencacahan telah dimulai. Program loop ke diri sendiri dibuat pada baris ke-9 untuk menunggu sehingga pencacahan mencapai overflow. Ketika telah mencapai overflow, keluaran P1.0 dibuat toggle (berubah dari keadaan sebelumnya). Kemudian, Timer Flag (TF1) dinonaktifkan kembali dan mengisi ulang kembali ke harga TH1 dan TL1. Kejadian ini akan terus diulang-ulang tanpa henti (SJMP menghasilkan loop ke ULANG), untuk menghasilkan keluaran yang terus berubah-ubah sesuai dengan lamanya Timer. Karena Timer diset selama 10 pulsa (atau 10 µs) maka keluaran 1 dan 0 akan terjadi pada P1.0 selama masing-masing 10 µs. Berarti, periode pulsa secara keseluruhan adalah 20 µs atau pulsa memiliki frekuensi 50 KHz. Program di atas dapat digambarkan secara diagram alir sebagai berikut:
MULAI
INISIALISASI TIMER 10 µS
TIMER ON
TIMER 10 µS
TOGGLE OUTPUT P1.0
TIMER OFF & ISI ULANG
Gambar 8.6. Diagram Alir Program Penghasil Pulsa Secara keseluruhan, program ini akan menghasilkan sebuah pulsa dengan perioda 20 µs atau memiliki frekuensi 50 KHz. Pulsa yang dihasilkan ditampilkan pada gambar di bawah ini.
12
20 µs 10 µs
10 µs
Gambar 8.6. Pulsa dengan Perioda 20 µs atau Frekuensi 50 KHz
13
BAB III PENUTUP
3.1 Kesimpulan Timer /Counter adalah suatu peripheral yang tertanam didalam microcontroller yang berfungsi pewaktu. Dengan peripheral ini pengguna microcontroller dapat dengan mudah menentukan kapan suatu perintah dijalankan (delay). Mikrokontroler 8051 dilengkapi dengan dua perangkat Timer/Counter, yaitu Timer0 dan Timer1. Untuk dapat mengakses Timer/Counter digunakan register-register khusus yang tersimpan dalam Special Function Register (SFR). Register-register tersebut adalah TMOD, TCON, TH1, TL1, TH0 dan TL0. 3.2 Saran Sebagai mahasiswa teknik elektronika, sebaiknya perlu mengetahui dan memahami apa itu timer/counter, contoh mikrokontroler untuk timer/counter, dan contoh dari program timer/counter agar kelak bisa dimanfaatkan sebagaimana mestinya untuk memudahkan dan membantu pekerjaan manusia.
14
DAFTAR PUSTAKA http://dosen.narotama.ac.id/wp-content/uploads/2012/12/modul-8-TIMERatau-COUNTER.doc http://skp.unair.ac.id/repository/GuruIndonesia/TimerCounter_lilikgunarta_16966.pdf
15