ย
ย
ย
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(); }
ย
ย