- DASAR TEORI
Timer/counter
dalam Atmega8535 ada 3 yaitu:
·
Timer/counter 0
·
Timer/counter 1
·
Timer/counter 2
Interrupt
timer berasal dari dua sumber yaitu:
1.
Overflow interrupt,
dimana interrupt terjadi jika TCNTn mencapai 255 untuk timer 8 bit dan 65535
untuk timer 16 bit.
2.
Compare match
interrupt, dimana interrupt terjadi jika nilai OCR sama dengan TCNTn.
Pada
dasarnya Timer hanya menghitung pulsa clock. Frekuensi pulsa clock yang
dihitung tersebut bisa sama dengan frekuensi kristal yang digunakan atau dapat
diperlambat menggunakan prescaler dengan faktor 8, 64, 256, atau 1024.
Contohnya
jika sebuah sistem mikrokontroler menggunakan kristal dengan frekuensi 4 MHz
dan timer yang digunakan adalah timer 8 bit, maka maksimum waktu timer yang
bisa dihasilkan adalah:
tMAX = 1/fCLK x (FFh+1)
= 1/4.000.000 x (255+1)
= 0,000064 s
Untuk
menghasilkan timer yang lebih lama dapat digunakan prescaler, misalnya 1024,
maka maksimum waktu timer yang bisa dihasilkan adalah:
tMAX = 1/fCLK x (FFh+1) x N
= 1/4.000.000 x (255+1) x 1024
= 0,065536 s
Untuk
menghitung nilai TCNT supaya menghasilkan waktu timer tertentu dipergunakan
rumus berikut:
TCNT = (1 + FFh) –
(Ttimer x fCLK)/N
Dimana:
TCNT = nilai Timer (Heksadesimal)
fCLK = Frekuensi
clock kristal yang digunakan (Hz)
Ttimer = Waktu timer yang diinginkan (detik)
N = prescaler (1,8,64,256,1024)
1+FFh = nilai maksimum timer adalah FFh dan overflow saat
FFh ke 00h
2.
ALAT DAN BAHAN
YANG DIGUNAKAN
- 1 set
Personal Computer/Laptop yang sudah berisi program Code Vision dan Khazama
- 1 buah ISP
Downloader AVR
- 1 buah
sistem minimum AVR
- 1 buah I/O
- 1 buah
kabel printer USB
3.
PROSEDUR
A. Timer
- Rangkailah peralatan yang diperlukan seperti dalam Gambar 7.1. Hubungkan soket jumper PORTC pada minimum system dengan soket jumper pada OUTPUT LED.
- Buka
program Code Vision AVR
- Buatlah
project baru. Pada saat mengeset chip dan clock, set juga bagian PORTC
untuk LED serta Timer. Kemudian simpanlah file tersebut.
Gambar 7.3 Setting LED dan Timer
- Perhatikan
blok program berikut.
//
Timer/Counter 0 initialization
//
Clock source: System Clock
//
Clock value: Timer 0 Stopped
//
Mode: Normal top=FFh
//
OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0xD5;
OCR0=0x00;
// Timer(s)/Counter(s)
Interrupt(s) initialization
TIMSK=0x01;
// Global enable interrupts
#asm("sei")
- Tuliskan
script berikut dalam interrupt:
// Timer 0 overflow interrupt
service routine
interrupt [TIM0_OVF] void
timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0xD5;
// Place your code here
if (PINC==0)
{PORTC=0xFF;}
else
{PORTC=0x00;}
}
- Perhatikan
dan catat nyala LED.
- Lakukan hal serupa dengan Timer1 dan Timer2
- Ubah nilai TCNT sehingga menghasilkan timer 1 detik dengan Timer 16
bit(Timer1).
B. Counter
- Rangkailah
peralatan yang diperlukan seperti dalam Gambar 7.1. Hubungkan soket jumper PORTC pada minimum system dengan soket jumper pada OUTPUT LED. Hubungkan
Gambar 1.1 Blok diagram antarmuka mikrokontroler dengan I/O
- Buka
program Code Vision AVR
- Buatlah
project baru. Pada saat mengeset chip dan clock, set juga bagian PORTC
untuk LED serta Timer. Kemudian simpanlah file tersebut.
Gambar 7.3 Setting LED dan Timer
- Perhatikan
blok program berikut.
//
Timer/Counter 0 initialization
//
Clock source: T0 pin Falling Edge
//
Mode: Normal top=FFh
//
OC0 output: Disconnected
TCCR0=0x06;
TCNT0=0xFB;
OCR0=0x00;
// Timer(s)/Counter(s)
Interrupt(s) initialization
TIMSK=0x01;
// Global enable interrupts
#asm("sei")
- Tuliskan
script berikut dalam interrupt:
// Timer 0 overflow interrupt
service routine
interrupt [TIM0_OVF] void
timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0xFB;
// Place your code here
if (PINC==0)
{PORTC=0xFF;}
else
{PORTC=0x00;}
}
- Sambungkan
PIN B.0 ke push button
- Lalu tekan
push button pada pin B.0
- Hitung
berapa kali push button ditekan sampai LED menyala/mati. Apakah sama
dengan nilai TCNT yang dimasukkan (“TCNT0=0xFB;”).
- Perhatikan
dan catat nyala LED.
- Lakukan hal serupa dengan Timer1 dan Timer2
- Ubah nilai TCNT sehingga menghasilkan counter sesuai nilai masukan yang diinginkan.
Timer : Tampilan LED dengan nilai 1 detik maka
LED nyala perlahan dengan menggunakan Timer 1 (16 bit).
Counter : Inputan push button pada port B.
perbedaannya adalah clock source “ to pin falling edge” dan timer value FB (4
kali tekan). Hasilnya ketika push button ditekan 4 kali maka nyala led pada akan
menyala dan jika ditekan lagi 4 kali maka akan mati.
5. PEMBAHASAN
TIMER:
Untuk
TIMER dapat kita peroleh untuk delay waktu 1 detik dengan Timer 1 (16 bit) yaitu 65535.
Mempermudah
kita untuk memprogram maka dapat diperoleh rumus sebagai berikut:
TCNT = (1 + FFh) – (Ttimer x fCLK)/N
= (1 + 65535) - (1 x 4.000.000)/256
= 65535 – 4.000.000/256
= 65535 – 15625 = 49910 dengan nilai
Hex = C2F6
Program
// Timer 1 overflow interrupt service
routine
interrupt [TIM1_OVF] void
timer1_ovf_isr(void)
{
// Reinitialize Timer 1 value
TCNT1H=0x0C;
TCNT1L=0xD5;
// Place your code here
if (PINC==0)
{PORTC=0xFF;}
else
{PORTC=0x00;}
}
COUNTER:
Untuk menentukan nilai dari counter yaitu
kita harus mengganti nilai dari TCNT0. Perhitungannya yaitu nilai maksimal dari
counter yaitu FF, sehingga misalkan
kita menginginkan nilai dari counter kita 4 yaitu dengan mengurangi nilai
maksimal dengan nilai counter yang kita inginkan:
FF – 4 = FB
Jadi nilai yang
harus kita masukkan pada TCNT0 adalah FB.
// Timer 0 overflow interrupt service
routine
interrupt [TIM0_OVF] void
timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0xFB;
// Place your code here
if (PINC==0)
{PORTC=0xFF;}
else
{PORTC=0x00;}
}
5 komentar:
kalo counternya didapat dari inputan misalnya ldr or potodioda gimana mas?
Bisa aja, tinggal kita beri tambahan rangkaian komparator pada sensor yang nantinya masuk ke pin mikro. Atau kalau g mau susah2 nambah rangkaian bisa menggunakan adc nya mikro.
mas. kalau menggunakan LDR untuk mematikan dan menyalakan lampu berdasarkan intensias cahaya... kira kira langkah langkah yang harus dilakukan apa ya mas. karena saya baru memulai didunia elektronika
maaf mas kalo kita gunakan 2 timer gmn mas ? ditambah input infrared, inisialisasinya gmn mas ?
mas mau minta tolong,ni mau buat jam digital pake 7 segmen,pkai rtc ds 1307,.tapi bingung cara buat program settingnya,rencana pkai 4 setting,tmbol 1 buat menu.tmbl 2 buat jalan,tmbol 3 up,tmbol 4 down,...tolog bantu mas.rencana PORTA.0 dan 1 adalah scl dan sda..terus PORTA.2-5 untuk setting yg trhbung push btton..
Posting Komentar