Я не могу динамически изменить рабочий цикл ШИМ. Я нашел это в таблице данных, которую я мог неправильно истолковать:
CCPR1L и CCP1CON <5: 4> могут быть записаны в любое время, но значение рабочего цикла не копируется в CCPR1H до совпадения между Происходит PR2 и TMR2 (т.е. период завершен). В режиме ШИМ CCPR1H является регистром только для чтения.
Использование PIC18F1220, XC8 v1.34, MPLAB v5.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);
}
Не следует выключать и снова включать перезапуск таймера Период?
Примечание: Я знаю, что ШИМ работает нормально. На симуляторе я могу получить оба случая, просто нужно перезагрузить. Я также пытался без выключения и включения таймера без успеха.