Jumat, 02 Maret 2012

Timer Counter pada ATmega8535


  1.  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. 1 set Personal Computer/Laptop yang sudah berisi program Code Vision dan Khazama
  2. 1 buah ISP Downloader AVR
  3. 1 buah sistem minimum AVR
  4. 1 buah I/O
  5. 1 buah kabel printer USB


3.      PROSEDUR
A.    Timer
  1. Rangkailah peralatan yang diperlukan seperti dalam Gambar 7.1. Hubungkan soket jumper PORTC pada minimum system dengan soket jumper pada OUTPUT LED.
Gambar 1.1 Blok diagram antarmuka mikrokontroler dengan I/O
  1. Buka program Code Vision AVR
  2. 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
  1. 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")

  1. 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;}
}

  1. Perhatikan dan catat nyala LED.
  2. Lakukan hal serupa dengan Timer1 dan Timer2
  3. Ubah nilai TCNT sehingga menghasilkan timer 1 detik dengan Timer 16 bit(Timer1).

B.     Counter
  1. 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

  1. Buka program Code Vision AVR
  2. 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
  1. 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")

  1. 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;}
}

  1. Sambungkan PIN B.0 ke push button
  2. Lalu tekan push button pada pin B.0
  3. Hitung berapa kali push button ditekan sampai LED menyala/mati. Apakah sama dengan nilai TCNT yang dimasukkan (“TCNT0=0xFB;”).
  4. Perhatikan dan catat nyala LED.
  5. Lakukan hal serupa dengan Timer1 dan Timer2
  6. Ubah nilai TCNT sehingga menghasilkan counter sesuai nilai masukan yang diinginkan.

      4.  DATA HASIL PERCOBAAN

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;}
}




 
Design by Wordpress Theme | Bloggerized by Free Blogger Templates | coupon codes