Timer/Counter 1 Mikrokontroler AVR ATMEGA32

robotics-university.com | Timer/counter 1 adalah fitur dalam mikrokontroler yang memiliki fungsi sebagi pewaktu (timer) atau sebagai pencacah (counter) suatu nilai cacahan. Pada mikrokontroler AVR ATMEGA32, selain digunakan pewaktu atau pencacah, fitur timer/counter juga dapat difungsikan sebagai pembangkit sinyal gelombang pulse width modulation (PWM) yang dapat digunakan pada peranti-peranti yang membutuhkan sinyal gelombang PWM dalam operasinya. Gambar 1 merupakan gambar diagram blok fitur timer/counter 1 pada mikrokontroler AVR ATMEGA32.


Gambar 1. Diagram blok timer/counter 1 mikrokontroler AVR ATMEGA32

A. Register Pengatur Timer/counter 1 Mikrokontroler AVR ATMEGA32
Seperti halnya pada port I/O mikrokontroler AVR ATMEGA32, dalam pengaturan timer/counter 1 melibatkan beberapa register. Register-register tersebut antara lain sebagai berikut:
  1. Timer/Counter Control Register A (TCCR1A)
  2. Timer/Counter Control Register B (TCCR1B)
  3. Timer/Counter Register (TCNT1H-TCNT1L)
  4. Output Compare Register A (OCR1AH – OCR1AL)
  5. Output Compare Register B (OCR1BH – OCR1BL)
  6. Input Capture Register1 (ICR1H – ICR1L)
  7. Timer/Counter Interrupt Mask Register (TIMSK)
  8. Timer/Counter Interrupt Flag Register (TIFR)
Untuk pengaturan timer/counter 1 akan melibatkan 6 buah register (No. 1 sampai No. 6), sedangkan ketika kita menggunakan timer/counter 1 sebagai pembangkit/sumber interupsi (vektor interupsi), maka akan ada 2 register lagi yang perlu dilibatkan, yaitu register No. 7 (TIMSK) dan register No. 8 (TIFR).

B. Prosedur Pengaturan Timer/counter 1

Prosedur 1: Mengatur nilai bit-bit register TCCR1A dan TCCR1B




Berfungsi untuk:

1. Memilih mode Timer1 (lihat tabel 1)
bit WGM11, WGM10 (terdapat dalam register TCCR1A)
bit WGM13, WGM12 (terdapat dalam register TCCR1B)

2. Menentukan keluaran compare match (lihat tabel 2, tabel 3, dan tabel 4)
bit COM1B0, COM1B1, COM1A0, COM1A1 (terdapat dalam register TCCR1A)

3. Menentukan nilai pembagi clock/prescaler (lihat tabel 5)
bit CS10, CS11, CS12 (terdapat dalam register TCCR1B)

4. Menangani input capture edge select (ICES1) dan input capture noise canceler (ICNC1)
bit ICES1 (terdapat pada register TCCR1B)
bit ICNC1 (terdapat dalam register TCCR1B)

Tabel 1. Mode operasi timer/counter 1



Tabel 2. Mode compare match pada mode Normal & CTC



Tabel 3. Mode compare match pada mode fast PWM



Tabel 4. Mode compare match pada Phase Correct & Phase Frequency PWM



Tabel 5. Pemilih pembagi clock (clock select)


Prosedur 2: Menentukan nilai awal register pencacah TCNT1


Register TCNT1 berfungsi untuk menyimpan data awal cacahan timer/counter 1 yang akan dicacah. Ukuran register TCNT1 = 16-bit (mencacah dari 0x0000 - 0xFFFF). Setelah mencacah maksimal, maka timer/counter 1 over-flow/melimpah (bernilai nol).

Prosedur 3: Mengatur nilai OCR1A/OCR1B jika menggunakan compare match.





Register OCR1 berfungsi untuk menyimpan data pembanding yang akan dibandingkan dengan isi register TCNT1. Nilai data OCR1 dapat kita tentukan besarnya sesuai kebutuhan.

