PERCOBAAN I
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 gelombangnya. Lebar duty cycle akan diatur oleh potensiometer yang terhubung pada pin A0. akan digunakan fungsi analogWrite yang berfungsi untuk mengeluarkan sinyal gelombang pada pin Pulse Width Modulation (PWM)
Buatlah rangkaian seperti gambar dibawah ini
Buatlah program seperti dibawah ini dengan menggunakan software Arduino
Hasil dari percobaan I
PERCOBAAN II
GENERATOR GELOMBANG DENGAN ADJUSTABLE FREKUENSI
Pada percobaan kali ini gelombang yang 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.
Buatlah rangkaian seperti dibawah ini pada software ISIS
Buatlah program seperti dibawah ini dengan menggunakan software Arduino
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);
}
}
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);
}
}
Hasil dari percobaan II
PERCOBAAN I
PWM DENGAN ADJUSTABLE FREKUENSI DAN DUTY CYCLE
(70 KHZ sampai 300 KHZ)
(70 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.
Buatlah rangkaian seperti dibawah ini pada software ISIS
Buatlah program seperti dibawah ini dengan menggunakan software Arduino
int setCycles;
int setDuty;
void set(int cycles, float duty){
char oldSREG;
int dutyCycle = cycles
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);
int temp_duty = analogRead(A1);
if (temp_cycles != setCycles || temp_duty != setDuty){
setCycles = temp_cycles;
setDuty = temp_duty;
set(setCycles, setDuty / 1024.0);
}
}
int setDuty;
void set(int cycles, float duty){
char oldSREG;
int dutyCycle = cycles
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);
int temp_duty = analogRead(A1);
if (temp_cycles != setCycles || temp_duty != setDuty){
setCycles = temp_cycles;
setDuty = temp_duty;
set(setCycles, setDuty / 1024.0);
}
}
Hasil dari percobaan III
Tidak ada komentar:
Posting Komentar