Welcome

Welcome to My Blog

Thursday, 12 January 2017

MEMBANGKITKAN GELOMBANG KOTAK DENGAN FREKUENSI TERTENTU PADA ATMEGA8535


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.

Register TCCR0

·       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.
Deskripsi bit Waveform Generation Mode

·       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