Anda di halaman 1dari 126

Materi 8: AVR Timer Programming

I Nyoman Kusuma Wardana


Sistem Komputer STMIK STIKOM Bali

Kusuma Wardana, M.Sc. 1


Introduction
Programming Timers:
Timer0
Timer1
Timer2
Counter

Kusuma Wardana, M.Sc. 2


Banyak aplikasi yg membutuhkn pencacah
(counter) atau membangkitkn time delay
Oleh karena itu, terdapat counter register
pd uC AVR
Amati Gb berikut:

Gambaran umum counter/timer pd uC AVR


Kusuma Wardana, M.Sc. 4
Ketika kita ingin mencacah suatu event 
maka kita menghubungkan sumber luar
(external event source) ke clock pin dari
counter register
Kemudian, jk terjadi kejadian dr luar  isi dr
counter dinaikkan (incremented)
Dgn demikian, isi dr counter register
menyatakan berapa banyak kejadian yg
terjadi

Kusuma Wardana, M.Sc. 5


Ketika kita ingin mmbangkitkan time delay
 kita menghubungkan osilator dgn clock
pin dr counter
Ketika osilator „tick‟  isi register dinaikkan
Isi dr counter register mewakili jmlh tick

Kusuma Wardana, M.Sc. 6


Salah satu cara utk membangkitkan time
delay adlh:
1. Clear isi counter register saat waktu start
dimulai
2. Tunggu sampai counter mencapai nilai
tertentu

Kusuma Wardana, M.Sc. 7


Contoh:
Misal uC memiliki clock 1MHz. Dlm uC, isi dr
register akan naik setiap 1 mikrosekon.
Jadi, jika kita ingin sebuah delay selama
100 us, maka kita hrs meng-clear counter
dan tunggu sampai counter memiliki nilai
100

Kusuma Wardana, M.Sc. 8


Cara lain utk membangkitkan time delay
adlh dgn prinsip overflow
Pd uC  tiap counter memiliki flag
Flag diset ketika overflow, kemudian dpt di-
clear-kan menggunakan software
Load counter register dan biarkan sampai
overflow dan biarkan flag diset.

Kusuma Wardana, M.Sc. 9


Contoh:
Misal uC memiliki clock 1 MHz dan memiliki 8-
bit counter register. Jika ingin membuat time
delay 3 uS, kita dpt me-load register dgn isi
$FD, dan tunggu sampai counter diset
setelah 3 tick
Setelah tick pertama isi = $FE, setelah tick
kedua isi = $FF dan setelah tick ketiga =
overflow (isi register menjd $00 dan flag
diset)

Kusuma Wardana, M.Sc. 10


AVR memiliki 1 sampai 6 timer (Timer 0,
1,2,3,4 dan 5), tergantung keluarga AVR tsb
Timer ini bisa bertindak sbg:
1. Counter  utk kejadian dunia luar
2. Pembangkit delay

Kusuma Wardana, M.Sc. 11


Di AVR timer/counter adalah 8-bit dan 16-
bit
Utk Atmega16  trdpt 3 timer (Timer0,
Timer1 dan Timer2):
Timer0 dan Timer2  8-bit
Timer1  16-bit
Dgn memahami 1 jenis mikrokontroler, kita
dpt dgn mudah memahami jenis lainnya

Kusuma Wardana, M.Sc. 12


Setiap timer memerlukan  sumber clock
Sumber clock  dapat internal atau
eksternal
Jika menggunakan internal  frekuensi dr
kristal dimasukkan ke timer, dan bisa
digunakan sbg pembangkit delay. Oleh
karena itu dikenal sbg timer
Jika menggunakan eksternal  kita
memasukkan sumber pulsa ke salah satu kaki
pd uC, dan dikenal sbg counter
Kusuma Wardana, M.Sc. 14
Stiap timer memiliki
TCNTn (Timer/CouNTer)

Jd, pd uC ATmega16
 kita memiliki TCNT0,
TCNT1 dan TCNT2

Isi dr timer/counter dpt


dilihat melalui TCNTn

Kita dpt menulis atau


membaca reg. TCNTn
Kusuma Wardana, M.Sc. 15
Stp timer memiliki flag
TOVn (Timer
OVerflow)

Jika overflow, maka


TOVn akan diset
(bernilai 1)

Kusuma Wardana, M.Sc. 16


Stiap timer memiliki
TCCRn (Timer/Counter
Control Register)

TCCR  utk menset


mode operasi

Contoh: kita dpt


mengatur apakah
Timer0 akan bekerja
sbg timer atau counter

Kusuma Wardana, M.Sc. 17


Stp timer jg memiliki
reg OCRn (Output
Compare Register)

Isi dr OCRn
dibandingkan dgn isi
dr TCNTn.

Jika sama, maka


OCFn (Output
Compare Flag) akan
diset

Kusuma Wardana, M.Sc. 18


8 bit

Register Timer Data Address


Space R0
R1

berada pada I/O $0000 R2


$0001 General

...
register memory Purpose

...
Registers R31
$001F I/O Address
TWBR $00
$0020
TWSR $01
Standard I/O
Oleh karena itu, kita

...
...
Registers
SPH $3E

dpt mengakses
$005F SREG $3F
$0060

menggunakan
General
purpose

...
RAM
instruksi IN dan OUT (SRAM)

$FFFF

Kusuma Wardana, M.Sc. 19


I/O Register:

Address Name Address Name Address Name


