| Item | Description | |
| Mata Kuliah | Sistem Mikrokontroler | |
| Dosen Pengampu | Mochamad Faizun | |
| Software Simulasi | ISIS Proteus dan CVAVR | |
| Judul | Membuat Sinyal PWM (Pulse Wide Modulation) | |
| Desktripsi | Membuat sinyal PWM dengan ketentuan sebagai berikut : | |
| 1. OCR0 dengan dutycycle 15% | ||
| 2. OCR1A dengan dutycycle 30% | ||
| 3. OCR1B dengan dutycycle 60% | ||
| 4. OCR2 dengan dutycycle 90% | ||
Gambar 1
rangkaian dan simulasi
Gambar 2
hasil sinyal PWM
Kondisi :
1. LCD LM016 akan menampilkan duty cycle pada masing-masing PWM.
2. Osiloskop akan menampilkan hasil sinyal PWM.
Listing Program pada CVAVR adalah sebagai berikut.
#include
<mega16.h>
#include
<stdio.h>
#asm
.equ __lcd_port=0x15
;PORTC
#endasm
#include
<lcd.h>
unsigned int OC0, OC1A,
OC1B, OC2;//deklarasi
variabel untuk menyimpan nilai OCR
unsigned int dc_OCR0,
dc_OCR1A, dc_OCR1B, dc_OCR2;//deklarasi variabel untuk
menyimpan nilai dutycycle
unsigned char
wadah[5];
interrupt [TIM0_OVF]
void timer0_int(void)
{
lcd_gotoxy(0,0);
lcd_putsf("OC0");
dc_OCR0=(OC0*100)/255;
sprintf(wadah,"%3d",dc_OCR0);//menampilkan nilai dutycycle OC0 pada LCD LM016
lcd_gotoxy(3,0);
lcd_puts(wadah);
lcd_putsf("%");
}
interrupt [TIM1_OVF]
void timer1_ovf_isr(void)
{
lcd_gotoxy(8,0);
lcd_putsf("OC1A");
dc_OCR1A=(OC1A*100)/255;
sprintf(wadah,"%3d",dc_OCR1A);
//menampilkan nilai dutycycle
OC1A pada LCD LM016
lcd_gotoxy(12,0);
lcd_puts(wadah);
lcd_putsf("%");
lcd_gotoxy(8,1);
lcd_putsf("OC1B");
dc_OCR1B=(OC1B*100)/255;
sprintf(wadah,"%3d",dc_OCR1B);
//menampilkan nilai dutycycle
OC1B pada LCD LM016
lcd_gotoxy(13,1);
lcd_puts(wadah);
lcd_putsf("%");
}
interrupt
[TIM1_COMPB] void timer1_compb_isr(void)
{
dc_OCR1B=(OC1B*100)/255;
}
interrupt [TIM2_OVF]
void timer2_int(void)
{
lcd_gotoxy(0,1);
lcd_putsf("OC2");
dc_OCR2=(OC2*100)/255;
sprintf(wadah,"%3d",dc_OCR2);//menampilkan nilai dutycycle OC2 pada LCD LM016
lcd_gotoxy(3,1);
lcd_puts(wadah);
lcd_putsf("%");
}
void main(void)
{
DDRB.3=1;
DDRD.7=1;
DDRD.4=1;
DDRD.5=1;
lcd_init(16);
TCCR0=0x61;
TCCR2=0x61;
TCCR1A=0x61;
TCCR1B=0x61;
TIMSK=0x47;
#asm("sei")
while (1)
{
OCR0=39;
OC0=OCR0;
OCR1A=78;
OC1A=OCR1A;
OCR1B=153;
OC1B=OCR1B;
OCR2=230;
OC2=OCR2;
};
}
Demikian program yang dapat saya bagikan. Semoga bermanfaat bagi
kita semua.








0 komentar:
Posting Komentar