STC15W4K48S4单片机用PCA模块产生3路pwm得问题
我使用pca来产生3路pwm,但是pca模块2就是输不出pwm。我已经把p37引脚初始化成强推挽,但是还不行。我换个了个stc15f的单片机使用一样的程序,一样的电路(其实我这个也没有任何外部电路),这个就可以正常输出3路pwm,所以我可以确定单片机外围电路是没问题的。一开始我以为是那个stc15wpca模块2坏掉了,后来我换了2个单片机还是这样。
但是有一个奇怪的现象:我把pca模块2产生的pwm的p37管脚切换到p27时他就有反应,但是他输出的pwm只有几百毫伏,而且电压不稳定波动大,而且不受控制,它输出的占空比会随着其他两路PCA模块产生的pwm的变化而变化。
我也试过用isp下载软件中的范例程序直接下载进去看过也是同样的问题
这是我的程序
#include <STC15W.H>
#define uchar unsigned char
#define uint unsigned int
void delay_long(uint y) //延时(ms)
{
uint i,j;
y=7*y;
for(i=y;i>0;i--)
for(j=160;j>0;j--);
}
void PWM_init()
{
P2M0=0XFF;
P2M1=0X00;
P3M0=0XFF;
P3M1=0X00;
P_SW1 =0x00; //CCP_S0=0 CCP_S1=0 //(P1.2/ECI, P1.1/CCP0, P1.0/CCP1, P3.7/CCP2) 00--0000
// P_SW1 =0x10; //CCP_S0=1 CCP_S1=0 (P3.4/ECI_2, P3.5/CCP0_2, P3.6/CCP1_2, P3.7/CCP2_2)
// P_SW1 =0x20; //CCP_S0=0 CCP_S1=1 (P2.4/ECI_3, P2.5/CCP0_3, P2.6/CCP1_3, P2.7/CCP2_3)
CCON = 0; //初始化PCA控制寄存器
//PCA定时器停止
//清除CF标志
//清除模块中断标志
CL = 0; //复位PCA寄存器
CH = 0;
CMOD = 0x08; //设置PCA时钟源
//禁止PCA定时器溢出中断
PCA_PWM0 = 0x00; //PCA模块0工作于8位PWM
CCAPM0 = 0x42; //PCA模块0为PWM模式
PCA_PWM1 = 0x00; //PCA模块1工作于8位PWM
CCAPM1 = 0x42; //PCA模块1为PWM模式
PCA_PWM2 = 0x40; //PCA模块2工作于8位PWM
CCAPM2 = 0x42; //PCA模块2为PWM模式
CR = 1; //PCA定时器开始工作
}
void main()
{
uchar pwm;
PWM_init();
while (1)
{
CCAP0H = CCAP0L = 255-pwm; //PWM0的占空比 ((100H-20H)/100H)
CCAP1H = CCAP1L = pwm; //PWM1的占空比((100H-20H)/100H)
CCAP2H = CCAP2L = 255-pwm; //PWM1的占空比((100H-20H)/100H)
pwm++;
delay_long(100);
}
}
在这我想插个题外话。
我很喜欢这个论坛和这个论坛的app,他对我有很大的帮助。但是我也不知道为什么我在手机上的app发表了一次(无论是发帖还是回复)那么我这一天就不能再发表任何言论了,只要你一发表他就会出现发表失败,无论是在手机上发表言论还是网页上论坛发表言论都是一样。这也是我为什么借助这次发帖提问题说着这个与主题毫无关系的话原因。
谁能跟我解释一下这到底是为什么吗?谢谢
...
关注!O(∩_∩)O~
快来大神啊
我用STC自带的库函数驱动RGB 完全乱的 小编现在调好了么
是我自己弄错了stc15w4k系列的只有2路pca模块,现在已经弄好了
同样的问题,我还问了他们的客服,他们回答的是不可能,和没有回答没有什么区别
同样的问题,pwm0、pwm1能用pwm2不能用,不知道这是怎么回事