[PIC®/AVR®/dsPIC®产品] 无法实现100KHz输出

[复制链接]
1453|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 | 显示全部楼层

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因
 楼主| 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);
}
chenho 发表于 2023-3-31 21:32 | 显示全部楼层
用新的型号,MCC生成代码几分钟就搞定了
yufe 发表于 2023-3-31 21:33 | 显示全部楼层
软件做100KHz PWM?
你是开玩笑吧
wuhany 发表于 2023-3-31 21:34 | 显示全部楼层
为啥不行呢?
yufe 发表于 2023-3-31 21:37 | 显示全部楼层
看手册TIMR0不分频正好是1us啊,内部时钟4MHz
wangzsa 发表于 2023-3-31 21:40 | 显示全部楼层
PIC12F675单指令周期=(1/4000000)*4=1us,软件模拟PWM。
llljh 发表于 2023-3-31 21:41 | 显示全部楼层
除非其他事情都不做,CPU资源被这个软件模拟PWM一直占用
dingy 发表于 2023-3-31 21:42 | 显示全部楼层
只输出PWM,并且PWM的位数极低,这样做就没意义了。
pengf 发表于 2023-3-31 21:44 | 显示全部楼层
跑指令也是需要时间的
renyaq 发表于 2023-3-31 21:45 | 显示全部楼层
正解,楼主可以选带PWM外设的器件。
 楼主| wenfen 发表于 2023-3-31 21:46 | 显示全部楼层
感谢,不过我也做啥操作啊,就消耗了60多条指令了?
wuhany 发表于 2023-3-31 21:47 | 显示全部楼层
1uS的指令周期,你要做1uS的定时中断?
午夜粪车 发表于 2023-3-31 21:49 | 显示全部楼层
中断处理不要花时间吗?
wangzsa 发表于 2023-3-31 21:51 | 显示全部楼层
100KHz=10uS,就算是做1bit PWM,也要5uS内处理一次,这小CPU忙得过来吗?
 楼主| wenfen 发表于 2023-3-31 21:53 | 显示全部楼层
确实是,即使做了也是问题多多。再次感谢。
chenho 发表于 2023-3-31 21:54 | 显示全部楼层
不清楚你的代码怎么写的,但用定时器来做,会更加耗时
您需要登录后才可以回帖 登录 | 注册

本版积分规则

737

主题

8940

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部