Content

Control System

Baca selengkapnya »
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.

Baca selengkapnya »

0 komentar:

Posting Komentar

Diberdayakan oleh Blogger.