Ketika OCR1 = TCNT1, maka akan terjadi event (compare match) yang bermanfaat:
Pada mode CTC (clear timer on compare match)
Pada mode PWM (pulse width modulation).

Ketika OCR1 = TCNT1 akan:
Membangkitkan output compare interrupt.
Membangkitkan pulsa PWM pada pin OC1A dan pin OC1B.


Register ICR1 (ICR1H – ICR1L) akan selalu diperbarui dengan isi register TCNT1 yaitu setiap kali terjadi “capture event” pada pin ICP1 (khusunya pada output komparator analog). Register ICR1 dapat juga digunakan untuk mendefinisikan nilai TOP time/counter1 pada mode tertentu.

Prosedur 4:
Jika menggunakan interupsi. Mengatur register TIMSK untuk mengaktifkan vektor interupsi yang digunakan.





Prosedur 5: Membuat rutin/fungsi layanan interupsi timer1 yang akan dikerjakan jika terjadi interupsi timer1.

ISR(nama_vector)
{
  //kode program yang akan dijalankan ketika terjadi interupsi
}
C. Contoh Program Pengaturan Timer/counter 1

1. Menggunakan software IDE WinAVR

Contoh 1:

//TCCRA=0x0BA3; //TCCRA tidak dapat ditulis secara 16-bit
TCCR1A=0xA3; //TCCRA ditulis secara 8-bit
TCCR1B=0x0B;

TCNT1=0x0000; //counter1=0 ---> ditulis secara 16-bit
//TCNT1H=0x00; //counter1=0 ---> ditulis secara 8-bit
//TCNT1L=0x00;

OCR1A=0x0100; //pengaturan duty cycle PWM A (16-bit)
//OCR1AH=0x00; //pengaturan duty cycle PWM A (8-bit )
//OCR1AL=0x01;

OCR1B=0x0300; //pengaturan duty cycle PWM B (16-bit)
//OCR1BH=0x00; //pengaturan duty cycle PWM B (8-bit)
//OCR1BL=0x03;
Contoh 2:

TCCR1A=(0<<WGM11)|(0<<WGM10)| //pilih mode normal
(0<<COM1A1)|(0<<COM1A0)| //Compare match output
(0<<COM1B1)|(0<<COM1B0);

TCCR1B=(0<<WGM13)|(0<<WGM12)|
(1<<CS12)|(0<<CS11)|(1<<CS10)| //prescale 1024
(0<<ICNC1)|(0<<ICES1);

TCNT1=0x0000; //nilai awal yang akan dicacah

OCR1A=0x0000; //atur nilai OCR1A
OCR1B=0x0000; //atur nilai OCR1B
TIMSK=(1<<TOIE1)|(0<<OCIE1A)|(0<<OCIE1B); //pilih interupsi yg aktif
TIFR=(0<<TOV1)|(0<<OCF1A)|(0<<OCF1B); //flag interrupt timer1
sei (); //mengaktifkan interrupsi global
2. Menggunakan software IDE BSCOM-AVR
Tulis hanya parameter konfigurasi yang diperlukan! Di bawah ini adalah contoh program pengaturan timer/counter 1 yang difungsikan sebagai pembangkit sinyal gelombang PWM dengan menggunakan IDE BASCOM-AVR.


CONFIG TIMER1 = COUNTER | TIMER | PWM ,
EDGE=RISING | FALLING , PRESCALE= 1|8|64|256|1024 ,
NOISE CANCEL=0 |1, CAPTURE EDGE = RISING | FALLING ,
CLEAR TIMER = 1|0,
COMPARE A = CLEAR | SET | TOGGLE I DISCONNECT ,
COMPARE B = CLEAR | SET | TOGGLE I DISCONNECT ,
PWM = 8 | 9 | 10 ,
COMPARE A PWM = CLEAR UP | CLEAR DOWN | DISCONNECT
COMPARE B PWM = CLEAR UP | CLEAR DOWN | DISCONNECT


Share on Google Plus

About Taufiq D.S. Suyadhi

    Blogger Comment
    Facebook Comment

0 comments:

Post a Comment