Dynami c PWM рабочий цикл - PullRequest
       93

Dynami c PWM рабочий цикл

0 голосов
/ 14 января 2020

Я не могу динамически изменить рабочий цикл ШИМ. Я нашел это в таблице данных, которую я мог неправильно истолковать:

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);
    }

Не следует выключать и снова включать перезапуск таймера Период?

Примечание: Я знаю, что ШИМ работает нормально. На симуляторе я могу получить оба случая, просто нужно перезагрузить. Я также пытался без выключения и включения таймера без успеха.

1 Ответ

1 голос
/ 15 января 2020

Проблема и необходимость сброса - последняя, ​​пока l oop. в таблице на стр. 75 показано, что бит CCP1F не используется в режиме ШИМ. Если вы хотите дождаться истечения периода для запуска AD C, используйте бит tmr2if.

...