Gelombang kotak adalah gelombang periodic non
sinusoidal, dimana amplitudonya berubah pada frekuensi yang stabil antara nilai
maksimum dan minimumnya, dengan durasi yang sama. Transisi dari minimum menuju
maksimum adalah langsung untuk gelombang kotak yang ideal. Gelombang yang sama
tetapi durasi maksimum dan minimumnya berbeda disebut gelombang pulsa.
Pada ATMega8535 terdapat fitur untuk membangkitkan
gelombang kotak dengan menggunakan timer. Terdapat tiga jenis timer, yaitu
timer 0 (8 bit), timer 1 (16 bit), dan timer 2 (8 bit). Pada artikel ini,
digunakan timer 0 dengan mode operasi CTC (Clear Timer on Compare Match).
Sebelum memulai program, maka kita harus mengetahui
register-register yang digunakan untuk membangkitkan gelombang kotak. Pertama
ada register TCCR0 untuk menginisialisasi mode operasi, output, dan prescaler.
·
Bit 7 – FOC0: Force Output
Compare
Bit 7 dapat kita
hiraukan, tetapi untuk pastinya lebih baik bit ini diberi logic 0.
·
Bit 6, 3 – WGM01,00 : Waveform
Generation Mode
Bit ini untuk
mengatur mode operasi timer 0. Berikut tabel untuk mode operasinya :
Karena kita ingin
menggunakan mode operasi CTC, maka bit 6 dan 3 diberi logic 1, 0 secara
berurutan.
·
Bit 5, 4 – COM01,00 : Compare
Match Output Mode
Bit ini mengatur
bagaimana output pada pin Output Compare (OC0). Berikut adalah tabel pengaturan
COM01,00 untuk mode normal dan CTC :
Karena gelombang kotak
adalah gelombang yang amplitude maksimum dan minimumnya memiliki frekuensi yang
sama secara bergantian, maka digunakan mode Toggle OC0 pada Compare Match
dengan menset bit COM01,00 dengan 0, 1 secara berurutan.
·
Bit 2:0 – CS02:0 : Clock Select
Bit ini untuk
memilih sumber clock yang digunakan timer. Berikut tabelnya :
Clock select ini
merupakan pembagi yang dapat menentukan frekuensi output. Semakin besar
prescaler yang digunakan, maka semakin kecil frekuensi yang dapat didapatkan.
Lebih jelasnya ada pada bagian cara kerja.
Cara Kerja :
Pada timer0
terdapat register OCR0 dan TCNT0. Register OCR0 digunakan untuk memanipulasi
resolusi counter yaitu nilai TCNT0. Counter akan terus bertambah dari nilai
terendah (0x00) sampai nilai compare match antara TCNT0 dan OCR0, lalu counter
akan di clear. Jadi nilai TOP dari mode CTC adalah saat nilai compare match
antara TCNT0 dan OCR0. Nilai TCNT0 itu sendiri adalah dari 0x00 sampai 0xFF,
demikian juga dengan OCR0.
Gelombang output
OCn dimana n = 0 (timer0) adalah toggle. Output akan toggle saat nilai counter
mencapai nilai TOP. OC0 ini tedapat pada PORTB.3 pada kongfigurasi pin
ATMega8535.
Sebuah interup
dapat dipanggil setiap counter mencapai nilai TOP menggunakan OCF0 flag.
Untuk menentukan
frekuensi output gelombang kotak pada mode CTC dapat digunakan persamaan sebagai berikut :
Dimana N adalah
prescaler (1, 8, 64, 256, atau 1024), Fclk_I/O merupakan frekuensi oscillator
yang digunakan pada ATMega8535.
Berikut merupakan
contoh program untuk membuat gelombang kotak pada PORTB.3 dengan frekuensi 50Hz
(Dengan menggunakan persamaan diatas maka diperoleh nilai OCR0 yaitu 0x26) :
#include
<mega8535.h>
void main(void)
{
// Input/Output
Ports initialization
// Port A
initialization
PORTA=0x00;
DDRA=0x00;
// Port B
initialization
PORTB=0x00;
DDRB=0x08;
// Port C
initialization
PORTC=0x00;
DDRC=0x00;
// Port D
initialization
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0
initialization
// Clock source:
System Clock
// Clock value:
3,906 kHz
// Mode: CTC
top=OCR0
// OC0 output:
Toggle on compare match
TCCR0=0x1D;
TCNT0=0x00;
OCR0=0x26;
while (1)
{
// Place your code here
OCR0 = 0x26;
}
}
Berikut adalah
rangkaian dan gelombang output pada simulasi proteus :
Pada oscilloscope
dapat dilihat bahwa periode gelombangnya adalah 1m x 20 yaitu 20ms. Maka
frekuensinya 1/20ms = 50Hz. Ini berarti program yang dibuat akurat dengan hasil
yang diinginkan.
No comments:
Post a Comment