I/O Mem. I/O Mem. I/O Mem.
$00 $20 TWBR $16 $36 PINB $2B $4B OCR1AH
$01 $21 TWSR $17 $37 DDRB $2C $4C TCNT1L
$02 $22 TWAR $18 $38 PORTB $2D $4D TCNT1H
$03 $23 TWDR $19 $39 PINA $2E $4E TCCR1B
$04 $24 ADCL $1A $3A DDRA $2F $4F TCCR1A
$05 $25 ADCH $1B $3B PORTA $30 $50 SFIOR
$06 $26 ADCSRA $1C $3C EECR OCDR
$1D $3D EEDR $31 $51
$07 $27 ADMUX OSCCAL
$08 $28 ACSR $1E $3E EEARL $32 $52 TCNT0
$09 $29 UBRRL $1F $3F EEARH $33 $53 TCCR0
$0A $2A UCSRB UBRRC $34 $54 MCUCSR
$20 $40
$0B $2B UCSRA UBRRH $35 $55 MCUCR
$0C $2C UDR $21 $41 WDTCR $36 $56 TWCR
$0D $2D SPCR $22 $42 ASSR $37 $57 SPMCR
$0E $2E SPSR $23 $43 OCR2 $38 $58 TIFR
$0F $2F SPDR $24 $44 TCNT2 $39 $59 TIMSK
$10 $30 PIND $25 $45 TCCR2 $3A $5A GIFR
$11 $31 DDRD $26 $46 ICR1L $3B $5B GICR
$12 $32 PORTD $27 $47 ICR1H $3C $5C OCR0
$13 $33 PINC $28 $48 OCR1BL $3D $5D SPL
$14 $34 DDRC $29 $49 OCR1BH $3E $5E SPH
$15 $35 PORTC $2A $4A OCR1AL $3E $5E SREG

Kusuma Wardana, M.Sc. 20


Contoh:
Load TCNT0 dengan nilai 25. Kemudian salin
isi dr TCNT0 tsb ke R19.

Jawab:
LDI R20, 25 ;R20 = 25
OUT TCNT0, R20 ;TCNT0 = R20
IN R19, TCNT0 ;R19 = TCNT0

Kusuma Wardana, M.Sc. 21


Skematik Timer0

Kusuma Wardana, M.Sc. 23


TCNT0 (Timer/Counter0)

Timer0  8-bit register


Jd, TCNT0  8-bit

Kusuma Wardana, M.Sc. 24


TCCR0 (Timer/Counter Control Register 0)

TCCR0 8-bit register


Digunakan utk mengontrol Timer0

Kusuma Wardana, M.Sc. 25


Kusuma Wardana, M.Sc. 26
Kusuma Wardana, M.Sc. 27
Contoh:
Carilah nilai TCCR0 jika kita menginginkan
Timer0 pd mode normal, tidak memakai
prescaler. Sumber detak sama dgn sumber
detak AVR

Kusuma Wardana, M.Sc. 28


Jawab:
Mode normal D6 dan D3 = 00
Clock no prescaling  CS2:0 = 001

Kusuma Wardana, M.Sc. 29


TIFR (Timer/Counter Interrupt Flag Register)

TIFR 8-bit register


Berisi flag dari Timer-timer yg berbeda

Kusuma Wardana, M.Sc. 30


Kusuma Wardana, M.Sc. 31
Perhatian!
Jika kita ingin meng-clear-kan Timer0, maka
kita harus menuliskan nilai 1 pd register TIFR
Mengapa? Karena dlm satu register
terdapat flag dr berbagai timer
Contoh: clear-kan Timer0
LDI R20, 0x01
OUT TIFR, R20 ;TIFR = 0b00000001

Kusuma Wardana, M.Sc. 32


Normal Mode
Pd mode ini, isi dr timer/counter akan
dinaikkan pd setiap detak-nya
Register akan menghitung sampai max 0xFF.
Jika overflow, maka akan kembali ke 0x00
dan menset flag TOV0. Flag ini dpt dimonitor

Kusuma Wardana, M.Sc. 33


Langkah2 memprogram Timer0 pd Mode Normal utk time
delay, sbb:
1. Load reg TCNT0 dgn nilai awal tertentu
2. Atur reg TCCR0 utk mengindikasikan mode mana yg
digunakan, jg prescaler
3. Monitor flag TOV0 utk melihat apakah diset. Keluar dr
loop jika TOV0 tinggi
4. Stop timer dgn memutus sumber clock, menggunakan
perintah:
LDI R20, 0x00
OUT TCCR0, R20; stop timer, mode=normal
5. Clear flag TOV0 utk putaran berikutnya
6. Kembali ke langkah 1

Kusuma Wardana, M.Sc. 34


Contoh:
Buatlah square wave (gelombang kotak)
dgn 50% duty cycle (porsi HIGH dan LOW
sama) dan keluarkan di PORTB.5
Timer0 digunakan utk membangkitkan time
delay
Analisislah program tsb!
Hitunglah delay yg dibangkitkan oleh timer.
Asumsi XTAL = 8MHz

Kusuma Wardana, M.Sc. 35


Jawab:

.INCLUDE “M16DEF.INC”
.MACRO INITSTACK ;set up stack
LDI R20, HIGH(RAMEND)
OUT SPH, R20
LDI R20, LOW(RAMEND)
OUT SPL, R20
.ENDMACRO
INITSTACK
LDI R16, 1<<5 ;R16 = 0x20 (utk PB5)
SBI DDRB, 5 ;PB5 sbg output
LDI R17,0
OUT PORTB, R17 ;clear PORTB

Kusuma Wardana, M.Sc. 36


BEGIN : RCALL DELAY ;panggil delay
EOR R17, R16 ;toggele D5 pd R17
OUT PORTB, R17 ;toggle PB5
RJMP BEGIN
;------------ Timer0 delay
DELAY : LDI R20, 0xF2 ;R20 = 0xF2
OUT TCNT0, R20 ;load Timer0
LDI R20, 0x01
OUT TCCR0, R20 ;Timer0, normal, no pre, int clk
AGAIN : IN R20, TIFR ;read TIFR
SBRS R20, TOV0 ;jk TOV0=1, skip inst slanjutny
RJMP AGAIN
LDI R20, 0x00
OUT TCCR0, R20
LDI R20, (1<<TOV0)
OUT TIFR, R20 ;clear TOV0 dgn menulis 1
RET

