AVR atmega16上的PWM定时器2软件实现

时间:2013-06-24 23:11:22

标签: c avr

我正在ATmega16上实现PWM,以便能够控制20个并发伺服。我已经在定时器1上成功实现了16个伺服器,而定时器2有问题,在运行时更改输出角度的值。即当使用定时器2的预初始化角度时,PWM信号是正确的,而实时改变角度值会导致修改的角度值不被输出(不输出信号)

ISR(TIMER2_OVF_vect) {
TCNT2 = 0xFF - (SERVO_TIME*(F_CPU/1000000))/256 - truncf(50/8); // set max duty cycle , 50 added to sum up the 20 ms period
servo_index_2++;
if (servo_index_2 > 7)
    servo_index_2 = 0;
OCR2 = TCNT2 + angles0[servo_index_2]; 
PORTC |= 1 << servo_index_2 ;
}

为什么ISR没有在运行时设置角度

0 个答案:

没有答案