Anda di halaman 1dari 5

Object 1

PRAKTIKUM 3

I. JUDUL : Modul 3 (Timer AVR)

II. TUJUAN :
• Praktikan diharapkan mampu membuat program timer pada mikrokontroler AVR
• Praktikan diharapkan dapat memahami dan menjelaskan cara kerja timer pada AVR.

III. DASAR TEORI


Timer merupakan fitur yang telah tertanam di dalam mikrokontroler AVR yang memiliki
fungsi terhadap waktu. Fungsi timer yang dimaksud disini adalah penentuan kapan program
tersebut akan dijalankan dan kapan program tersebut akan berhenti.
Timer mikorokontroler AVR tersusun dari beberapa register, yang nilai nya berkurang dan
bertambah secara otomatis. Pada mikrokontroler AVR terdapat dua jenis timer, yaitu : timer 8-bit
dan timer 16-bit. Pada timer 8-bit, register yang digunakan memiliki lebar 8-bit yang berarti mampu
menghitung sebanyak 2^8=256, yaitu : dari nilai 0 hingga 255.
pada timer 16-bit lebar register juga sebesar 16-bit. karena memiliki lebar register yang lebih besar,
timer 16-bit mampu menghitung sebanyak 2^16=65536, yaitu: dari 0 hingga 65535, sehingga juga
dapat digunakan sebagai pencacah (counter) dimana perbedaannya terdapat pada sumber clocknya.
pada timer, sumber clocknya berasal dari internal mikrokontroler itu sendiri. Sedangkan Counter,
sumber clocknya berasal dari luar mikrokontroler (eksternal). Jika perhitungan atau pencacahan
pada timer 8-bit maupun timer 16-bit sudah mencapai nilai maksimum nya yaitu 255 pada timer 8
bit dan 65535 pada timer 16-bit maka yang akan terjadi adalah keadaan overflow (penuh) dimana
nilai perhitugan akan kembali ke nilai nol. Keadaan overflow pada timer/counter ini kemudian bisa
dimanfatkan sebagai sumber interupsi pada aplikasi-aplikasi selanjutnya.

Konsep Timer
T = 1/f, adalah rumus yang sudah sangat familiar bagi kita untuk menghitung periode. Misalkan kita
ingin mengedipkan sebuah LED setiap 10 ms yang berarti memiliki frekwensi sebaser 1/10 ms yaitu
100 Hz. Misalnya sistem kita menggunakan external crystal XTAL sebesar 4 MHz. Sehingga
frekuensi clock dari CPU adalah sebesar 4 MHz. Seperti yang telah dijelaskan sebelumnya, Timer
mencacah dari 0 hingga nilai maksimalnya (TOP). Untuk berubah dari 0 menuju 1, maka
memerlukan satu siklus clock. untuk frekuensi CPU sebesar 4 Mhz, periodenya adalah T=1/4M =
0.00025 ms, maka setiap transisi dari 0 ke 1, 1 ke 2 dan selanjutnya akan membutuhkan waktu
selama 0.00025 ms.
Untuk delay selama 10 ms yang akan kita aplikasikan pada LED, nilai Timer dapat dihitung dengan
rumus di bawah ini:
Kita masukkan delay sebesar 10 ms dan periode clock sebesar 0.00025 ms sehingga didapatkan
timernya sebesar 39999. Hal tersebut berarti akan menghasilkan delay selama 10 ms dan clock akan
melakukan 39999 siklus. Dengan nilai timer sebesar itu, kita tidak dapat menggunakan timer 8-bit
yang hanya memiliki nilai maksimal sebesar 255, sehingga kita harus menggunakan timer 16-bit
yang mampu menghitung hingga 65535.
Prescaler Pada Timer
Jika kita ingin membuat delay sebesar 20 ms dengan menggunakan timer 16-bit (MAX – 65535)
dan menggunakan XTAL 4 MHz maka frekuensi CPU (F_CPU) nya juga sebesar 4 MHz. Jika kita
masukkan pada rumus di atas maka delay maksimum yang dapat dihasilkan oleh sistem yang kita
gunakan hanya sebesar 16.384 ms. Lalu bagaimanakah solusinya agar delay yang dihasilkan lebih
besar dari 16.384 ? jawaban nya adalah dengan mengurangi F_CPU dari 4 MHz menjadi 0.5 MHz
atau 500 KHz, sehingga periode clock-nya meningkat menjadi 1/500k = 0.002 ms. Sekarang kita
memasukkan pada rumus diatas, mengganti delay dengan 20 ms dan periode clock 0.002 ms. kita
mendapatkan nilai timer sebesar 9999 yang dapat di aplikasikan dengan menggunakan timer 16-bit.
Pada frekuensi clock yang telah direduksi menjadi (500 KHz) maka nilai delay maksimum yang
dapat dihasilkan adalah sebesar 131.072 ms.
Teknik mereduksi frekuensi clock/F_CPU ini merupakan teknik pembagian atau pen-skala-an
frekuensi yang dinamakan dengan Prescaling. Akan tetapi dalam menggunakan prescaler, ada yang
harus dikorbankan, yaitu: antara resolusi dan durasi dari timer yang kita gunakan. Semakin besar
delay yang mampu kita hasilkan dengan menggunakan prescaling maka akan mengurangi resolusi
dari timer yang berdampak pada akurasi timer yang akan menurun, sebagai contoh: pada kasus di
atas durasi dari delay yang dihasilkan meningkat dari 16.384 ms menjadi 131.072 ms dengan
melakukan prescaling pada F_CPU. Akan tetapi resolusinya juga menigkat dari 0.00025 ms menjadi
0.002 ms. Hal ini berarti bahwa setiap detik-kan (waktu transisi dari 0 ke 1 dan selanjutnya hingga
nilai MAX) akan memakan waktu lebih lama yaitu 0.002 ms yang berdampak akurasi dari timer
akan berkurang. Jika pada timer sebelumnya dapat dihitung durasi seperti 0,1125 ms
(0.1125/0.00025 = 450) maka pada timer setelah dilakukan prescaling tidak dapat dilakukan
(0.1125/0.002 = 56.25).

