سلام من میخوام که دو تا سروو رو باهم از طریق یه میکرو atmega 8 کنترل کنم . با این برنامه تونستم با تایمر شماره 1 * timer1* یه سروو رو زاویه بدم ولی تنظیمات تایمر2 با تایمر 1 فرق داره و جواب نمیده ، باید چکار کنم ؟ خیلی ممنون میشم زود جواب بدین
اینم متن برنامه
#include <mega16.h>
#include <delay.h>
#define xtal 16000000
void main(void)
{
PORTD=0x00;
DDRD=0x20;
PORTA=0x00;
DDRA=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 2000.000 kHz
// Mode: Ph. & fr. cor. PWM top=ICR1
// OC1A output: Non-Inv.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x80;
TCCR1B=0x12;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x4E;
ICR1L=0x20;
while (1)
{
if(PINA.0==1)
{
OCR1A = OCR1A+1;
delay_ms(1);
if(OCR1A>2000){OCR1A=2000;}
}
if(PINA.1==1)
{
OCR1A = OCR1A-1;
delay_ms(1);
if(OCR1A<1000){OCR1A=1000;}
}
if(PINA.0!=1 && PINA.1!=1){
OCR1A = 1500;
}
}
}
ویرایش
اینم متن برنامه
#include <mega16.h>
#include <delay.h>
#define xtal 16000000
void main(void)
{
PORTD=0x00;
DDRD=0x20;
PORTA=0x00;
DDRA=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 2000.000 kHz
// Mode: Ph. & fr. cor. PWM top=ICR1
// OC1A output: Non-Inv.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x80;
TCCR1B=0x12;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x4E;
ICR1L=0x20;
while (1)
{
if(PINA.0==1)
{
OCR1A = OCR1A+1;
delay_ms(1);
if(OCR1A>2000){OCR1A=2000;}
}
if(PINA.1==1)
{
OCR1A = OCR1A-1;
delay_ms(1);
if(OCR1A<1000){OCR1A=1000;}
}
if(PINA.0!=1 && PINA.1!=1){
OCR1A = 1500;
}
}
}
ویرایش
دیدگاه