اطلاعیه

Collapse
No announcement yet.

PWM در مد Normal

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    PWM در مد Normal

    سلام
    برنامه زیر برای تولید PWM در مد Normal هست که از وقفه مقایسه و وقفه سرریز استفاده شده است فقط سوالی که دارم این هست که اگر وضعیت اولی ی پایه PC.0 یک باشد ، قائدتا در وقفه مقایسه PC.0 صفر میشود و تا وقفه سر ریز ادامه پیدا کرده و در وقفه سر ریز یک مبیشود در نتیجه با زیاد کردن OCR0 باید Duty cycle زیاد و با کم کردن آن باید کم شود در صورتی که برعکس عمل میشود!

    http://8pic.ir/images/yaqbw9edufblcdgyfm1l.jpg

    کد:
    #include <mega32.h>
    
    #define Up PINA.0
    #define Down PINA.1
    
    unsigned char x=127;
    
    interrupt [11] void isr()
    {
      PORTC.0=!(PORTC.0);
    }
    
    interrupt [12] void isr2()
    {
      PORTC.0=!(PORTC.0);
      OCR0=x;
    
    }
    
    void main()
    {
    PORTA=0x03; DDRA=0x00;
    PORTC=0x00; DDRC=0x01;
    OCR0=127;
    TCCR0=0x05;
    TIMSK=0x03;
    #asm("sei");
    while(1)
    {
      if(Up==0 && x<240)
      {
        while(Up==0);
        x+=10;
      }
      
      if(Down==0 && x>58)
      {
        while(Down==0);
        x-=10;
      }
    }  
    }
    برای این که درست بشه وضعیت اولیه PC.0 رو صفر گزاشتم درست شد؟!
لطفا صبر کنید...
X