Laman

Sabtu, 28 Desember 2013

MICROCONTROLLER TIMER DAN COUNTER


Timer & Counter merupakan fitur yang telah tertanam di mikrokontroler AVR yang memiliki fungsi terhadap waktu. Fungsi pewaktu yang dimaksud disini adalah penentuan kapan program tersebut dijalankan, tidak hanya itu saja fungsi timer yang lainnya adalah PWM, ADC, dan Oscillator. Prinsip kerja timer dengan cara membagi frekuensi (prescaler) pada clock yang terdapat pada mikrokontroler sehingga timer dapat berjalan sesuai dengan frekuensi yang di kehendaki.
Timer merupakan fungsi waktu yang sumber clocknya berasal dari clock internal. Sedangkan counter merupakan fungsi perhitungan yang sumber clocknya berasal dari external mikrokontroler. Salah satu contoh penggunaan fungsi timer yaitu pada jam digital yang sumber clocknya bisa menggunakan crystal oscillator dan contoh penggunaan counter pada penghitung barang pada konveyor yang sumber clocknya berasal dari sensor yang mendeteksi barang tersebut.
Pada mikrokontroler ATMEGA 16 memiliki 3 buah timer yaitu timer 0 (8bit), timer1 (16bit), dan timer 2 (8bit). Untuk mengenai register lengkapnya bisa dibaca pada datasheet. Namun yang akan dibahas pada tulisan kali ini hanya timer 0(8bit) dan timer1 (16 bit) saja.
Register yang Digunakan untuk Timer & Counter
  • TCNT0 = Register Timer 1
  • TCNT 1 = Register Timer 0
  • Ttimer0 = Periode Timer 0
  • Ttimer 1 =Periode Timer 1
  • Tosc = Periode Clock
  • Fosc = Frekuensi Crystall Clock
  • N = Prescaler (1, 8, 64, 256, 1024)
Prescaler
Pada dasarnya Timer hanya menghitung pulsa clock. Frekuensi pulsa clock yang dihitung tersebut bisa sama dengan frekuensi crystal yang digunakan atau dapat diperlambat menggunakan prescaler dengan faktor 8, 64, 256 atau 1024.
Contoh penggunaan prescaler :
Suatu mikrokontroler menggunakan crystal dengan frekuensi 8 MHz dan timer yang digunakan adalah Timer 1 (16 Bit) maka maksimum waktu Timer yang bisa dihasilkan adalah :
TMAX = 1/fCLK x (FFFFh + 1)
= 0.125 µs x 65536
= 0.008192 s
Untuk menghasilkan waktu Timer yang lebih lama dapat menggunakan prescaler 1024, maka waktu Timer yang bisa dihasilkan adalah :
TMAX = 1/fCLK x (FFFFh+1) x N
= 0.125 µs x 655536 x 1024
= 8.388608 s
Tujuan Penggunaan Timer & Counter
  1. Melaksanaan tugas secara ber-ulang
  2. Mengendalikan kecepatan motor DC (PWM)
  3. Melakukan perhitungan (Counter)
  4. Membuat penundaan waktu (delay)
TIMER 0 (8 Bit)
Blok Diagram Timer 0
Untuk perhitungan timer 0 dapat menggunakan rumus :
Ttimer0 = Tosc*(256-TCNT0)*N     → (8 Bit = 256 ≈ 2^8)
Sebenarnya Timer 0 tidak dapat menghasilkan periode selama 1 detik karena keterbatasan jumlah bit nya (8 bit = 256). Namun dengan penggunaan rumus dapat dilakukan pemanipulasian agar timer 0 dapat menghasilkan periode waktu selama 1 detik. Dengan cara membuat timer selama 0.01 detik lalu dilakukan perulangan sebanyak 100 kali sehingga akan menghasilkan waktu 1 detik (0.01 detik x 100 kali = 1 detik).
Contoh penggunaan untuk timer 0  dengan crystal 12 MHz dan menggunakan skala clock 1024 maka akan menghasilkan :
Tosc = 1/Fosc = 1/12 = 0,083
0.01 = 0.083*(256-TCNT0)*1024
TCNT = 128= 8A (Hexadesimal)
Berdasarkan perhitungan tersebut di dapatkan 8A, maka nilai tersebut harus di inputkan ke register TCNT0 agar timer 0 bernilai 1 detik. Berikut ini contoh penggunaan nya pada Codevision AVR :
TIMER 1 (16 Bit)
Blok Diagram TImer 1
Untuk perhitungan timer 1 dapat menggunakan rumus :
Ttimer 1 = Tosc*(65536-TCNT1)*N     →(16 Bit = 65536 ≈ 2^16)
Contoh penggunaan untuk timer 1 detik (Timer1 = 1 detik) dengan crystal 12 MHz dan menggunakan skala clock 1024 maka akan menghasilkan :
Tosc = 1/Fosc = 1/12 = 0,083
1 = 0.083*(65536-TCNT1)*1024
TCNT = 53818 = D23A (Hexadesimal)
Berdasarkan perhitungan tersebut di dapatkan D23A, maka nilai tersebut harus di inputkan ke register TCNT1 agar timer 1 bernilai 1 detik. Berikut ini contoh penggunaan nya pada Codevision AVR :
Counter 0 & 1
Untuk penggunaan fungsi counter pada mikrokontroler lebih mudah jika dibandingkan dengan fungsi timer, karena tidak memerlukan perhitungan untuk penginputan nilai ke register TCNT. Register TCNT akan secara otomatis akan mencacah jika ada input yang masuk, input yang masuk contohnya dapat berupa push button.
Pada Counter 0, input berasal dari T0 atau PORT B 0 yang mampu mencacah input hingga 256 (8 Bit). Berikut ini konfigurasi Counter 0 pada Codevision AVR :
Pada Counter 1, input berasal dari T1 atau PORT B 1 yang mampu mencacah hingga 65536 (16 Bit).
Untuk konfigurasi counter 0 & 1 pada Codevision AVR sama seperti konfigurasi Timer 0 dan 1.

Tidak ada komentar:

Posting Komentar