Pemilihan Prescaler
Sebagai contoh kita membutuhkan delay sebesar 184 ms. F_CPU yang akan digunakan sebesar 4
MHz. Sistem pada AVR memberikan pilihan pada kita dengan nilai prescaler: 8, 64, 256 dan 1024.
Prescaler 8 berarti nilai F_CPU akan dibagi dengan 8 (F_CPU/8) begitu juga yang lainnya. Jika
nilai pembagian F_CPU yaitu 4 MHz dengan tiap-tiap nilai prescaler dimasukkan pada rumus timer
diatas dan nilai delay yang diinginkan sebesar 184 ms maka kita akan mendapatkan beberapa nilai
timer seperti pada gambar berikut ini :
Dari nilai-nilai di atas, kita dapat melihat bahwa prescaler 8 tidak dapat digunakan karena nilai
timer melebihi batas dari nilai maksimal timer 16-bit yaitu sebesar 65535. Selain itu timer juga
hanya mengambil nilai integer (bilangan bulat), sehingga kita juga tidak dapat menggunakan
prescaler 1024 karena nilai timer nya bukan bilangan integer. Sehingga nilai prescaler yang dapat
digunakan adalah 64 dan 256. Akan tetapi prescaler 64 memberikan resolusi yang lebih tinggi,
sedangkan prescaller 256 akan menghasilkan durasi yang lebih besar.

IV. ALAT DAN BAHAN


1. PC 1 Unit
2. Software Eclipse 1 buah
3. Arduino Mega2560 1 Set
4. Universal Counter 1 Unit
5. Kabel Jumper 2 buah
V. DATA HASIL PERCOBAAN
• Terlampir
ANALISA

