COUNTER
3.1. TIMER/COUNTER0
Timer/Counter0 adalah Timer/Counter 8 bit yang multifungsi. Fitur-fitur dari
Timer/Counter0 pada ATMEGA16 adalah sebagai berikut.
a. Counter 1 kanal.
b. Timer di-nol-kan saat proses pembandingan tercapai (compare match).
c. Sebagai pembangkit gelombang PWM dan pembangkit frekuensi.
d. Clock prescaler 10 bit.
e. Sumber interupsi dari compare match (OCF0) dan overflow (TOV0).
Pengaturan Timer/Counter0 diatur oleh TCCR0 (Timer/Counter Control Register0)
yang dapat dilihat pada Gambar 3.1
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
FOC0
WGM00
COM01
COM00
WGM01
CS02
CS01
CS00
14
Mode
WGM01
(CTC0)
WGM00
(PWM0)
Mode operasi
Timer/Counter
TOP
Update
OCR0
Bendera
TOV0
diset saat nilai
Normal
0xFF
Immediate
MAX
PWM, phase
correct
0xFF
TOP
BOTTOM
CTC
OCR0
Immediate
MAX
Fast PWM
0xFF
TOP
MAX
COM00
0
1
0
1
Keterangan
Operasi port normal, OC0 tidak dihubungkan.
Toggle OC0 saat proses pembandingan tercapai.
Clear OC0 saat proses pembandingan tercapai.
Set OC0 saat proses pembandingan tercapai.
Tabel 3.3. Tabel 2.3 Pengaturan Bit COM01 dan COM00 Mode Fast PWM
COM01
0
0
COM00
0
1
Keterangan
Operasi port normal, OC0 tak dihubungkan.
Reserved
Clear OC0 saat proses pembandingan tercapai, set OC0 pada nilai
TOP.
Set OC0 saat proses pembandingan tercapai, clear OC0 pada nilai
TOP.
Tabel 3.4. Pengaturan Bit COM01 dan COM00 Mode Phase Correct PWM
COM01
0
0
COM00
0
1
Keterangan
Operasi port normal, OC0 tak dihubungkan.
Reserved
Clear OC0 saat proses pembandingan tercapai, yaitu ketika hitungan
15
CS01
0
0
1
1
0
0
1
1
CS00
0
1
0
1
0
1
0
1
Keterangan
Tanpa sumber clock (timer/counter tidak difungsikan).
clkI/O /1 (tanpa prescaling)
clkI/O /8 (dari prescaler)
clkI/O /64 (dari prescaler)
clkI/O /256 (dari prescaler)
clkI/O /1024 (dari prescaler)
Sumber clock eksternal pada pin T0. Clock pada falling edge.
Sumber clock eksternal pada pin T0. Clock pada rising edge.
16
H EAD ER 5
VC C
P5
P6
P7
R ST
GN D
1
2
3
4
5
J IS P
P0
P1
P2
P3
P4
P5
P6
P7
VC C
R 1
R ST
VC C
C 1 22pF
L1
C 3 100nF 1
SW 2
X1
C 2 22pF
1
1
1
1
1
1
1
1
2
2
2
2
2
2
2
2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
U 4
P B 0 (X C K /T 0 )
P A 0 (A D C 0 )
P B 1 (T 1 )
P A 1 (A D C 1 )
P B 2 (IN T 2 /A IN 0 ) P A 2 (A D C 2 )
P B 3 (O C 0 /A IN 1 ) P A 3 (A D C 3 )
P B 4 (S S )
P A 4 (A D C 4 )
P B 5 (M O S I)
P A 5 (A D C 5 )
P B 6 [M IS O )
P A 6 (A D C 6 )
P B 7 [S C K )
P A 7 (A D C 7 )
R ESET
AR EF
VC C
AGN D
GN D
AVC C
XTA L2
P C 7 (T O S C 2 )
XTA L1
P C 6 (T O S C 1 )
P D 0 (R X D )
PC 5
P D 1 (T X D )
PC 4
P D 2 (IN T 0 )
PC 3
P D 3 (IN T 1 )
PC 2
P D 4 (O C 1 B )
P C 1 (S D A )
P D 5 (O C 1 A )
P C 0 (S C L )
P D 6 (IC P )
P D 7 (O C 2 )
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
VC C
ATM EG A16
17
18
Common Anode (CA) artinya untuk menghidupkan LED pada Port D, port D harus
dikirim atau diberi logika 0.
H EAD ER 5
P
P
P
R
G
1
2
3
4
5
VC C
J IS P
P0
P1
P2
P3
P4
P5
P6
P7
VC C
R 1
R ST
VC C
C 1 22pF
L1
C 3 100nF1
SW 2
X1
C 2 22pF
1
1
1
1
1
1
1
1
5
6
7
ST
N D
2
2
2
2
2
2
2
2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
U 4
P B 0 (X C K /T 0 )
P A 0 (A D C 0 )
P B 1 (T 1 )
P A 1 (A D C 1 )
P B 2 (IN T 2 /A IN 0 ) P A 2 (A D C 2 )
P B 3 (O C 0 /A IN 1 ) P A 3 (A D C 3 )
P B 4 (S S )
P A 4 (A D C 4 )
P B 5 (M O S I)
P A 5 (A D C 5 )
P B 6 [M IS O )
P A 6 (A D C 6 )
P B 7 [S C K )
P A 7 (A D C 7 )
R ESET
AR EF
VC C
AGN D
GN D
AVC C
XTA L2
P C 7 (T O S C 2 )
XTA L1
P C 6 (T O S C 1 )
P D 0 (R X D )
PC 5
P D 1 (T X D )
PC 4
P D 2 (IN T 0 )
PC 3
P D 3 (IN T 1 )
PC 2
P D 4 (O C 1 B )
P C 1 (S D A )
P D 5 (O C 1 A )
P C 0 (S C L )
P D 6 (IC P )
P D 7 (O C 2 )
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
VC C
ATM EG A16
19
//DEKLARASI VARIABEL
//-----------------------------------------------------unsigned char led,a;
//-----------------------------------------------------//DEKLARASI SUB RUTIN
//-----------------------------------------------------void InisialisasiTIMER ();
//-----------------------------------------------------//RUTIN UTAMA
//-----------------------------------------------------void main (void)
{
DDRD = 0xff;
led=0x00;
InisialisasiTIMER();
while(1)
{
a = TCNT1L + TCNT1H;
if (a == 0x06)
{
led = PIND;
PORTD=~led;
TCNT1L=0x00;
TCNT1H=0x00;
}
}
}
//-----------------------------------------------------//SUB RUTIN INISIALISASI TIMER1
//-----------------------------------------------------void InisialisasiTIMER ()
{
TCNT1L=0x00;
TCNT1H=0x00;
TCCR1A=0x00;
TCCR1B=0x07;
}