Site icon Elektrologi

Percobaan Interupsi Timer1 pada ATmega328

Pada percobaan ini akan dibuat interupsi timer 1 pada ATmega328 dengan frekuensi 1 kHz, dan kemudian dilakukan pengukuran frekuensi yang dihasilkan.

Konfigurasi Timer 1 sebagai berikut

Frekuensi clock adalah 16 Mhz. Dengan prescaler 64, dihasilkan clock ke Timer1 sebesar 250 kHz. Untuk membuat frekuensi 1 kHz, perlu pembagi sebesar 250 (0xFA), untuk itu diperlukan angka 249 (0xF9) di register OCR1A. Mode timer1 menggunakan CTC (Clear Timer on Compare), jadi ketika angka counter mencapai 249, otomatis berikutnya menjadi 0, dibarengi dengan munculnya interupsi timer 1. Dengan demikian sinyal clock timer 1 250 kHz akan menghasilkan interupsi timer dengan frekuensi 1 kHz.

Kode dibuat dengan menggunakan CodeWizard pada compiler CodevisionAVR versi Evaluation. Berikut ini tampilan setting pada code wizard untuk Timer 1:

Konfigurasi Timer 1

 

Untuk menghasilkan sinyal output, digunakan port C sebagai output. Output pada port C dikomplemen setiap interupsi, sehingga akan timbul sinyal dengan frekuensi 500 Hz pada port C. Berikut kode ISR (interrupt service routine) untuk Timer 1:

interrupt [TIM1_COMPA] void timer1_compa_isr(void)

{

PORTC=~PORTC;

}




Berikut ini sinyal yang dihasilkan, diukur dengan menggunakan osiloskop. Screen capture diambil langsung dari osiloskop (bukan difoto).

 

Hasil pengukuran port C

Frekuensi yang terukur adalah 500,026 Hz, sehingga frekuensi interupsi sebenarnya adalah 2 x 500,026 = 1000,052 Hz. Tidak sama persis dengan seharusnya (1 kHz), kemungkinannya antara frekuensi kristal yang tidak tepat, atau clock pada osiloskop yang tidak tepat.

Pengukuran frekuensi dengan osiloskop GDS 1042
Pengukuran sinyal pada Arduino nano (ATmega328)
Exit mobile version