Kusuma Wardana, M.Sc. 37


Analisis Program:
Nilai 0xF2 di-load ke TCNT0
TCCR0 diseting dan Timer0 mulai start
Timer0 mulai mencacah naik, dr F2, F3 … FF

1 clock lg membuatnya mnjd 0, dan TOV0


=1. pd titik ini SBRS R20, TOV0 bypass
perintah RJMP AGAIN
Timer0 di-stop
TOV0 di-clear
Kusuma Wardana, M.Sc. 38
XTAL = 8 MHz. Maka periode dr clock adlh
T=1/8 MHz= 0,125 mikrosekon.
Delay yg dihasilkan = jumlah cacah x 0,125 us
Jumlah cacah  0xFF – 0xF2 = 0x0D (13
dec)
Kita hrs menambah 1 clock ketika lompat
dr FF ke 00 dan menset flag TOV0.
Maka Total Delay = 14 x 0,125 us = 1,75 us

Kusuma Wardana, M.Sc. 39


Kusuma Wardana, M.Sc. 40
Kusuma Wardana, M.Sc. 41
Menemukan Nilai yg akan di-Load ke uC
Asumsi kita tahu lama delay yg kita
inginkan
Pertanyaannya, brp nilai yg harus di-load
ke register TCNT0?
Topik ini adalah materi yg sangat penting
untuk memahami timer/counter  shg dpt
memanfaatkannya dgn tepat!

Kusuma Wardana, M.Sc. 42


Bbrp langkah utk menemukan nilai TCNT0, sbb:
1. Hitung waktu periode dr clock:

1
𝑇𝑐𝑙𝑜𝑐𝑘 =
𝐹𝑇𝑖𝑚𝑒𝑟

2. Bagi waktu delay yg diinginkan dgn Tclock


3. Lakukan operasi 256-n, dmn n adalah nilai
desimal yg kita dpt dr langkah 2
4. Konversi hasil di atas ke hex  misal xx
5. Set TCNT0 = xx
Kusuma Wardana, M.Sc. 43
Contoh:
Asumsi kita memiliki XTAL = 8MHz. Buatlah
program utk membangkitkan gelombang
kotak dgn periode 12.5 mikrosekon pd
PORTB.3
Asumsi duty cycle 50%.
Gunakan ATmega32

Kusuma Wardana, M.Sc. 44


Jawab:
Utk gel kotak dgn T=12.5 us, kita hrs
menyediakan time delay sbesar 6.25 us.
Karena XTAL = 8MHz, maka counter akan
naik setiap 0.125 us. Ini berarti bahwa kita
memerlukan 6.25/0.125 = 50 clock. Nilai yg
kita load ke TCNT0 adlh: 256 – 50 = 206 =
0xCE

Kusuma Wardana, M.Sc. 45


Jawab:

.INCLUDE “M16DEF.INC”
.MACRO INITSTACK ;set up stack
LDI R20, HIGH(RAMEND)
OUT SPH, R20
LDI R20, LOW(RAMEND)
OUT SPL, R20
.ENDMACRO
INITSTACK
LDI R16, 0x08 ;R16 = 0b00001000 (utk PB3)
SBI DDRB, 3 ;PB3 sbg output
LDI R17,0
OUT PORTB, R17 ;clear PORTB

Kusuma Wardana, M.Sc. 46


BEGIN : RCALL DELAY ;panggil delay
EOR R17, R16 ;toggle D3
OUT PORTB, R17 ;toggle PB3
RJMP BEGIN
;------------ Timer0 delay
DELAY : LDI R20, 0xCE ;R20 = 0xCE
OUT TCNT0, R20 ;load Timer0
LDI R20, 0x01
OUT TCCR0, R20 ;Timer0, normal, no pre, int clk
AGAIN : IN R20, TIFR ;read TIFR
SBRS R20, TOV0 ;jk TOV0=1, skip inst slanjutny
RJMP AGAIN
LDI R20, 0x00
OUT TCCR0, R20
LDI R20, (1<<TOV0)
OUT TIFR, R20 ;clear TOV0 dgn menulis 1
RET

Kusuma Wardana, M.Sc. 47


Contoh:
Asumsi kita memiliki XTAL = 8MHz. Sekarang
modifikasilah program sebelumnya utk
membangkitkan gelombang kotak dgn
frekuensi 16kHz pd PORTB.3

Kusuma Wardana, M.Sc. 48


Jawab:
Ikutilah langkah2 berikut:
1. Time period: T = 1/F = 1/16kHz = 62.5 us
2. Kita bagi 2 utk delay HIGH dan LOW 
31.25 us
3. 31.25 us/0.125 us = 250  256-250 = 6 = 0x06
(hex)
4. Nilai TCNT0 =0x06

Kusuma Wardana, M.Sc. 49


Prescaler
Ukuran dr time delay tergantung pd 2
faktor:
1. Frekuensi kristal
2. Jumlah bit register (dlm hal ini 8-bit utk
Timer0)

Kedua faktor ini diluar kontrol programmer


 karena sudah ditentukan oleh pabrikan

Kusuma Wardana, M.Sc. 50


Contoh:
Dengan menggunakan TCNT0,
modifikasilah program sebelumnya untuk
mendapatkan time delay maksimum!
Kalkulasi time delay dan frekuensi yg
dibangkitkan

Kusuma Wardana, M.Sc. 51


Jawab:

