Rabu, 15 September 2010

AVR Timer/Counter : Introduction

.
Kali ini saya mencoba share mengenai Timer/Counter.
Topik ini baru saya pelajari dari datasheet dan internet.
Jadi harap maklum jika masih ada kesalahan pemahaman.
Mohon koreksinya. ^_^v

Timer/Counter adalah 2 hal yang serupa tapi tak sama.
Jika dimisalkan anda berlari jarak 100 meter dengan waktu tempuh 20 detik sebanyak 150 langkah maka 20 detik adalah timernya, 150 langkah adalah counternya, dan kecepatannya 5 m/s.

Untuk aplikasi yang umum misalnya seperti mengukur kecepatan motor DC dengan menggunakan encoder yang menggunakan piringan-hitam putih sebagai sensor detektor encoder maka keliling piringan hitam-putih adalah jarak, time sampling adalah timernya dan banyaknya count hitam-putih adalah langkahnya.
Sebelum ke aplikasi sebaiknya pahami dulu dasarnya.

Dasar Timer
Semua AVR memiliki fitur Timer/Counter 8 bit, ada pula yang memiliki timer 16 bit. Timer/Counter bisa sebagai Timer jika menggunakan internal clock atau sebagai Counter jika pin external digunakan sebagai sumber clock untuk menghitung (counting). Beberapa AVR juga dapat menggunakan kristal 32,768 KHz sebagai sumber eksternal clock.

Timer/Counter pada AVR bekerja secara asinkron dengan AVR Core atau dengan kata lain Timer/Counter memiliki sirkuit yang terpisah dengan AVR Core sehingga dapat bekerja secara independen pada Main program, berinteraksi dengan control dan count register, dan berinteraksi dengan interupsi timer. Timer pada AVR dapat digunakan untuk menghasilkan Output pada pinnya seperti pada penggunaan PWM.


Gambar disamping adalah ilustrasi timer 8 bit dan timer 16 bit.
Jika timer dimisalkan anak tangga, timer 8 bit memiliki 256 anak tangga dengan nilai 0-255 (0x00 - 0xFF) dan timer 16 bit memiliki 65536 anak tangga dengan nilai 0-65535 (0x0000 - 0xFFFF).

Counting timer seperti menaiki anak tangga tersebut satu-persatu dengan waktu yang tetap.
Misalkan anda menaiki 1 anak tangga setiap 1,5 detik maka pada nilai 255 total waktu anda adalah 1,5 x 255 = 382,5 detik, sehingga tampak bahwa timer adalah counter dengan waktu yang periodik.
Jika telah mencapai 255 dan masih naik terus maka akan terjadi OverFlow (melimpah/kelebihan nilai) yang berarti flag overflow (tanda terjadi OV) akan SET yaitu berlogika 1 dan nilai register counting akan mulai dari 0 (reset) atau mulai dari anak tangga 0.
Overflow ini dapat digunakan sebagai interupsi atau fungsi lainnya.

t pada gambar adalah resolusi waktu dengan persamaan 1/frekuensi sumber clock.
Jika menggunakan sumber clock dengan frekuensi 250 Hz maka resolusi waktu adalah 1/250 Hz = 0.004 detik.
Jika pada aplikasi anda menggunakan timer untuk LED mati 1 detik dan nyala 1 detik sedangkan sumber clock yang anda gunakan adalah 250 Hz yang memiliki resolusi 0.004 detik maka:
  • 0.004 detik x Count = 1 detik
  • Count = 1 / 0.004
  • Count = 250
Didapatkan nilai Count = 250 yang artinya nilai counting timer untuk mendapatkan 1 detik adalah dari 0-250, sehingga masih bisa menggunakan timer 8 bit.
Sebaliknya jika sumber clock yang digunakan mencapai 1000 Hz dengan resolusi waktu 1/1000 = 0.001 detik maka :
  • 0.001 detik x Count = 1 detik
  • Count = 1 / 0.001
  • Count = 1000
Nilai Count 1000 tidak bisa menggunakan timer 8 bit secara langsung dan ada 2 cara mengatasinya yaitu menggunakan timer 16 bit atau menggunakan timer 8 bit yang diulang 4 kali
(4 x 250 = 1000).

Mencari ilmu tidak cukup hanya untuk mengetahui tapi untuk dipahami."
Semoga Manfaat ;)

Topik yang Populer