Pada praktikum kali ini membahas mengenai AVR timer. Seperti yang dapat diketahui dari
percobaan ini adalah untuk memanfaatkan AVR sebagai control timer pada sebuah unit I/O. Dan
arduino menjadi salah satunya. Dengan melakukan beberapa penyesuaian pada program yang
diinputkan, maka Atmel ATMega2560 akan menjadi unit pengatur timer. Dalam mengatur timer ini
hal yang perlu diperhatikan adalah presscaller. Prescaller sendiri berfungsi untuk menentukan nilai
yang nantinya akan dimasukkan ke dalam timer. Dalam mengatur prescaller ini, juga perlu
diperhatikan beberapa hal. Salah satu nya adalah mangatur prescaller berapa yang aktif. Dalam
mengatur presscaller yang aktif, perlu dilihat pada modul praktikum dan datasheet dari arduino
sendiri. Hal ini bertujuan untuk mengetahui “CSxx” mana yang akan diaktifkan sebagai prescaller.
Tiap prescaller memiliki nilai maksimal yang berbeda-beda tergantung dari jumlah bit yang
diinginkan. Penentuan bit ini akan sangat penting dan membantu dalam proses komparasi timer.
Dengan memilih prescaller, kita dapat mendapatkan hasil yang maksimal (sesuai yang
diinginkan). Untuk mengatur AVR sebagai timer, maka perlu diketahui bahwa pengaturan timer ini
akan tergantung pada periode. Dan periode itu sendiri akan sangat tergantung pada frekuensi nya.
Sehingga untuk mengatur AVR sebagai pengatur timer maka perlu dilakukan manipulasi terhadap
frekuensi kerja dari AVR sendiri. Hal ini dapat dilakukan dengan mengatur prescaller seperti diatas
dan juga nilai crystal di dalam AVR itu sendiri. Dengan mengatur crystal dari AVR kita dapat
menentukan clock yang digunakan pada AVR dan mengatur nya dengan mudah.
Pada praktikum ini sendiri dilakukan 5 buah percobaan. Dari kelima percobaan ini dibuat
beberapa kali uji coba dengan frekuensi yang berbeda-beda pula. Dengan begitu, akan dapat hasil
simpulan yang lebih jelas dari percobaan AVR ini. Sekaligus, kita juga dapat mengetahui dampak
frekuensi terhadap kerja timer AVR sendiri.
Seperti yang sudah dijelaskan diatas, bahwa proses perubahan timer pada AVR ini akan
melibatkan komparasi nilai binernya. Ada beberapa jenis proses komparasi, proses komparasi inilah
yang akan diuji melalui percobaan kali ini.
Pada percobaan pertama, yakni Timer 0 dengan mode Normal. Pada praktikum ini diketahui
bahwa dengan prescaller sama apabila nilai CNT yang dimasukkan semakin besar, maka frekuensi
yang ditampilkan akan semakin besar pula. Hal ini dilihat dari Universal Counter, dimana Universal
Counter ini menunjukkan frekuensi yang ditampilkan dan dari frekuensi tersebut dapat diputuskan
periode nya. Pada mode ini, yang prescaller yang diaktifkan CS01 karena memnggunakan prescaller
8.
Pada percobaan yang kedua, yakni Timer 0 Mode Normal dengan Interrupt. Pada percobaan
ini akan menunjukkan bahwa Interrupt akan terjadi apabila nilai overflow yang dimaskkan
melampaui batas kapasitas prescaller nya. Dengan begitu, hal ini dapat dimanfaatkan sebagai proses
reset dalam proses komparasi. Terdapat sedikit perbedaan antara frekuensi Timer 0 Mode Nomrmal
frekuensi Timer 0 Mode Normal dengan Intterupt yang ditampilkan pada Universal Counter, Hal ini
terjadi akibat adanya proses interrupt yang dimasukkan ke dalam proses utama dari programnya.
Perubahan ini sangat kecil dan tidak signifikan.
Pada Percobaan ketiga, Timer 0 Mode CTC. Pada mode ini nilai yang diset pada AVR akan
dibandingkan dengan nilai yang terdapat pada TCNT. Dengan membandingkan nilai tersebut
dengan nilai TCNt maka apabila kedua nilai nya sama register akan set dan timernya reset.
Percobaan yang ke-empat, mempelajari tentang Timer 0 Mode CTC dengan Interrupt,
berbeda dengan percobaan ke 3, dimana nilai yang dimasukkan akan menentukan set dan reset dari
register dan timer, pada percobaan yang keempat ini nilai ynag dimasukkan akan dibandingkan
dengan nilai TCNT, namun tidak akan dibandingkan secara terus-menerus. Dan untuk melakukan
reset pada timer, hanya dibutuhkan Interrupt. (Reset hanya dengan menjalankan Interrupt).
Pada percobaan yang terakhir, Timer 0 dengan OC0A denable. Dengan meng-enable OC0A,
maka nilai yang diset pada AVR akan dibandingkan dengan output dari OC0A, dengan begitu nilai
nilai akan dapat berubah sewaktu-waktu tergantung jenis PWM yang dipergunakan.

KESIMPULAN
1. Pada Timer 0 Mode Normal, dengan prescaller yang sama, semakin besar nilai TCNT yang
dimasukkan, maka semakin besar frekuensi yang ditampilkan (timer semakin cepat).
2. Pada Timer 0 Mode Normal dengan Intterupt, Interrupt akan terjadi apabila nilai overflow
yang diberikan melebihi kapasitas prescaller nya.
3. Pada Timer 0 Mode CTC. Nilai yang dimasukkan akan dibandingkan dengan nilai TCNT,
apabila nilai nya sama maka register set dan timer reset.
4. Pada Timer 0 Mode CTC dengan Interrupt. Nilai yang dimasukkan akan dibandingkan
dengan nilai TCNT, namun proses komparasi tidak dilakukan terus-menerus. Proses reset
hanya memerlukan interrupt sebagai sinyal nya.
5. Timer 0 dengan OC0A enable. Pada mode ini, nilai yang diset akan dibandingkan dengan
output dari OC0A, sehingga dapat berubah tergantung PWM yang digunakan.

Anda mungkin juga menyukai