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.
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:
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)
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.
1. Menggunakan software IDE WinAVR
Contoh 1:
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.
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:
- Timer/Counter Control Register A (TCCR1A)
- Timer/Counter Control Register B (TCCR1B)
- Timer/Counter Register (TCNT1H-TCNT1L)
- Output Compare Register A (OCR1AH – OCR1AL)
- Output Compare Register B (OCR1BH – OCR1BL)
- Input Capture Register1 (ICR1H – ICR1L)
- Timer/Counter Interrupt Mask Register (TIMSK)
- Timer/Counter Interrupt Flag Register (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)
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)C. Contoh Program Pengaturan Timer/counter 1
{
//kode program yang akan dijalankan ketika terjadi interupsi
}
1. Menggunakan software IDE WinAVR
Contoh 1:
//TCCRA=0x0BA3; //TCCRA tidak dapat ditulis secara 16-bitContoh 2:
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;
TCCR1A=(0<<WGM11)|(0<<WGM10)| //pilih mode normal2. Menggunakan software IDE BSCOM-AVR
(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
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
0 comments:
Post a Comment