Percobaan
Timer
Timer/Counter pada AT Mega 8535/16 terdiri dari 3 buah.
Yaitu Timer/Counter0 (8bit ), Timer/Counter1 ( 16 bit ), dan Timer/Counter2
( 8 Bit ).
Timer/Counter0
Timer/Counter 0 adalah 8-bit Timer/Counter yang multifungsi. Deskripsi
untuk Timer/Counter 0 pada ATmega 8535 adalah sebagai berikut:
a. Sebagai Counter 1 kanal.
b. Timer di-nol-kan saat match compare (auto reload).
c. Dapat menghasilkan gelombang PWM.
d. Frekuensi generator.
e. Prescaler 10 bit untuk timer.
f. Interupsi timer yang disebabkan timer overflow dan match compare.
Pengaturan Timer/Counter 0 diatur oleh TCCR0 (Timer/Counter kontrol
Register0) yang dapat dilihat pada Tabel berikut.
Prosedure percobaan:
1. Hubungkan JUMPER yang menghubungkan PB0 dan Clock
dari astabil 555, atur frekuensi clock yang paling rendah.
2. Lakukan konfigurasi codevision untuk mode 0 (mode normal) yang akan
mencacah pulsa dan tampung pada register TCNT0.
1. Percobaan counter dengan
display LED
Pada percobaan ini data counter pada TCNT0 akan dikeluarkan
pada display LED, pastikan JUMPER LED telah terhubung, dan lakukan konfigurasi
pada codevision untuk PORTC.
#include<mega8535.h> void main() { PORTC=0xFF; DDRC=0xFF; TCCR0=0b00000110; TCNT0=0; while(1) { PORTC=~TCNT0; } }
2. Percobaan Counter dengan
Display 7 Segmen
Pada percobaan ini, akan menggunakan fungsi COUNTER
pada TIMER0 dengan mengatur sumber clock pada T0 atau PB0, sehingga
pada saat ada transisi High to Low maka akan menaikkan isi register
TCNT0. Agar nilai TCNT0 dapat ditampilkan pada 7 segmen maka harus dilakukan
pembagian nilai decimal ke Ratusan, Puluhan dan Satuan. Karena counter
yang digunakan adalah TIMER0 8 bit, maka nilai cacahan yang dimungkinkan
adalah 000 sampai dengan 255.
#include <mega8535.h> #include <delay.h> Unsigned int ubah,data, sat,pul,rat; // Declare your
global variables here
void ubah_ke_format7segment()
//fungsi untuk mengubah kedalam format 7segment
{
if (ubah==0){ubah=0xc0;}
if (ubah==1){ubah=0xf9;}
if (ubah==2){ubah=0xa4;}
if (ubah==3){ubah=0xb0;}
if (ubah==4){ubah=0x99;}
if (ubah==5){ubah=0x92;}
if (ubah==6){ubah=0x82;}
if (ubah==7){ubah=0xf8;}
if (ubah==8){ubah=0x80;}
if (ubah==9){ubah=0x90;}
} void tampil_7segment()
{
PORTC=rat;//mengirimkan data kedigit6
PORTD.5=1;
PORTD.6=0;
PORTD.7=0;
delay_ms(10);
PORTC=pul;//mengirimkan data kedigit7
PORTD.5=0;
PORTD.6=1;
PORTD.7=0;
delay_ms(10);
PORTC=sat;//mengirimkan data kedigit8
PORTD.5=1;
PORTD.6=1;
PORTD.7=0;
delay_ms(10);
//lamanya waktu scanning ditentukan oleh intruksi delay
} void main(void)
{
PORTC=0x00;
DDRC=0xFF;
PORTD=0x00;
DDRD=0b11100000; // Timer/Counter 0 initialization
// Clock source: T0 pin Falling Edge
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x06;
TCNT0=0x00;
OCR0=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00; ACSR=0x80;
SFIOR=0x00; while(1)
{
data = TCNT0;
sat = data % 10; // sat = sisa dari data dibagi 10
pul = data / 10;
pul = pul % 10;
rat = data / 100;
rat = rat % 10;
//
ubah=sat;
ubah_ke_format7segment();
sat=ubah;
//
ubah=pul;
ubah_ke_format7segment();
pul=ubah;
//
ubah=rat;
ubah_ke_format7segment();
rat=ubah;
//
tampil_7segment();
}
}
NEXT
|