سلام
برنامه زیر برای تولید PWM در مد Normal هست که از وقفه مقایسه و وقفه سرریز استفاده شده است فقط سوالی که دارم این هست که اگر وضعیت اولی ی پایه PC.0 یک باشد ، قائدتا در وقفه مقایسه PC.0 صفر میشود و تا وقفه سر ریز ادامه پیدا کرده و در وقفه سر ریز یک مبیشود در نتیجه با زیاد کردن OCR0 باید Duty cycle زیاد و با کم کردن آن باید کم شود در صورتی که برعکس عمل میشود!
http://8pic.ir/images/yaqbw9edufblcdgyfm1l.jpg
برای این که درست بشه وضعیت اولیه PC.0 رو صفر گزاشتم درست شد؟!
برنامه زیر برای تولید 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;
}
}
}

