Monday 1 September 2014

Timer/Counter Pada Mikrokontroler

Haloo para mikroholic dimanapun anda berada!!! hehehe..
Pada postingan kali ini kita akan membahas salah satu fitur mikrokontroller yang paling besar pengaruhnya yaitu Timer/Counter. Sobat sekalian yang udah tahu dan yang belum tahu apa itu Timer/Counter pada mikrokontroller yuk kita baca dan pahamin pengertian dari Timer/Counter.

Timer/Counter ialah salah satu fitur yang terdapat pada mikrokontroller yang mempunyai fungsi penyacah nilai berdasarkan nilai frekuensi yang digunakan. Nilai frekuensi ini juga bisa kita ubah-ubah sesuai dengan kebutuhan kita sobat. Nilai Frekuensi ini didapat dari hasil bagi antara frekuensi mikrokontroller dengan nilai prescaller. Apa sih prescaller itu?? Prescaller ialah nilai pembagi yang besarnya ialah 1,8,32,64,128,256,1024. Jadi jika kita menggunakan frekuensi mikrokontroller dengan frekuensi 11.059200 MHZ dan kita menggunakan nilai prescaller nya ialah 1024 maka frekuensi yang akan didapat untuk timer itu sebesar 10.800 MHz. Berikut kita bahas selengkapnya mengenai timer/counter.



1. Register Timer.

Pada bahasan timer kali ini kita akan membahas timer0 yaitu timer berjenis 8 bit atau maksimal jumlah cacahannya sebesar 256 kali.
Dimulai dari register yang pertama yaitu register TCCR0

TCCR0 (Timer/Counter Control Register 0) adalah register yang berisi bit - bit untuk mengaktifkan timer serta mengatur mode - mode yang akan dijalankan oleh timer 0. Berikut register TCCR0.



Dimulai dari bit 0-2 adalah bit yang digunakan untuk mengaktifkan timer dan mengatur frekuensi timer yang digunakan. Berikut tabel penjelasannya.



Jadi jika kita menggunakan Crystal mikrokontroller sebesar 11.059200 Mhz atau sebesar 11059200 Hz, dan apabila kita menggunakan prescaller 1024 (CS02 = 1 ; CS01 = 0; CS00 = 1;) maka frekuensi timer yang akan kita gunakan sebesar 11059200/1024 = 10800 Hz. Arti dari 10800 Hz adalah timer 0 akan mencacah sebanyak 10800 per 1 detik. Dapat dicari waktu yang dibutuhkan untuk 1 kali cacah yaitu 1 detik/10800 = 0.0000925925 detik.

Lanjut bit ke 3 dan ke 5 yaitu bit WGM00 dan WGM01 (WGM = Wave Generation Mode).
Dibit ke 3 dan ke 5 adalah bit yang digunakan untuk mengatur mode - mode yang akan dijalankan oleh mikrokontroller.


Untuk Penjelasan Mode Normal, Timer mencacah dari 0 (0x00) sampai nilai puncak 255 (0xFF) dan kembali lagi ke 0 (0x00) sampai ke puncak lagi 255 (0xFF) dst.

Register yang bertugas mencacah nilai 0 sampai 255 adalah register TCNT0.

Mode PWM,Phase Correct, register TCNT0 mencacah dari 0 (0x00) sampai ke 255 (0xFF) lalu dari 255 (0xFF) turun ke 0 (0x00) dari 0 (0x00) naik ke 255 lagi lalu dari 255 (0xFF) turun ke 0 (0x00) lagi . Jadi klo digambar kan kegrafik bentuknya hampir menyerupai gunung.

Untuk mode CTC,  Hampir sama seperti Mode Normal tetapi nilai puncaknya dapat kita tentukan sendiri menggunakan Register 0CR0.

Untuk Mode Fast PWM, mode ini sama seperti mode normal akan tetapi output nya bisa digunakan berupa pulsa pada output PIN nya (PINB3). Panjang pulsa high tergantung dari nilai OCR0 yang kita berikan. Berikut contoh gelombang yang akan didapat.

Selanjutnya bit ke 4 dan 5 yaitu COM00 dan COM01 (COM = Compare Output Mode).

Berikut tabel Compare Output Mode apabila kita menggunakan mode Non- PWM



 Tabel Compare Output Mode apabila kita menggunakan mode Fast PWM



Tabel Compare Output Mode apabila kita menggunakan mode Phase Correct PWM.



Lanjut ke bit 7, yaitu bit FOC0 (Force Output Compare)
adalah bit yang akan bernilai 1 ketika bit WGM00 di mode Non PWM, maka apabila bit WGM00 di mode PWM, bit FOC0 akan bernilai 0.

Setelah membahas Register TCCR0, maka kita lanjut membahas register TCNT0, OCR0, dan TIMSK.


Register TCN0


Register TCNT0 adalah register yang dimiliki oleh timer0 sebagai pencacah atau counter. Range dari register TCNT0 ini sebesar 8 bit.

Register OCR0



Register Output Compare Register adalah register yang selalu di compare secara terus menerus dengan register TCNT0. Pada saat nilai dari register OCR0 dan TCNT0 sama, dapat kita sebagai interupsi, atau bisa gunakan outputnya menjadi PWM di Pin OC0.

Register TIMSK



Register TIMSK (Timer/Counter Interrupt Mask Register) adalah register yang berisi bit - bit untuk mengaktifkan interupsi pada setiap timer.

Bit 0 TOIE0 (Timer/Counter 0 Overflow Interrupt Enable)
Adalah bit yang apabila kita set 1 digunakan untuk mengaktifkan interupsi overflow timer 0. Overflow adalah suatu keadaan ketika cacahan telah mencapai puncak (0xFF = 255) sesuai dengan range dari timer yang digunakan.

Bit 1 OCIE0 (Timer/Counter 0 Output Compare Interrupt Enable 0)
adalah bit yang apabila kita set 1 digunakan untuk mengaktifkan interupsi Compare match atau interupsi ketika nilai TCNT0 sama dengan nilai OCR0.


Register TIFR

Register TIFR adalah register flag dari setiap interupsi yang digunakan. Sebagai contoh apabila kita menggunakan interupsi Overflow, maka ketika cacah telah mencapai nilai puncak (overflow) maka flag TOV0 akan set menjadi 1. Berikut isi dari register TIFR.


 Itulah penjelesan singkat mengenai timer0, untuk timer 1 dan timer 2 hampir semuanya sama seperti timer 0 hanya range nya yang berbeda yaitu timer 1 yang mempunyai range 16 bit.
Untuk pemrogramannya kita akan bahas dipostingan berikutnya yaitu pada Jam Digital Pada Mikrokontroler dan Membuat delay sendiri Pada ATmega8535.

Semoga bermanfaaat.
Salammm resistorr!!!!





3 comments: