0% menganggap dokumen ini bermanfaat (0 suara)
5 tayangan9 halaman

Modul 3

Modul ini membahas tentang Timer dan Counter pada mikrokontroler ATMega328p, termasuk fungsi, resolusi, dan konfigurasi register yang terkait. Timer dan Counter dapat digunakan untuk menghasilkan sinyal PWM dan menghitung pulsa, dengan berbagai mode dan prescaler yang dapat disesuaikan. Selain itu, modul ini juga mencakup beberapa percobaan praktis menggunakan bahasa Assembly dan C untuk mengimplementasikan fungsi Timer dan Counter.
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
5 tayangan9 halaman

Modul 3

Modul ini membahas tentang Timer dan Counter pada mikrokontroler ATMega328p, termasuk fungsi, resolusi, dan konfigurasi register yang terkait. Timer dan Counter dapat digunakan untuk menghasilkan sinyal PWM dan menghitung pulsa, dengan berbagai mode dan prescaler yang dapat disesuaikan. Selain itu, modul ini juga mencakup beberapa percobaan praktis menggunakan bahasa Assembly dan C untuk mengimplementasikan fungsi Timer dan Counter.
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd

MODUL 3

TE201427
Sistem Mikroprosesor dan
Mikrokontroler
MODUL 3
TIMER COUNTER

1. Dasar Teori
Timer dan Coutner merupakan salah satu peripheral yang dimiliki oleh mikrokontroler
ATMega328p. Timer dan Counter memiliki fungsi pewaktu dan pencacah. Adapun peripheral Timer
dan Counter pada mikrokontroler ATMega328p dimiliki oleh Timer Counter 0, Timer Counter 1,
dan Timer Counter 2. masing-masing peripheral Timer memiliki resolusi yang berbeda. Timer
Counter 0 dan Timer Counter 2 memiliki resolusi 8 bit, sedangkan Timer Counter 1 memiliki
resolusi 16 bit.
Sebagai pewaktu, peripheral Timer Counter dapat digunakan untuk menghasilkan sinyal
Pulse Width Modulation (PWM) dan Timer interrupt. Sinyal PWM banyak digunakan untuk
aplikasi kendali motor DC, sedangkan Timer Interrupt banyak digunakan untuk pensamplingan
dengan interval waktu yang konstan. Mode PWM pada mikrokontroler ATMega328p ada phase
correct dan fast PWM. Frekuensi PWM phase correct yang dihasilkan oleh Timer dapat didekati
dengan persamaan berikut.

Sebagai pencacah, peripheral Timer Counter dapat menghitung jumlah pulsa, sehingga
peripheral Timer Counter dapat digunakan sebagai interface dengan rotary encoder. Selain itu,
Timer Counter juga dapat digunakan untuk menghitung lebar pulsa yang terhubung oleh pin
mikrokontroler.
Register yang terdapat pada peripheral Timer Counter 0 antara lain Timer Counter Control
Register A (TCCR0A), Timer Counter Control Register B (TCCR0B), Timer Counter Interrupt
Mask Register (TIMSK0), General Timer Counter Control Register (GTCCR), Timer Counter
Counter Value Register (TCNT0), Timer Counter Output Compare Register A (OCR0A), Timer
Counter Output Compare Register B (OCR0B), dan Timer Counter Interrupt Flag Register (TIFR0).
Timer Counter 1 dan 2 memiliki beberapa tambahan register. Pada Timer Counter 1, tambahan
register pada register low untuk 8 bit LSB dan register high untuk 8 bit MSB. Sedangkan pada
Timer Counter 2 terdapat Asynchronous Status Register.

Gambar 1: diagram blok peripheral Timer Counter


Gambar 2: Ouput PWM phase correct

Sinyal PWM dihasilkan dari perbandingan antara nilai pada register TCNT dan Output
Compare Register (OCR). Perbandingan kedua nilai register menghasilkan tingkah laku pada pin
Output Compare (OC) tergantung mode yang dikonfigurasi pada register TCCRA yang dapat
ditunjukkan melalui Tabel 1, Tabel 2, dan Tabel 3. Mode dari PWM dapat dikonfigurasi juga
melalui register TCCRA sesuai dengan Tabel 4.
Sebagai pewaktu, nilai register TCNT akan naik melalui trigger dari sumber clock. Sumber
clock dapat berasal dari clockspeed yang digunakan mikrokontroler, yaitu sekitar 16MHz, atau
dapat dibagi menggunakan prescaler yang terdapat pada register TCCRB. Nilai prescaler berkisar
antara 1 hingga 1024. Nilai prescaler dapat ditunjukkan melalui Tabel 5.
Apabila peripheral Timer Counter difungsikan sebagai pencacah, maka pada register
TCCRB dikonfigurasikan pin T0 sebagai sumber clock. Trigger sumber clock dapat dipilih falling
edge detection atau rising edge detection. Konfigurasi pin T0 sebagai sumber clock dapat
ditunjukkan melalui Tabel 5.
Tabel 1. Compare output mode, non-PWM

Tabel 2. Compare output mode, Fast PWM

Tabel 3. Compare output mode, Phase Correct PWM

Tabel 4. Mode PWM

Tabel 5. Prescaler clocksource

