CCP模块 - PWM模式

时间:2014-10-27 15:08:17

标签: c microcontroller pic pwm

我试图使用此代码制作PWM输出,但显然缺少某些东西。因为当我在MPLab中检查逻辑分析器时,CCP2输出没有任何反应。我正在使用pic18f25k80。

void main() {

    // Set up PWM
    CCP2CON = 0b00001100;       // Enable PWM on CCP2, bits 5:4 are LSB part of duty cycle
    CCPTMRS = 0b00000000;       // Use timer2 for all CCP modules
    CCPR2L = 31;                // MSB part of duty cycle
    TRISC = 0b00000000;         // Set port C as output
    PORTC = 0;                  // Clear port C

    // Set Up timer2
    PR2 = 249;                  // PWM period = (PR+1)*4*Tcy = 1ms
    T2CON = 0b00000100;         // Enable TMR2 with prescaler = 1

    while(1)
    {
    }
}

我希望什么时候

  • TMR2 = PR2,CCP2输出切换,定时器复位
  • 此外,TMR2 = CCPR2L(占空比),CCP2输出切换
  • TMR2一直在计数,直到达到第1步。

    我想这应该是自动发生的事情。我的意思是我不必为此编写代码,因为这是PWM模块的功能,对吗? 我错过了什么?

1 个答案:

答案 0 :(得分:0)

其他信息:

  • TMR 2正在计算中。
  • 当我在while循环中添加PORTC = 0xFF;并再次调试代码时。除RC2(RC2 = CCP2的相应输出)外,端口C上的所有信号均已置位。
  • 当我为CCP3尝试相同的代码时,端口C上的所有信号都被置位,RC2和RC6除外(RC6 = CCP3的相应输出)。
  • 当我用PORTC = 0xFF;替换PORTCbits.CCP2 = 1;时,只有RC1设置为高。

这最后一个子弹是否意味着CCP2与RC1而不是RC2复用?