.INCLUDE “M16DEF.INC”
.MACRO INITSTACK ;set up stack
LDI R20, HIGH(RAMEND)
OUT SPH, R20
LDI R20, LOW(RAMEND)
OUT SPL, R20
.ENDMACRO
INITSTACK
LDI R16, 0x08 ;R16 = 0b00001000 (utk PB3)
SBI DDRB, 3 ;PB5 sbg output
LDI R17,0
OUT PORTB, R17 ;clear PORTB
Kusuma Wardana, M.Sc. 52
BEGIN : RCALL DELAY ;panggil delay
EOR R17, R16 ;toggle D3
OUT PORTB, R17 ;toggle PB3
RJMP BEGIN
;------------ Timer0 delay
DELAY : LDI R20, 0x00 ;R20 = 0x00
OUT TCNT0, R20 ;load Timer0
LDI R20, 0x01
OUT TCCR0, R20 ;Timer0, normal, no pre, int clk
AGAIN : IN R20, TIFR ;read TIFR
SBRS R20, TOV0 ;jk TOV0=1, skip inst slanjutny
RJMP AGAIN
LDI R20, 0x00
OUT TCCR0, R20
LDI R20, (1<<TOV0)
OUT TIFR, R20 ;clear TOV0 dgn menulis 1
RET

Kusuma Wardana, M.Sc. 53


Utk mencapai maks, maka TCNT0 hrs di-
load dgn 0x00  akan bergerak dr 00
sampai FF
Total = 256 langkah
Maka delay = (256-0) x 0.125 us = 32 us
Karena delay maks, maka frekeunsi akan
min: F = 1/(2x32 us) = 15.625 kHz

Kusuma Wardana, M.Sc. 54


Dgn menggunakan skenario ini  maks
delay yg diperoleh menggunakan Timer0
hanya 32us.
Bgmn jika kita ingin menggunakan delay yg
lebih lama?
Solusi  gunakan prescaler

Kusuma Wardana, M.Sc. 55


Amati gb berikut:

Kusuma Wardana, M.Sc. 56


Jika prescaler tdk digunakan  sumber
clock timer akan berasal dr XTAL
Jika menggunakan prescaler  clock
sumber akan dibagi sesuai dgn pembagi
yg diinginkan
Pilihan pembagian: 8 s/d 1024

Kusuma Wardana, M.Sc. 57


Contoh:
Asumsi digunakan prescaler 1:64.
Temukanlah frekuensi dr timer jika
digunakan XTAL:
a) 8 MHz
b) 16 MHz
c) 10 MHz

Kusuma Wardana, M.Sc. 58


Jawab:
Solusi diperlihatkan pd ilustrasi sbb:

a) 1/64 x 8 MHz = 125 kHz  T = 1/125 kHz = 8 us


b) 1/64 x 16 MHz = 250 kHz  T = 1/250 kHz = 4 us
c) 1/64 x 10 MHz = 156.2 kHz  T = 1/156 kHz =
6.4us
Kusuma Wardana, M.Sc. 59
Contoh:
Temukan nilai TCCR0 jika kita ingin
memprogram Timer0 pd mode normal dgn
prescaler 64 menggunakan clock internal

Kusuma Wardana, M.Sc. 60


Jawab:
Set nilai CS02:00:

Kusuma Wardana, M.Sc. 61


Contoh:
Asumsi kita memiliki XTAL = 8 MHz. Tulislah
program utk membangkitkan gelombang
kotak dgn frekuensi 125 Hz pd PORTB.3.
Gunakan Timer0 pd ATmega32, Normal
mode, dan prescaler 256.

Kusuma Wardana, M.Sc. 62


Jawab:
Ikutilah langkah2 berikut:
1. Periode gel kotak: T = 1/125 Hz = 8ms
2. ½ dr 8ms utk HIGH dan ½ -nya lg utk LOW
3. (4ms/0.125us)/256 = 125  256-125 = 131=0x83
4. TCNT0 = 0x83

4ms 4ms

Kusuma Wardana, M.Sc. 63


Jawab:

.INCLUDE “M32DEF.INC”
.MACRO INITSTACK ;set up stack
LDI R20, HIGH(RAMEND)
OUT SPH, R20
LDI R20, LOW(RAMEND)
OUT SPL, R20
.ENDMACRO
INITSTACK
LDI R16, 0x08 ;R16 = 0b00001000 (utk PB3)
SBI DDRB, 3 ;PB5 sbg output
LDI R17,0
OUT PORTB, R17 ;clear PORTB
Kusuma Wardana, M.Sc. 64
BEGIN : RCALL DELAY ;panggil delay
EOR R17, R16 ;toggle D3
OUT PORTB, R17 ;toggle PB3
RJMP BEGIN
;------------ Timer0 delay
DELAY : LDI R20, 0x83 ;R20 = 0x83
OUT TCNT0, R20 ;load Timer0
LDI R20, 0x04
OUT TCCR0, R20 ;Timer0, normal, pre256,int clk
AGAIN : IN R20, TIFR ;read TIFR
SBRS R20, TOV0 ;jk TOV0=1, skip inst slanjutny
RJMP AGAIN
LDI R20, 0x00
OUT TCCR0, R20
LDI R20, (1<<TOV0)
OUT TIFR, R20 ;clear TOV0 dgn menulis 1
RET

Kusuma Wardana, M.Sc. 65


Assembler dan Nilai Negatif
Kita mengetahui bahwa TCNT0 = 8-bit, dan
assembler dpt menghitung nilai utk TCNT0

Contoh:
LDI R20, -100
Karena -100 = 9C, maka R20 = 9C (dlm hex)

Kusuma Wardana, M.Sc. 66


Contoh:
Pelajari program berikut. (a) Temukanlah
frekuensi yg dibangkitkan dan (b) duty
cycle dr gelombang kotak tsb. Asumsi XTAL
= 8 MHz

Kusuma Wardana, M.Sc. 67


