【问题标题】:CCP module - PWM modeCCP 模块 - PWM 模式
【发布时间】:2014-10-27 15:08:16
【问题描述】:

我正在尝试使用此代码进行 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 模块的功能,对吧? 我错过了什么?

【问题讨论】:

  • 是的,就是这样。我无法发现您的代码有任何明显的问题,尽管不可否认,在数据表的一角经常会隐藏一些小问题。您是否尝试过手动切换引脚以查看是否在示波器上获得输出,当您步进调试器时 TMR2 是否会增加?如果这样可行,那么我的第一个怀疑将是逻辑分析仪中的错误。这些模拟器出了名的狡猾,很可能在真实硬件上运行良好

标签: c microcontroller pic pwm


【解决方案1】:

附加信息:

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

最后一个项目符号是否意味着 CCP2 与 RC1 而不是 RC2 复用?

【讨论】:

  • 您使用的是哪个编译器?在 Microchip 的 C18 编译器的 p18f25k80.h 中,CCP2 不是 PORTCbits 的位域。
  • 问题出在 MPlab 的逻辑分析仪上。我在面包板上测试了相同的代码,一切正常。谢谢大家的时间
猜你喜欢
  • 1970-01-01
  • 2014-07-27
  • 1970-01-01
  • 1970-01-01
  • 2017-04-29
  • 1970-01-01
  • 2014-05-19
  • 2011-07-02
  • 2011-05-05
相关资源
最近更新 更多