Inisialisasi peripheral Timer Counter sebagai pewaktu dan menghasilkan sinyal PWM dapat
dilakukan dengan mengkonfigurasi pin OCA atau OCB sebagai output. Kemudian menentukan
mode PWM, compare output mode, dan clocksource. Dutycyle dari sinyal PWM ditentukan oleh
Register OCRA dan OCRB. Sedangkan inisialisasi Timer Counter sebagai pencacah dilakukan
dengan mengkonfigurasi pin T0 pada Timer Counter 0 sebagai input. Kemudian mode PWM
normal, compare output mode normal dan pin T0 sebagai clocksource.

Percobaan 1: Penghasil Sinyal PWM


1. Buka program Microchip Studio, dan buatlah project menggunakan bahasa assembly.
2. Tulis program seperti berikut:
Bahasa Assembly:
start:
.equ ledA= 200
.equ ledB= 2

ldi r16,0b01100000
out ddrd,r16
ldi r16,0b00000000
out portd,r16

ldi r16,0b10100001
out tccr0a,r16
ldi r16,0b00000101
out tccr0b,r16
ldi r16,ledA
out OCR0A,r16
ldi r16,ledB
out OCR0B,r16

Bahasa C:
#include <xc.h>
#define LEDA 200
#define LEDB 50

int main(void)
{
DDRD|= (1<<PIND5)|(1<<PIND6);
PORTD&= 0x00;
TCCR0A|= (1<<WGM00)|(1<<COM0A1)|(1<<COM0B1);
TCCR0B|= (1<<CS00)|(1<<CS02);
OCR0A|= LEDA;
OCR0B|= LEDB;
while (1)
{

}
}

3. Lakukan debug pada program yang tertulis pada instruksi no 2.


4. Amati register yang berubah, kemudian jelaskan PORT dan pin ke berapa berfungsi sebagai
apa!
5. Buatlah rangkaian seperti gambar di bawah ini menggunakan SimulIDE

6. Amati kedua pin pada osiloskop dan jelaskan pengaruh program dengan mikrokontroler!

Percobaan 2: Pencacah
1. Buka program Microchip Studio, dan buatlah project menggunakan bahasa assembly.
2. Tulis program seperti berikut:
Bahasa Assembly:
start:
ldi r16,0x00
out ddrd,r16
ldi r16,0xff
out ddrc,r16
clr r16
out portc,r16
ldi r17,0x06
out tccr0b,r17

loop:
in r18,tcnt0
out portc,r18
rjmp loop

Bahasa C:
start:
ldi r16,0x00
out ddrd,r16
ldi r16,0xff
out ddrc,r16
clr r16
out portc,r16
ldi r17,0x06
out tccr0b,r17

loop:
in r18,tcnt0
out portc,r18
rjmp loop

3. Lakukan debug pada program yang tertulis pada instruksi no 2.


4. Amati register yang berubah, kemudian jelaskan PORT dan pin ke berapa berfungsi sebagai
apa!
5. Buatlah rangkaian seperti gambar di bawah ini menggunakan SimulIDE

6. Amati kedua bar!

Percobaan 3: Dimmer
1. Buka program Microchip Studio, dan buatlah project menggunakan bahasa assembly.
2. Tulis program seperti berikut:

Bahasa Assembly:
start:
clr r16
clr r18
out ddrc,r16
ldi r16,0x20
out ddrd,r16
clr r16
out portd,r16
ldi r17,0x21
out tccr0a,r17
ldi r17,0x02
out tccr0b,r17

loop:
out ocr0b,r18
in r19,pinc
mov r16,r19
andi r16,0x01
cpi r16,0x01
breq backtoloop
inc r18
rjmp loop

backtoloop:
mov r16,r19
andi r16,0x02
cpi r16,0x02
breq loop
dec r18
rjmp loop

3. Lakukan debug pada program yang tertulis pada instruksi no 2.


4. Amati register yang berubah, kemudian jelaskan PORT dan pin ke berapa berfungsi sebagai
apa!
5. Buatlah rangkaian seperti gambar di bawah ini menggunakan SimulIDE

6. Amati kedua LED pada mikrokontroler saat pushbutton ditekan dan jelaskan pengaruh
program dengan mikrokontroler arduino uno anda!

Percobaan 4: Timer Interrupt


1. Buka program Microchip Studio, dan buatlah project menggunakan bahasa assembly.
2. Tulis program seperti berikut:

Bahasa Assembly:
.org 0x0000
rjmp main
.org 0x001a
rjmp TIM1_OVF_ISR

segment:
.db 0b00111111, 0b00000110, 0b01011011, 0b01001111, 0b01100110, 0b01101101, 0b01111101,
0b00000111, 0b01111111, 0b01101111

main:
cli
ldi r16, 0xff
out ddrc, r16
out portc, r16
ldi r16, 0x00
sts tccr1a, r16
ldi r16, 0x02
sts tccr1b, r16
ldi r16, 0x01
sts timsk1, r16
sei
ldi ZL, LOW(segment+27)
ldi ZH, HIGH(segment+27)

loop:
rjmp loop

recount:
ldi ZL, LOW(segment+27)
ldi ZH, HIGH(segment+27)

TIM1_OVF_ISR:
lpm r16, Z+
out portc, r16
cpi ZL, LOW(segment+38)
breq recount
reti

3. Lakukan debug pada program yang tertulis pada instruksi no 2.


4. Amati register yang berubah, kemudian jelaskan PORT dan pin ke berapa berfungsi sebagai
apa!
5. Buatlah rangkaian seperti gambar di bawah ini menggunakan SimulIDE

6. Amati kedua seven segment!


Tugas
1. Buatlah program dalam bahasa C untuk percobaan 3 dan percobaan 4

Anda mungkin juga menyukai