Jawab:
Pelajari program berikut. (a) Temukanlah
frekuensi yg dibangkitkan dan (b) duty
cycle dr gelombang kotak tsb. Asumsi XTAL
= 8 MHz, dan digunakan ATmega32

Kusuma Wardana, M.Sc. 68


.INCLUDE “M32DEF.INC”
LDI R16, HIGH(RAMEND)
OUT SPH, R16
LDI R16, LOW(RAMEND)
OUT SPL, R16 ;init stack pointer
LDI R16, 0x20
SBI DDRB, 5
LDI R18, -150
BEGIN : SBI PORTB, 5 ;PB5 = 1
OUT TCNT0, R18 ;load Timer0
CALL DELAY
OUT TCNT0, R18 ;reload Timer0
CALL DELAY
CBI PORTB,5 ;PB5 = 0
OUT TCNT0, R18 ;reload Timer0
CALL DELAY
RJMP BEGIN
Kusuma Wardana, M.Sc. 69
--delay menggunakan Timer0
DELAY: LDI R20, 0x01
OUT TCCR0, R20 ;start Timer0, Normal mode
;int clock, no prescaler

AGAIN: IN R20, TIFR ;baca TIFR


SBRS R20, TOV0 ;monitor TOV0 flag
;skip jika HIGH
RJMP AGAIN
LDI R20, 0x00
OUT TCCR0, R20 ;stop timer
LDI R20, 1<<TOV0
OUT TIFR, R20 ;clear flag TOV0
RET

Kusuma Wardana, M.Sc. 70


TCNT0 = 8-bit
Krn kita me-load 150 clock, maka:
subrutin DELAY = 150 x 0.125 us = 18,75 us.
Porsi HIGH adlh 2 kali porsi LOW  66% duty
cycle
Periode T = porsi HIGH + porsi LOW =
(2x18.75us)+(18.75us) = 56.25 us
Maka, Frekuensi = (1/T) = (1/56.25) = 17.77 kHz

ATmega32

2x18.75us 18.75us
PB.5

Kusuma Wardana, M.Sc. 71


Clear Timer0 on Compare Match (CTC) Mode
Programming
OCR0 digunakan pd CTC mode
Pd CTC mode  timer mencacah naik
sampai nilai TCNT0 sama dgn OCR0

Kusuma Wardana, M.Sc. 72


Jika TCNT0 sama dgn OCR0  maka flag
OCF0 akan di-set
OCF0 berada di register TIFR

Kusuma Wardana, M.Sc. 73


Jawab:

.INCLUDE “M32DEF.INC”
.MACRO INITSTACK ;set up stack
LDI R20, HIGH(RAMEND)
OUT SPH, R20
LDI R20, LOW(RAMEND)
OUT SPL, R20
.ENDMACRO
INITSTACK
LDI R16, 0x08 ;R16 = 0b00001000 (utk PB3)
SBI DDRB, 3 ;PB5 sbg output
LDI R17,0

Kusuma Wardana, M.Sc. 74


BEGIN : OUT PORTB, R17 ;clear PORTB
RCALL DELAY ;panggil delay
EOR R17, R16 ;toggle D3
OUT PORTB, R17 ;toggle PB3
RJMP BEGIN
;------------ Timer0 delay
DELAY : LDI R20, 0x00 ;R20 = 0x00
OUT TCNT0, R20 ;load Timer0
LDI R20, 9
OUT OCR0, R20
LDI R20, 0x09
OUT TCCR0, R20 ; Timer0, CTC mode, int clock

Kusuma Wardana, M.Sc. 75


AGAIN : IN R20, TIFR ;read TIFR
SBRS R20, TOV0 ;jk TOV0=1, skip inst slanjutny
RJMP AGAIN
LDI R20, 0x00
OUT TCCR0, R20
LDI R20, (1<<TOV0)
OUT TIFR, R20 ;clear TOV0 dgn menulis 1
RET

Kusuma Wardana, M.Sc. 76


Amati ilustrasi berikut:

Kusuma Wardana, M.Sc. 77


Timer2 8-bit timer

Kusuma Wardana, M.Sc. 79


Sama halnya dgn Timer0  sama2 8-bit
Perbedaan Timer0 dan Timer2, sbb:
1. Timer2 dpt digunakan sbg “real time
counter”.
Hal ini dilakukan dgn menghubungkan
kristal sbesar 32.768kHz ke pin TOSC1 dan
TOSC2 dan set bit AS2

Kusuma Wardana, M.Sc. 80


Pd Timer0, jika CS02:CS00 diset 110 dan 111,
maka akan mencacah input eksternal.
Namun, pd Timer2, multiplexer akan
memilih prescaler yg berbeda
Dgn kata lain, nilai yg sama pd bit CS utk
Timer0 dan Timer2  akan menghasilkan
prescaler yg berbeda

Kusuma Wardana, M.Sc. 81


Kusuma Wardana, M.Sc. 82
Kusuma Wardana, M.Sc. 83
Contoh:
Temukan nilai TCCR2 jika kita ingin
memprogram Timer2 pd:
Mode normal
Prescaler 64 menggunakan clock
internal

Kusuma Wardana, M.Sc. 84


Jawab:

Kusuma Wardana, M.Sc. 85


Contoh:
Dgn menggunakan Timer2, buatlah
program utk membangkitkan delay sebesar
1920 us. Gunakan prescaler 64. asumsi XTAL
= 8 MHz

Kusuma Wardana, M.Sc. 86


Jawab:
Clock Timer = 8 MHz/64 = 125 kHz
Timer period = 1/125 kHz = 8 us
Timer value = 1920 us/8 us = 240

Kusuma Wardana, M.Sc. 87


