我基本上是試圖在一個特定的按鈕pressed.The執行的多個伺服電機動作鏈下面的代碼工作正常,但在多個舵機即當按下按鈕Servo1移至只能執行單一的運動900和伺服2到1500,否則他們回到標準位置。標準I/O端口(ATmega32 AVR)上的多個伺服控制?
我想要實現的是一組動作,例如當按鈕被按下我想同時得到伺服擺動(0到180爲0(3個不同的運動))。我試圖用延時功能,改變伺服的值,但那就不是工作,這IM假設是因爲延遲變得比我快速PWM的時間週期。
void main()
{
DDRB = 0xFF;
DDRC = 0x00;
PORTC = 0XFF;
TCCR1A |= 1<<WGM11;
TCCR1B |= 1<<WGM12 | 1<<WGM13 | 1<<CS10;
TIMSK |= 1<<OCIE1A;
ICR1=19999;
sei();
uint16_t Servo1 = 2000, Servo2 = 900;
while(1)
{
if(bit_is_clear(PINC,0))
{
Servo1 = 900, Servo2 = 1500;
}
else{
Servo1 = 1500, Servo2=2200;
}
if(TCNT1>=800 && TCNT1<=2400)
{
if (TCNT1 >= Servo1 && bit_is_set(PORTB,PINB0)) PORTB &= ~(1<<PINB0);
if (TCNT1 >= Servo2 && bit_is_set(PORTB,PINB1)) PORTB &= ~(1<<PINB1);
}
}
}
ISR(TIMER1_COMPA_vect)
{
PORTB = 0xFF;
}
我該怎麼做呢? 任何幫助表示讚賞。
如果可能的話,我會選擇與硬件PWM一個MCU 。也許你的計時器硬件甚至支持它。至少你應該有一個輸出比較功能,它允許在定時器超時時切換一個引腳。在這種情況下,唯一涉及的軟件將會重置定時器,並且您的CPU可以在此期間執行其他操作。 – Lundin