Kamis, 05 Desember 2013

TIMER SEBAGAI GENERATOR GELOMBANG (Arduino)

Percobaan:
7.1 Generator Gelombang dengan Adjustable Duty Cycle
            Pada percobaan kali ini akan dibuat program untuk mengeluarkan gelombang kotak
pada pada pin 9 (OC1A) . Gelombang yang akan dikeluarkan pada pin 9 adalah gelombang berbentuk kotak dengan duty cycle dapat diatur lebarnya. Lebar duty cycle akan diatur oleh potensiometer yang terhubung pada pin A0. Pada percobaan kali ini akan digunakan fungsi analogWrite yang berfungsi untuk mengeluarkan sinyal gelombang pada pin Pulse Width Modulation (PWM).

Gambar Rangkaian



Syntax program

int val = 0;
void setup() {
Serial.begin(9600);
pinMode(9, OUTPUT);
}
void loop() {
val = analogRead(A0);
analogWrite(9, val/4);
Serial.print("PWM Value = ");
Serial.println(val,DEC);
delay(500);
}

7.2 Generator Gelombang dengan Adjustable Frekuensi
Pada percobaan kali ini gelombang yang akan dikeluarkan pada pin 9 adalah  gelombang berbentuk kotak dengan duty cycle yang besarnya tetap yaitu 50%, namun besarnya frekuensi dapat berubah-ubah. Perubahan frekuensi akan diatur oleh potensiometer yang terhubung pada pin A0. Program pada percobaan kali ini akan menggunakan konfigurasi register untuk mengeluarkan sinyal gelombang pada pin PWM.

Gambar Rangkaian


Syntax Program

int setCycles;
void set(int cycles) {
char oldSREG;
int dutyCycle = cycles * 0.5;


if (dutyCycle < 6) {
dutyCycle = 6;
}
if (dutyCycle >1015) {
dutyCycle = 1015;
}
if (cycles < 50) {
cycles = 50;
}
oldSREG = SREG;
cli();
ICR1 = cycles;
OCR1A = dutyCycle; SREG = oldSREG;
}


void setup() { TCCR1A = 0;
TCCR1B = _BV(WGM13);
TCCR1B &= ~(_BV(CS10) | _BV(CS11) | _BV(CS12)); TCCR1B |= _BV(CS10);
DDRB |= _BV(PORTB1); TCCR1A |= _BV(COM1A1);
}
void loop() {
int temp_cycles= analogRead(A0);


if (temp_cycles!= setCycles ) {
setCycles = temp_cycles;
set(setCycles);
}
}
PWM dengan Adjustable Frekuensi dan Duty cycle (7 KHz sampai 300 KHz)
Pada percobaan kali ini gelombang yang akan dikeluarkan pada pin 9 adalah gelombang berbentuk kotak dengan duty cycle dan frekuensi yang dapat berubah-ubah. Perubahan frekuensi akan diatur oleh potensiometer yang terhubung pada pin A0. Perubahan duty cycle akan diatur oleh potensiometer yang terhubung pada pin A1. Program pada percobaan kali ini akan menggunakan konfigurasi register untuk mengeluarkan sinyal gelombang pada pin PWM.

Gambar Rangkaian


Syntak Program
int setCycles;
int setDuty;
void set(int cycles, float duty) {
char oldSREG;
int dutyCycle =
if (dutyCycle <
cycles * duty;
6) {
dutyCycle = 6;
}
if (dutyCycle >
1015) {
dutyCycle = 1015;
}
if (cycles < 50) {
cycles = 50;
}
oldSREG = SREG;
cli();
ICR1 = cycles; OCR1A = dutyCycle;
SREG = oldSREG;
}
void setup() { TCCR1A = 0;
TCCR1B = _BV(WGM13);
TCCR1B &= ~(_BV(CS10) | _BV(CS11) | _BV(CS12));
TCCR1B |= _BV(CS10); DDRB |= _BV(PORTB1); TCCR1A |= _BV(COM1A1);
}
void loop() {
int temp_cycles
int temp_duty =
if (temp_cycles
= analogRead(A0);
analogRead(A1);
!= setCycles || temp_duty != setDuty) {
setCycles = temp_cycles;
setDuty = temp_duty;
set(setCycles, setDuty / 1024.0);
}
}

0 komentar:

Posting Komentar

Twitter Delicious Facebook Digg Stumbleupon Favorites More