;------------ Timer2 delay
DELAY : LDI R20, -240 ;R20 = 0x10
OUT TCNT2, R20 ;load Timer2
LDI R20, 0x04
OUT TCCR2, R20 ; Timer2, normal, presc = 64
AGAIN : IN R20, TIFR ;read TIFR
SBRS R20, TOV2 ;jk TOV2=1, skip inst slanjutny
RJMP AGAIN
LDI R20, 0x00
OUT TCCR2, R20 ;stop Timer2
LDI R20, (1<<TOV2)
OUT TIFR, R20 ;clear TOV0 dgn menulis 1
RET

Kusuma Wardana, M.Sc. 88


Contoh:
Menggunakan mode CTC, tulislah program
utk membangkitkan delay sebesar 8ms.
Asumsi XTAL = 8 MHz

Kusuma Wardana, M.Sc. 89


Jawab:
Dengan menggunakan XTAL = 8 MHz, output
dr prescaler yg berbeda sbb:

Kusuma Wardana, M.Sc. 90


Prescaler yg memungkinkan adlh 256 dan
1024  ingat Timer2 = 8-bit
Kita gunakan prescaler 256  menghindari
nilai desimal (dengan koma)
Utk menunggu 250 clock, kita load OCR2
dgn 250-1 = 249
Nilai TCCR2, sbb:

Kusuma Wardana, M.Sc. 91


;------------ Timer2 delay
DELAY : LDI R20, 0x00 ;R20 = 0x00
OUT TCNT2, R20 ;load Timer0
LDI R20, 249
OUT OCR0, R20
LDI R20, 0x0E
OUT TCCR0, R20 ; Timer2, CTC mode, pre=256

Kusuma Wardana, M.Sc. 92


AGAIN : IN R20, TIFR ;read TIFR
SBRS R20, OCF2 ;jk OCF2=1, skip inst slanjutny
RJMP AGAIN
LDI R20, 0x00
OUT TCCR2, R20 ;stop Timer2
LDI R20, (1<<OCF2)
OUT TIFR, R20 ;clear flag OCF2
RET

Kusuma Wardana, M.Sc. 93


Timer1  16-bit timer
Dibagi mnjd 2 byte  TCNT1L dan TCNT1H

Jg memiliki register kontrol bernama


TCCR1A dan TCCR1B

Kusuma Wardana, M.Sc. 95


Skematik Timer1

Kusuma Wardana, M.Sc. 96


Jg memiliki register
kontrol bernama
TCCR1A dan TCCR1B
Memiliki register OCR yg
terpisah dan
independen
Jika TCNT1 = OCR1A 
maka OCF1A akan set
Jika TCNT1 = OCR1B 
maka OCF1B yg akan
set

Kusuma Wardana, M.Sc. 97


Kusuma Wardana, M.Sc. 98
Timer/counter Control Register 1 A

Kusuma Wardana, M.Sc. 99


Timer/counter Control Register 1 B

Kusuma Wardana, M.Sc. 100


Kusuma Wardana, M.Sc. 101
Kusuma Wardana, M.Sc. 102
Timer1 Operation Modes
Normal Mode (WGM13:10 = 0000)
Timer mencacah sampai max ($FFFF)
kemudian kembali ke $0000 
membangkitkan flag TOV1

Kusuma Wardana, M.Sc. 103


Timer1 Operation Modes
CTC Mode (WGM13:10 = 0100)
Timer mencacah sampai sama dgn isi
register OCR1A  membangkitkan flag
OCF1A

Kusuma Wardana, M.Sc. 104


Contoh:
Temukanlah nilai TCCR1A dan TCCR1B jika
kita ingin memprogram Timer 1 pada mode
0 (normal mode), tanpa prescaler.
Gunakan clock dr kristal AVR

Kusuma Wardana, M.Sc. 105


Jawab:
TCCR1A = 0000 0000
WGM11 = 0
WGM10 = 0
TCCR1B = 0000 0001
WGM13 = 0
WGM12 = 0
CS12:10 = 001 (no prescaler)

Kusuma Wardana, M.Sc. 106


Contoh:
Berdasarkan penggalan program berikut,
temukanlah frekuensi gelombang kotak yg
dibangkitkan. Asumsi menggunakan XTAL =
8 MHz

Kusuma Wardana, M.Sc. 107


;------------ Timer1 delay
DELAY : LDI R20, 0xD8
OUT TCNT1H, R20 ;TCNT1H = 0xD8
LDI R20, 0xF0
OUT TCNT1L, R20 ;TCNT1L = 0xF0
LDI R20, 0x00
OUT TCCR1A, R20 ;WGM11:10 = 00
LDI R20, 0x01
OUT TCCR1B, R20 ;WGM13:12 = 00, normal, pre =1
AGAIN : IN R20, TIFR ;read TIFR
SBRS R20, TOV1 ;jk TOV1=1, skip inst slanjutny
RJMP AGAIN
LDI R20, 0x00
OUT TCCR1B, R20 ;stop Timer1
LDI R20, 0x04
OUT TIFR, R20 ;clear TOV1
RET
Kusuma Wardana, M.Sc. 108
Jawab:
WGM13:10 = 0000 = 0x00  timer bekerja
pd mode normal (puncak = 0xFFFF)
FFFF + 1 – D8F0 = 0x2710  10.000 clock
XTAL = 8 MHz  periode = 0.125 us
Maka delay = 10.000 X 0.125us = 1.25 ms
Jadi, Frekuensi = 1/(1.25ms x 2) = 400Hz

Kusuma Wardana, M.Sc. 109


Contoh:
Temukanlah nilai TCCR1A dan TCCR1B jika
kita ingin memprogram Timer 1 pada mode
4 (CTC mode), tanpa prescaler. Gunakan
clock dr kristal AVR

Kusuma Wardana, M.Sc. 110


