我想用這段代碼做一個PWM輸出,但顯然有些東西丟失了。因爲當我檢查MPLab中的邏輯分析儀時,CCP2輸出沒有任何反應。我正在使用pic18f25k80。CCP模塊 - PWM模式
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是否增加?如果這有效,那麼我的第一個可疑將是邏輯分析儀中的一個錯誤。這些模擬器是臭名昭着的,它可能在真正的硬件上工作得很好 – doynax 2014-10-27 16:21:59