Tidak bosan-bosannya saya menyampaikan sebuah materi , agar materi ini dapat bermanfaat kepada kawan-kawan !!!
Pada Post ini saya akan membahas PWM dengan Adjustable Frekwnsi dan duty Cycle ( 7 kHz sampai 300 khz) . Langsung saja ke MAteri , Check This Out kawan !!!
PWM dengan Adjustable Frekwnsi 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 frekwensi yang dapat berubah-ubah . Perubahan frekwensi 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.
- Rangkaian lah gambar dibawah ini menggunakan Proteus.
- Tuliskan sintaks program berikut , kemudian lakukan kompilasi dan uploud program.
int setCycles;
int setDuty;
void set (int cycles, float duty){
char oldSREG;
int dutyCycle = cycles * duty ;
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 * duty ;
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);
}
}
- Setelah itu , uploud program ini di simulasi proteus .
Terima kasih kunjungannya !!!