Jawab:
TCCR1A = 0000 0000
WGM11 = 0
WGM10 = 0
TCCR1B = 0000 1001
WGM13 = 0
WGM12 = 1
CS12:10 = 001 (no prescaler)

Kusuma Wardana, M.Sc. 111


Contoh:
Berdasarkan penggalan program berikut,
temukanlah frekuensi gelombang kotak yg
dibangkitkan. Asumsi menggunakan XTAL =
8 MHz

Kusuma Wardana, M.Sc. 112


;------------ Timer1 delay
DELAY : LDI R20, 0x00
OUT TCNT1H, R20 ;TCNT1H = 0x00
OUT TCNT1L, R20 ;TCNT1L = 0x00 --> TCNT1 = 0
OUT OCR1AH, R20
LDI R20, 159
OUT OCR1AL, R20 ;OCR1A = 159 = 0x9F
LDI R20, 0x00
OUT TCCR1A, R20 ;WGM11:10 = 00
LDI R20, 0x09
OUT TCCR1B, R20 ;WGM13:12 = 00, normal, pre =1

Kusuma Wardana, M.Sc. 113


AGAIN : IN R20, TIFR ;read TIFR
SBRS R20, OCF1A ;jk OVF1A=1, skip inst slanjutny
RJMP AGAIN
LDI R20, (1<<OCF1A)
OUT TIFR, R20 ;clear flag OCF1A
LDI R19, 0x00
OUT TCCR1B, R19 ;stop timer
OUT TCCR1A, R19
RET

Kusuma Wardana, M.Sc. 114


Jawab:
WGM13:10 = 0100 = 0x04  timer bekerja
pd mode CTC (puncak = OCR1A)
159 + 1 = 160 clock
XTAL = 8 MHz  periode = 0.125 us
Maka delay = 160 X 0.125us = 20 ms
Jadi, Frekuensi = 1/(20us x 2) = 25kHz

Kusuma Wardana, M.Sc. 115


AVR Timer jg dpt digunakan utk 
mencacah, mendeteksi & mengukur waktu
kejadian yg terjd di luar AVR
Ketika Timer digunakan sbg Timer  AVR
menggunakan XTAL sbg sumber frekuensi
Jika digunakan sbg counter  terdpt pulsa
dr luar yg menaikkan isi register TCNTx

Kusuma Wardana, M.Sc. 117


Set CS02:00 mnjd 6 dan 7  sbg counter

Kusuma Wardana, M.Sc. 118


Timer1

Kusuma Wardana, M.Sc. 119


Contoh:
Asumsikan kita memiliki pulsa clock 1 Hz yg
dimasukkan ke pin T0 (PB0). Tuliskan
program pd Counter0 utk mencacah pulsa
falling edge. AVR bekerja pd mode normal.
Tampilkan state dr TCNT0 pd PORTC

PORTC dihub. dgn 8 buah LED


dan input pulsa 1 Hz pd T0 (PB0)

Kusuma Wardana, M.Sc. 120


.INCLUDE “M32DEF.INC”
CBI DDRB, 0 ;T0 (PB0) sbg input
LDI R20, 0xFF
OUT DDRC, R20 ;PORTC sbg output
LDI R20, 0x06
OUT TCCR0, R20 ;sbg counter, falling edge
AGAIN: IN R20, TCNT0
OUT PORTC, R20 ;PORTC = TCNT0
IN R16, TIFR
SBRS R16, TOV0 ;monitor flag TOV0
RJMP AGAIN ;lakukan terus slama flag Timer = 0
LDI R16, 1<<TOV0
OUT TIFR, R16 ;clear TOv0
RJMP AGAIN ;tetap pd keadaan ini

Kusuma Wardana, M.Sc. 121


Kusuma Wardana, M.Sc. 122
Contoh:
Sekarang asumsikan kita menggunakan
Timer1. Pulsa clock dimasukkan pd pin T1
(PB1). Buatlah program utk menghitung
jumlah pulsa pd falling edge dan tampilkan
state dr TCNT1 pd PORTC dan PORTD

PORTC dihub. dgn 8 buah LED


dan input pulsa 1 Hz pd T0 (PB0)

Kusuma Wardana, M.Sc. 123


.INCLUDE “M32DEF.INC”
CBI DDRB, 1 ;T1 (PB1) sbg input
LDI R20, 0xFF
OUT DDRC, R20 ;PORTC sbg output
OUT DDRD, R20 ;PORTD sbg output
LDI R20, 0x00
OUT TCCR1A, R20
LDI R20, 0x06
OUT TCCR1B, R20 ;sbg counter, falling edge
AGAIN: IN R20, TCNT1L ;R20 = TCNT1L
OUT PORTC, R20 ;PORTC = TCNT1L
IN R20, TCNT1H
OUT PORTD, R20 ;PORTd = TCNT1H
IN R16, TIFR
SBRS R16, TOV1 ;monitor flag TOV1
RJMP AGAIN ;lakukan terus slama flag Timer = 0
LDI R16, 1<<TOV1
OUT TIFR, R16 ;clear TOv1
RJMP AGAIN ;tetap pd keadaan ini
Kusuma Wardana, M.Sc. 124
Kusuma Wardana, M.Sc. 125
Mazidi, Naimi and Naimi, 2011, The AVR
Microcontroller and Embedded System: Using
Assembly and C, Prentice Hall
www.atmel.com/
Morton, John, 2007, AVR: An Introductory
Course, Newnes Publisher
Gadre, Dhananjaya, 2001, Programming and
Customizing the AVR Microcontroller, McGraw-
Hill
Daniel J.Pack and Steven F.Barrettt, 2008,
Atmel AVR Microcontroller Primer:
Programming and Interfacing, Morgan &
Claypool Publisher

Kusuma Wardana, M.Sc. 126

