LAPORAN PRAKTIKUM SISTEM MIKROKONTROLER TIMER – COUNTER
DISUSUN OLEH:
Nama
: M. Fachroel Achyar
NIM
: 021500440
Rekan Kerja
: Bagus Agul
Prodi
: Elektronika Instrumentasi
Asisten
: Dr. Muhtadan Jauhari, M. Eng
JURUSAN TEKNOFISIKA NUKLIR SEKOLAH TINGGI TEKNOLOGI NUKLIR BADAN TENAGA NUKLIR NASIONAL YOGYAKARTA 2017
TIMER – COUNTER
I.
TUJUAN
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.
II.
DASAR TEORI
Mikrokontroler ATMega8535 memiliki beberapa pre-dimensi variable (register yang terdapat pada datasheet) dengan fungsi tertentu. Tiga diantaranya adalah Timer0 , Timer1dan 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
Dua buah unit pembanding
Dua buah register pembanding
Satu buah input capture unit
Dapat menghasilkan gelombang PWM
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 memiliki register tersendiri yang akan dibahas pada subbab berikut.
timer/counter
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.
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.
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)
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.
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.
4. Bit2, 1, dan 0, Clock Select, merupakan kombinasi bit untuk mengatur prescale dengan susunan sesuai Tabel 5.
Register pada T/C 8 bit selain TCCRx adalah sebagai berikut 1. Timer/CounterX Re gister (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.
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
. 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.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
2. Timer/Counter1 Control Register B (TCCR1B)
Bit 7, Input Capture Noise Canceler (ICNC1), merupakan bit untuk mengaktifkan filter pada pin ICP1. Jika ICNC1 diset 1, berarti filter pada ICP1 diaktifkan.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. Bit 5 tidak digunakan Bit 4:3, WGM13:12, digunakan bersama-sama dengan WGM11:WGM10. Lihat Tabel 9 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 µs × 65536 = 0,00819 s 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 µs × 65536 × 1024 = 8,3886 s
III.
LANGKAH KERJA
1. Menghubungkan salah satu port dengan display led. 2. Menghubungkan switch kedalam pin T0, T1, dan T2. 3. Membuat program dibawah dengan CodeVision AVR, kemudian di download dan diamati hasilnya. IV.
PEMBAHASAN
Pada praktikum Timer-Counter kali ini bertujuan agar praktikan mampu memahami fungsi timer/counter dalam mikrokontroler AVR, mampu mengatur fungsi timer/counter, dan mampu membuat program untuk mengendalikan timer/counter serta untuk aplikasinya. a. Program Timer dengan Prescaler
Pada percobaan Timer dengan Prescaler ini bertujuan untuk menghasilkan pewaktu oleh Timer0. Ketika program ini berjalan dan ada satu kali interupsi yang dikarenakan overflow maka led akan bergantian dari on ke off atau sebaliknya. Percobaan ini diawali dengan variable led berukuran 1 byte yang diberi nilai awal 0xCC. Nilai ini apabila dibinerkan akan menjadi1100 1100 yang berarti 4 lampu menyala bergantian sesuai dengan delay yang ditetapkan. P ada instruksi DDRB=0xFF bermaksud untuk menjadikan PortB sebagai output. TCNT0=0x00 merupakan set nilai awal dari register yang apabila melebihi nilai maksimumnya yaitu 0xFF maka akan terjadi overflow dan kembali lagi ke set nilai awal begitu seterusnya. TIMSK=0x01 digunakan untuk mengaktifkan interupsi Timer 0 overflow, yang akan mengatur delay led mati dan
menyala yang dikeluarkan Port B. Dengan prescaler (TCCR0=0x05) 1024, jadi nilai register TCNT0 akan naik setiap terjadi 1024 clock kristal, Dari program diatas dapat dihitung nilai waktu maksimalnya (TMax) yaitu : Tmax = 1/fclock × (FFFFh + 1) × N = 0,125 μs × (255+1) × 1024 = 32.76µs Fclock= 8MHz. untuk mencapai nilai TCNT0 maksimum dan terjadi overflow diperlukan waktu 32.76µs. b. Program Timer untuk membuat delay 2 detik
Pada program kedua ini merupakan hasil modifikasi dari program 1 hanya saja pada program kedua ini dapat menentukan mau berapa lama waktu tundanya. Waktu tundanya ini digunakan untuk menyalakan dan mematikan led Dengan mengeset nilai TCNT0=0x64 (100), TCCR0=0x05 dan frekuensi kristal 8MHz maka akan dihasilkan interupsi timer 0 setiap interval waktu Ttimer0 = [(256-TCNT0)*N]/f clock = [(256-100)x1024]/8x10 6 = 0.019968 ≈ 20ms (waktu 1 kali overflow)
Dengan set nilai di atas kita akan membangkitkan interupsi timer 0 setiap interval waktu sekitar 20ms. Pada instruksi count++ bermaksud untuk menaikkan nilai variabelnya. Kenaikan nilai variable sampai mencapai nilai 100 yang ditandai oleh instruksi count==100. Jika sudah mencapai nilai 100 maka program dijalankan dan begitu seterusnya. Maka dengan mengkalikan count dan interval waktunya didapatkan waktu 2 detik untuk led menyala seperti percobaan pertama c. Program Timer Fast PWM
Pada program 3 merupakan program timer fast PWM yang keluarannya di bit OC0 pada led. Pada program diatas Port B diset sebagai output. Pada TCCR0 diberi nilai 0x6A. nilai ini apabila dibinerkan mejadi 0111010. Maka digunakan table susunan Timer Fast PWM seperti berikut.
0 FOC
1 WGM 00
1 COM 01
0 COM 00
1 WGM 01
0 Cs 2
1 Cs 1
Gambar 9. Susunan Timer fast PWM
Dari table di atas dapat kita dapatkan bahwa :
Nilai WGM01 dan WGM00 adalah 1-1 yang menandakan kita mengaktifkan mode fast PWM
0 Cs 0
Prescale diketahui dari nilai pada Cs2,Cs1, dan Cs0 yaitu 010, maka pada percobaan ini prescalenya adalah 8. Nilai COM01 dan COM00 adalah 1-0 maka bernilai 0 saat TCNT0=OCR0 dan bernilai 1 saat TOP atau puncak. FOC dapat diabaikan Nilai dari OCR0 adalah 127, maka Duty Cycle nya adalah: D = ( OCR0/255) x 100% = (127/255)x100% = 50%
Lampu LED yang menyala hanya pada PortB3 (PB3 : OC0 (Output Compare Timer/Counter 0)). Setelah di run, LED akan menyala terang, selanjutnya akan meredup dan mati, kemudian hidup lagi dan meredup, hal tersebut terjadi karena duty cycle yang bekerja pada fast PWM membuat lampu menyala terang pada saat duty cycle nya besar.
d. Program membuat Counter dari TC0
Program keempat ini bertujuan untuk mencacah jumlah pulsa atau kejadian yang dibaca melalu pin OC0 yang ada di Port B. Program ini akan membaca pulsa atau kejadian yang diberikan oleh perangkat luar dan akan disimulasikan dengan switch. Port B sebagai input terhubung dengan switch dan Port D sebagai output ke LED. TCCR0 diberi nilai 0x07 yang berarti Clock Select berada pada transisi naik. Nilai awal TCNT awalnya diset F6 yaitu 246 desimal. Maka ketika tombol T0 ditekan sebanyak 10 kali (256-246) akan terjadi overflow dan Port D akan bergantian dari 0F ke F0 dengan delay 500 ms dan begitu seterusnya. Terjadinya overflow diindikasikan oleh LED kedip sebanyak 5 kali dari interuksi for i<6.
V.
KESIMPULAN
1. ATmega AVR memiliki fasilitas register khusus sebagai timer/counter yaitu timer 0, timer 1 dan timer 2. 2. Untuk timer/counter register global meggunakan TIMSK dan TIFR sedangkan register khusus menggunakan TCNTx dan OCRx 3. Timer counter dapat digunakan untuk pembangkit frekuensi dan PWM. VI.
DAFTAR PUSTAKA
Bejo, Agus. 2008 Muhtadan. 2017. Modul Praktikum Sistem Mikrokontroler : Aplikasi Timer/Counter pada ATMega menggnakan CV/AVR. Yogyakarta : STTN - BATAN