打印
[PIC®/AVR®/dsPIC®产品]

PWM波为什么出不来呢?

[复制链接]
1649|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Matthew179|  楼主 | 2014-4-9 19:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用PIC18F生成2个PWM波为什么示波器一点反应都没有呢?
都按着书看了好几遍了~求高人救我~好苦

#include<pic18f46k80.h>
#define uchar unsigned char
#define uint  unsigned int
#define nop() asm("nop")

void init();
void PWMset1();
void PWMset2();

#pragma config XINST = OFF//使不能extended CPU
void main()
{
    init();
    PWMset1();
    PWMset2();
    while(1);
}

void init()// PWM 初始化
{
    INTCON=0x00;
    ADCON1=0X00;
    PIE1=0;
    PIE2=0;
    PIE3=0;
    PIE4=0;
    PIE5=0;//关所有中断
}

void PWMset1()//2MHZ 输出 50%占空比 CCP3
{
    TRISC6=0;//ccp3输出引脚rc6为输出状态
    PR2=0;
    CCPR3L=0;
    CCP3CON=0X2C;
    T2CON=0X05;
//    PR2=0x00;//周期设定 1/2M=(PR2+1)*4*1/8M*分频比(1)
//    CCPR3L=0x7F;
//    CCP3CON=0x3C;//PWM模式
//    T2CON=0x00;//设置前后分频比均为1
//    CCP3IE=0;//CCP3关中断
}

void PWMset2()//8kHZ 输出 50%占空比 CCP4
{
    TRISC7=0;//ccp4输出引脚rc7为输出状态
    PR4=0xF9;//周期设定 1/8k=(PR2+1)*4*1/8M*分频比(1)
    CCPR4L=0x7F;
    CCP4CON=0x3C;//PWM模式
    T4CON=0x04;//设置前后分频比均为1
    CCPTMRS=0x08;//CCP4基于TMR4
    CCP4IE=0;//CCP4关中断
}

沙发
Matthew179|  楼主 | 2014-4-10 15:15 | 只看该作者
木有人知道么~~~:'(:'(

使用特权

评论回复
板凳
wangtao478552| | 2014-4-11 14:53 | 只看该作者
本帖最后由 wangtao478552 于 2014-4-11 14:56 编辑

楼主你写得太不规范了,自己参考对照一下下面的代码,在写一个试试

void pwm_init()
{
    TRISCbits.TRISC2=1;                      /*暂时配置引脚为输入*/

    CCP1CON=0b00001100;               /*P1A调制输出,占空比低2位00,模式1100*/

    PR2=255;                                       /*周期=(255+1)*4*(1/500k)*1         */
    CCPR1L=0x7f;                                 /*占空比高位0111 1111*/
    CCP1CONbits.DC1B=0b00;             /*占空比低2位00*/

    PIR1bits.TMR2IF=0;                     /*清空中断标志位*/
    T2CONbits.T2CKPS=0b01;            /*1:1分频*/
    T2CONbits.TMR2ON=1;                /*启动定时器2*/

    while(PIR1bits.TMR2IF==0);          /*等待第一次溢出*/
    TRISCbits.TRISC2=0;                 /*配置引脚为输出*/
}

使用特权

评论回复
地板
Matthew179|  楼主 | 2014-4-11 18:22 | 只看该作者
wangtao478552 发表于 2014-4-11 14:53
楼主你写得太不规范了,自己参考对照一下下面的代码,在写一个试试

void pwm_init()

感谢~让我去试试

使用特权

评论回复
5
Matthew179|  楼主 | 2014-4-11 21:30 | 只看该作者
wangtao478552 发表于 2014-4-11 14:53
楼主你写得太不规范了,自己参考对照一下下面的代码,在写一个试试

void pwm_init()

已经重写了~果然这么写可读性强多了~但是示波器还是没有反应~是不是主函数有错?还是初始化函数?实在是找不到啊~~~大神救救我

使用特权

评论回复
6
yklstudent| | 2014-4-11 22:18 | 只看该作者
楼主还是先确认MCU能否工作吧 闪个灯啥的
再忙其它的好了

使用特权

评论回复
7
Matthew179|  楼主 | 2014-4-13 09:58 | 只看该作者
yklstudent 发表于 2014-4-11 22:18
楼主还是先确认MCU能否工作吧 闪个灯啥的
再忙其它的好了

额~不是啊~我这块板子是前辈留下的~而且前两天还跑过他的程序~只不过他现在出门了~所以~~~~

使用特权

评论回复
8
wangtao478552| | 2014-4-16 08:09 | 只看该作者
本帖最后由 wangtao478552 于 2014-4-16 08:12 编辑

如果初始化函数写对了的话,应该直接就出PWM了,看看引脚配置好了没,例如是否将引脚配置成了模拟输入,注意ADCON寄存器,还有测试时接对了引脚没有。

工程芯片选对了没

使用特权

评论回复
9
wangtao478552| | 2014-4-16 08:11 | 只看该作者
#include<pic.h>
#define uchar unsigned char
#define uint unsigned int

void pwm_init();

void main()
{
    OSCCON=0b01100001;      /*4MHz*/
    pwm_init();
    while(1);
}

以上是主函数部分,我写的是PIC16F886,你改下管脚调吧

使用特权

评论回复
10
Matthew179|  楼主 | 2014-4-18 21:11 | 只看该作者
wangtao478552 发表于 2014-4-16 08:11
#include
#define uchar unsigned char
#define uint unsigned int

感谢~明天去实验室看一看~

使用特权

评论回复
11
阳光的味道3121| | 2014-4-20 13:55 | 只看该作者
你看看你的主程序,main就那几句,你的程序一直在while(1);那块死着。应该改为while(1){PWMset1();    PWMset2()};

使用特权

评论回复
12
Matthew179|  楼主 | 2014-4-21 12:20 | 只看该作者
问题解决了~ 配置字的问题~加了一条#pragma config IESO=OFF 就好了~

使用特权

评论回复
13
Matthew179|  楼主 | 2014-4-21 12:21 | 只看该作者
阳光的味道3121 发表于 2014-4-20 13:55
你看看你的主程序,main就那几句,你的程序一直在while(1);那块死着。应该改为while(1){PWMset1();    P ...

首先感谢你的回复~~~但是 PWM是硬件实现的~ 不需要反复设置的吧

使用特权

评论回复
14
wangtao478552| | 2014-4-22 16:27 | 只看该作者
Matthew179 发表于 2014-4-21 12:21
首先感谢你的回复~~~但是 PWM是硬件实现的~ 不需要反复设置的吧

没有反复设置啊

使用特权

评论回复
15
wangtao478552| | 2014-4-22 16:28 | 只看该作者
Matthew179 发表于 2014-4-21 12:20
问题解决了~ 配置字的问题~加了一条#pragma config IESO=OFF 就好了~

回错了

使用特权

评论回复
16
wangtao478552| | 2014-4-22 16:28 | 只看该作者
阳光的味道3121 发表于 2014-4-20 13:55
你看看你的主程序,main就那几句,你的程序一直在while(1);那块死着。应该改为while(1){PWMset1();    P ...

呵呵

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

9

帖子

0

粉丝