Anda mungkin juga menyukai

  • SdA 2-6 Id
    SdA 2-6 Id
    Dokumen195 halaman
    SdA 2-6 Id
    MUHAMMAD ZUMAN ANANTA
    Belum ada peringkat
  • 02-Tipe data-PL
    02-Tipe data-PL
    Dokumen18 halaman
    02-Tipe data-PL
    MUHAMMAD ZUMAN ANANTA
    Belum ada peringkat
  • 4 Strain and Pressure - En.id
    4 Strain and Pressure - En.id
    Dokumen34 halaman
    4 Strain and Pressure - En.id
    MUHAMMAD ZUMAN ANANTA
    Belum ada peringkat
  • Bab 1 - Hukum Ohm
    Bab 1 - Hukum Ohm
    Dokumen2 halaman
    Bab 1 - Hukum Ohm
    MUHAMMAD ZUMAN ANANTA
    Belum ada peringkat
  • JURNAL
    JURNAL
    Dokumen9 halaman
    JURNAL
    Setya
    Belum ada peringkat
  • Bab 4 - Dioda
    Bab 4 - Dioda
    Dokumen9 halaman
    Bab 4 - Dioda
    MUHAMMAD ZUMAN ANANTA
    Belum ada peringkat
  • JURNAL
    JURNAL
    Dokumen9 halaman
    JURNAL
    Setya
    Belum ada peringkat
  • Masyarakat Madani
     Masyarakat Madani
    Dokumen11 halaman
    Masyarakat Madani
    Iim Ni'matul Khoeriyah
    Belum ada peringkat
  • Turunan Biasa
    Turunan Biasa
    Dokumen36 halaman
    Turunan Biasa
    MUHAMMAD ZUMAN ANANTA
    Belum ada peringkat
  • Islam Dan Tantangan Radikalisme
    Islam Dan Tantangan Radikalisme
    Dokumen25 halaman
    Islam Dan Tantangan Radikalisme
    Osalshabilla
    Belum ada peringkat
  • Imtaq
    Imtaq
    Dokumen15 halaman
    Imtaq
    MUHAMMAD ZUMAN ANANTA
    Belum ada peringkat
  • Kerukunan Agama
    Kerukunan Agama
    Dokumen10 halaman
    Kerukunan Agama
    MUHAMMAD ZUMAN ANANTA
    Belum ada peringkat
  • Substansi Akidah Islam
    Substansi Akidah Islam
    Dokumen14 halaman
    Substansi Akidah Islam
    MUHAMMAD ZUMAN ANANTA
    Belum ada peringkat
  • PPPPPT
    PPPPPT
    Dokumen14 halaman
    PPPPPT
    zalfa
    Belum ada peringkat
  • Agama Islam
    Agama Islam
    Dokumen8 halaman
    Agama Islam
    MUHAMMAD ZUMAN ANANTA
    Belum ada peringkat
  • 3.tiga (Download Dan Simulasi)
    3.tiga (Download Dan Simulasi)
    Dokumen14 halaman
    3.tiga (Download Dan Simulasi)
    MUHAMMAD ZUMAN ANANTA
    Belum ada peringkat
  • 3.tiga (Download Dan Simulasi)
    3.tiga (Download Dan Simulasi)
    Dokumen14 halaman
    3.tiga (Download Dan Simulasi)
    MUHAMMAD ZUMAN ANANTA
    Belum ada peringkat
  • Turunan Trigonometri, Logaritmik Dan Majemuk
    Turunan Trigonometri, Logaritmik Dan Majemuk
    Dokumen22 halaman
    Turunan Trigonometri, Logaritmik Dan Majemuk
    MUHAMMAD ZUMAN ANANTA
    Belum ada peringkat
  • 3 Limit
    3 Limit
    Dokumen36 halaman
    3 Limit
    MUHAMMAD ZUMAN ANANTA
    Belum ada peringkat
  • Turunan Trigonometri, Logaritmik Dan Majemuk
    Turunan Trigonometri, Logaritmik Dan Majemuk
    Dokumen22 halaman
    Turunan Trigonometri, Logaritmik Dan Majemuk
    MUHAMMAD ZUMAN ANANTA
    Belum ada peringkat
  • Fungsi
    Fungsi
    Dokumen49 halaman
    Fungsi
    MUHAMMAD ZUMAN ANANTA
    Belum ada peringkat
  • Limit Trigonometri
    Limit Trigonometri
    Dokumen21 halaman
    Limit Trigonometri
    MUHAMMAD ZUMAN ANANTA
    Belum ada peringkat
  • Fungsi
    Fungsi
    Dokumen49 halaman
    Fungsi
    MUHAMMAD ZUMAN ANANTA
    Belum ada peringkat
  • Konsep Karya Ilmiah
    Konsep Karya Ilmiah
    Dokumen11 halaman
    Konsep Karya Ilmiah
    MUHAMMAD ZUMAN ANANTA
    Belum ada peringkat
  • Anatomi Artikel
    Anatomi Artikel
    Dokumen16 halaman
    Anatomi Artikel
    MUHAMMAD ZUMAN ANANTA
    Belum ada peringkat
  • Turunan Biasa
    Turunan Biasa
    Dokumen36 halaman
    Turunan Biasa
    MUHAMMAD ZUMAN ANANTA
    Belum ada peringkat
  • Limit Trigonometri
    Limit Trigonometri
    Dokumen21 halaman
    Limit Trigonometri
    MUHAMMAD ZUMAN ANANTA
    Belum ada peringkat
  • 3 Limit
    3 Limit
    Dokumen36 halaman
    3 Limit
    MUHAMMAD ZUMAN ANANTA
    Belum ada peringkat
  • Artikel ISLLAC UM
    Artikel ISLLAC UM
    Dokumen13 halaman
    Artikel ISLLAC UM
    MUHAMMAD ZUMAN ANANTA
    Belum ada peringkat