我正在 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 不在运行时设置角度