【发布时间】: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