سلام دوستان من میخوام یک مدار فیدبک دار بسازم که که شامل یک منبع ولتاژیه که به یه FET وصل شده و از طرف دیگش ولتاژ خروجی رو تحویل میگریم حدف من ثابت نگه داشتن این ولتاژ خروجی تحت کم و زیاد کردن منبع یا هر عامل دیگه مثلا اضافه کردن مصرف کننده. فیدبک من شامل یه مبدل ولتاژ آنالوگ به دیجیتاله که از خزوجی نمونه میگیره و بصورت دیجیتال به میکرو میده و میکرو با توجه به در نظر گرفتن یه ولتاژ خاص موج PWM با دیوتی سایکل متفاوت به سمت سوئیچ (FET) هدایت میکنه تا ولتاژ خروجی مثلا سر 5 ولت ثابت بمونه برنامه ای نوشتم اینه
#include <mega16.h>
#include <delay.h>
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0xEC;
// Place your code here
}
// Timer 0 output compare interrupt service routine
interrupt [TIM0_COMP] void timer0_comp_isr(void)
{
// Place your code here
}
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=Out
// State7=T State6=T State5=T State4=T State3=0 State2=T State1=T State0=0
PORTB=0x00;
DDRB=0x09;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 1000.000 kHz
// Mode: Fast PWM top=FFh
// OC0 output: Non-Inverted PWM
TCCR0=0x6A;
TCNT0=0xEC;
OCR0=0x01;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x03;
ACSR=0x80;
SFIOR=0x00;
#asm("sei"
while (1)
{
if(PINA<0x05)
OCR0++;
else
OCR0--;
delay_us(5);
};
}
که نمیدونم درست هست یا نه
چون تو پروتئوس جواب نداد
و یه مشکل دیگه که دارم اینه که چطوری آنالوگ رو به دیجیتال تبدیل کنم البته بطور پیش فرض از روش نردبانی استفاده کردم شمای کل مدار رو میذارم.
ممنون اگه کمکم کنید و مشکل کارمو بگین.
دوتا منبع بالایی 10 ولت و اونی که واسه آی سی هست 5 ولت
#include <mega16.h>
#include <delay.h>
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0xEC;
// Place your code here
}
// Timer 0 output compare interrupt service routine
interrupt [TIM0_COMP] void timer0_comp_isr(void)
{
// Place your code here
}
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=Out
// State7=T State6=T State5=T State4=T State3=0 State2=T State1=T State0=0
PORTB=0x00;
DDRB=0x09;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 1000.000 kHz
// Mode: Fast PWM top=FFh
// OC0 output: Non-Inverted PWM
TCCR0=0x6A;
TCNT0=0xEC;
OCR0=0x01;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x03;
ACSR=0x80;
SFIOR=0x00;
#asm("sei"

while (1)
{
if(PINA<0x05)
OCR0++;
else
OCR0--;
delay_us(5);
};
}
که نمیدونم درست هست یا نه
چون تو پروتئوس جواب نداد
و یه مشکل دیگه که دارم اینه که چطوری آنالوگ رو به دیجیتال تبدیل کنم البته بطور پیش فرض از روش نردبانی استفاده کردم شمای کل مدار رو میذارم.
ممنون اگه کمکم کنید و مشکل کارمو بگین.
دوتا منبع بالایی 10 ولت و اونی که واسه آی سی هست 5 ولت

دیدگاه