我不能动态改变PWM的占空比。我在数据表中发现了这一点,我可能误解了这一点:
CCPR1L和CCP1CON<5:4>可以随时写入,但在PR2和TMR2之间发生匹配(即周期完成)之前,不能将占空比值复制到CCPR1H中。在脉宽调制模式下,CCPR1H是一个只读寄存器.
使用PIC18F1220,XC8 v1.34,MPLABv5.30
PR2=99; //calculation
CCPR1L = 50; //calculation*duty cycle
T2CONbits.TMR2ON = 1; //start timer
while(1)
{
ADC_Result[0] = ADC_Read(0);
ADC_Result[1] = ADC_Read(1);
if(ADC_Result[0] > 900)
{
T2CONbits.TMR2ON = 0;
CCPR1L = 0;
T2CONbits.TMR2ON = 1;
}
else
{
T2CONbits.TMR2ON = 0;
CCPR1L = 50;
T2CONbits.TMR2ON = 1;
}
PIR1bits.CCP1IF=0;
while(PIR1bits.CCP1IF==0);
}难道不应该让计时器重新启动这个时间段吗?
附带注意:我知道PWM工作得很好。在模拟器上,我可以让两种情况都发生,只需要重新启动。我也试过,不关机,按定时器,但没有成功。
发布于 2020-01-15 01:53:31
问题,以及为什么需要重置是最后一个while循环。在第75页的数据表中,显示CCP1F位在脉宽调制操作中是未使用的。如果要等待期间过期才运行ADC,请使用tmr2if位。
https://stackoverflow.com/questions/59737090
复制相似问题