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