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

无法实现100KHz输出

[复制链接]
913|38
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wenfen|  楼主 | 2023-3-31 21:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PIC12F675定时器无法实现100KHz输出

使用特权

评论回复
沙发
wuhany| | 2023-3-31 21:25 | 只看该作者

还有什么现象?能再详细描述下吗?

使用特权

评论回复
板凳
wenfen|  楼主 | 2023-3-31 21:27 | 只看该作者
想用PIC12f675实现100KHz的PWM输出,看了下手册算了下应该是可以做1us定时的。但搞了半天最高只能输出15KHz。

使用特权

评论回复
地板
wuhany| | 2023-3-31 21:28 | 只看该作者

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
5
wenfen|  楼主 | 2023-3-31 21:29 | 只看该作者
#include<pic12f675.h>

// CONFIG
#pragma config FOSC = INTRCIO   // Oscillator Selection bits (INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN)
#pragma config WDTE = ON        // Watchdog Timer Enable bit (WDT enabled)
#pragma config PWRTE = OFF      // Power-Up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF      // GP3/MCLR pin function select (GP3/MCLR pin function is digital I/O, MCLR internally tied to VDD)
#pragma config BOREN = OFF      // Brown-out Detect Enable bit (BOD disabled)
#pragma config CP = OFF         // Code Protection bit (Program Memory code protection is disabled)
#pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled)

#define nop() asm("NOP")

#define u8 unsigned char
#define u16 unsigned int

#define PWM_A GPIO2
#define LED GPIO1

u8 n = 0;

void init(void)
{
    CMCON = 0x07;
    ANSEL = 0x00;  
    WPU |= 0x20;
    TRISIO = 0x38;
   
    TMR0 = 0xFF;   
    //OPTION_REG
    T0CS = 0;
    PSA = 1;
   
    //INTCON
    T0IF = 0;
    T0IE = 1;
    GIE = 1;
}

void __interrupt(low_priority) tmer0(void)
{
     if(T0IF==1)
         {
         TMR0 = 0xFF;
         T0IF = 0;
         n++;
         if(n==1)
            PWM_A = 1;
         else
         {
             PWM_A = 0;
             n = 0;
         }
     }
}
void main(void)
{
    init();
    while(1);
}

使用特权

评论回复
6
chenho| | 2023-3-31 21:32 | 只看该作者
用新的型号,MCC生成代码几分钟就搞定了

使用特权

评论回复
7
yufe| | 2023-3-31 21:33 | 只看该作者
软件做100KHz PWM?
你是开玩笑吧

使用特权

评论回复
8
wuhany| | 2023-3-31 21:34 | 只看该作者
为啥不行呢?

使用特权

评论回复
9
yufe| | 2023-3-31 21:37 | 只看该作者
看手册TIMR0不分频正好是1us啊,内部时钟4MHz

使用特权

评论回复
10
wangzsa| | 2023-3-31 21:40 | 只看该作者
PIC12F675单指令周期=(1/4000000)*4=1us,软件模拟PWM。

使用特权

评论回复
11
llljh| | 2023-3-31 21:41 | 只看该作者
除非其他事情都不做,CPU资源被这个软件模拟PWM一直占用

使用特权

评论回复
12
dingy| | 2023-3-31 21:42 | 只看该作者
只输出PWM,并且PWM的位数极低,这样做就没意义了。

使用特权

评论回复
13
pengf| | 2023-3-31 21:44 | 只看该作者
跑指令也是需要时间的

使用特权

评论回复
14
renyaq| | 2023-3-31 21:45 | 只看该作者
正解,楼主可以选带PWM外设的器件。

使用特权

评论回复
15
wenfen|  楼主 | 2023-3-31 21:46 | 只看该作者
感谢,不过我也做啥操作啊,就消耗了60多条指令了?

使用特权

评论回复
16
wuhany| | 2023-3-31 21:47 | 只看该作者
1uS的指令周期,你要做1uS的定时中断?

使用特权

评论回复
17
午夜粪车| | 2023-3-31 21:49 | 只看该作者
中断处理不要花时间吗?

使用特权

评论回复
18
wangzsa| | 2023-3-31 21:51 | 只看该作者
100KHz=10uS,就算是做1bit PWM,也要5uS内处理一次,这小CPU忙得过来吗?

使用特权

评论回复
19
wenfen|  楼主 | 2023-3-31 21:53 | 只看该作者
确实是,即使做了也是问题多多。再次感谢。

使用特权

评论回复
20
chenho| | 2023-3-31 21:54 | 只看该作者
不清楚你的代码怎么写的,但用定时器来做,会更加耗时

使用特权

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

本版积分规则

737

主题

8940

帖子

8

粉丝